游戏里的多开-检测和反检测

一.从生命周期的角度看游戏的多开检测
0x0 事前检测

当你启动第二个游戏的瞬间阻止你这个行为,防患于未然。

特点:不会涉及到封号,这是人为的一个功能。
0x1 事中检测

在游戏运行的过程中进行悄咪咪的检测

特点:没有任何提示,会导致封号
0x2 事后检测

基于数据的检测,你登录了游戏,一定会暴露登录IP等信息。同一个IP下有多台电脑,那一定属于多开行为

二.从技术原理的角度看游戏的多开检测
0x0 进程枚举多开检测方案

直接调用现成的库或者自己去研究实现原理

#include 
CreateToolhelp32Snapshot()
Process32First()
Process32Next()
ExitProcess()

游戏里的多开-检测和反检测_第1张图片
攻击方案: 复制PE文件,然后进行重命名

0x1 互斥量多开检测方案
CreateMutexA()

攻击方案: 待研究

0x2 信号量多开检测方案

信号量特点:在不同进程间能够共享数据资源

OpenSemaphoreW()
CreateSemaphoreW()
ReleaseSemaphore()

攻击方案: 自己领悟

0x2 窗口多开检测方案

特点:需要在窗口没有出现之前执行,否则把自己给检测到了

FindWindow()
SetWindowTextW()
0x2 共享内存检测方案

特点:实现进程间通信的一种手段(常规状态下,每个程序的内存空间是独立的,不能相互访问)

#pragma data_seg("_hdata") //告诉编译器这个数据放在"_hdata"节的地方
int game_count = 0;
#pragma data_seg() 
#pragma comment(linker, "/SECTION:_hdata,RWS")//READ WRITE Share
三.实战

寻找切入点对开检测算法会放在哪个时间段执行呢?
通过观察猜测是在游戏启动前进行检测

通过逆向分析和排除法,最终定位到了检测算法的地址 0x409322

你可能感兴趣的:(#,游戏逆向分析项目,游戏)