回顾一下前文提到的东西
游戏主要检测分为5大块
- 1.CALL检测 ->由TenRpcs负责
- 2.文件及内存检测 - > 由TCJ负责
- 3.客户行为游戏数据检测以及本地封包加密解密发送回传 - > 由GameRpcs负责
- 4.本地机器码查询 - > 由PolicyProbe负责5.调试游戏等保护 -> 由TerSafe负责
我们需要处理的东西是1.2.3机器码解决办法是 老办法 钩住 LoadLibraryExW 让 PolicyProbe 不在载入列表里即可过掉机器码检测TerSafe 我们不做处理,没有必要
接下来我们编写一个注入到游戏大厅的DLL,然后转换成ShellCode,为了安全起见,先要把大厅的保护干掉代码如下
VOID 干游戏大厅检测() //稳妥起见还是要干掉把{INT 判断计次 = NULL;BYTE 判断字节 = NULL;DWORD 临时变量 = NULL;DWORD 修改前的页面保护属性 = NULL;ULONG32 模块地址 = NULL;do{ 模块地址 = ULONG32(GetModuleHandle("TenRpcs.dll"));} while (!模块地址);do{ RtlCopyMemory(&判断字节, LPVOID(模块地址 + /*此处地址屏蔽*/), sizeof(判断字节));} while (判断字节 != 0x68);临时变量 = /*此处地址屏蔽*/;BYTE TenRpcs检测点1[] = { 0xE9, 0x60, 0x06, 0x00, 0x00, };if (VirtualProtect(LPVOID(模块地址 + 临时变量), sizeof(TenRpcs检测点1), PAGE_EXECUTE_READWRITE, &修改前的页面保护属性)){ RtlCopyMemory(LPVOID(模块地址 + 临时变量), &TenRpcs检测点1, sizeof(TenRpcs检测点1)); if (VirtualProtect(LPVOID(模块地址 + 临时变量), sizeof(TenRpcs检测点1), PAGE_EXECUTE, &修改前的页面保护属性)) { RtlZeroMemory(TenRpcs检测点1, sizeof(TenRpcs检测点1)); } } CloseHandle(保护检测线程句柄);}
干掉这个检测点之后 游戏大厅的保护系统就崩溃了,包括TerSafe,所有检测不会初始化,不知道大厅检测什么,为了安全起见还是干掉把
一定要在第一时间注入,否则保护初始化完成就没机会了
VOID 等候游戏(){INT 对局计次 = 1;HWND 窗口句柄 = NULL;DWORD 游戏进程ID = NULL;ULONG32 模块句柄 = NULL;INT 文字颜色[4] = { FOREGROUND_BLUE, FOREGROUND_GREEN, FOREGROUND_RED, FOREGROUND_INTENSITY };do{ Sleep(100); 窗口句柄 = FindWindow("RCLIENT", "League of Legends");} while (!窗口句柄);AllocConsole();srand((int)time(0));freopen("conout$", "w", stdout);CONSOLE_CURSOR_INFO Cursor_info = { 1, 0 };SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 文字颜色[rand() % 3 + 1]);//DeleteMenu(GetSystemMenu(GetConsoleWindow(), FALSE), SC_CLOSE, MF_BYCOMMAND);JMP1:std::cout |