击败基于签名的检测¶
即使有惊人的混淆,你也不会轻易击败签名检测。分析机器人并编写签名的工程师非常熟练,混淆最多只是让他们的工作稍微困难一点的麻烦。
要完全规避 SBD,你需要破坏检测代码。这需要确切知道 SBD 如何工作。例如,PunkBuster 用 NtQueryVirtualMemory()扫描所有运行进程的内存寻找任何签名。如果你想绕过它,你可以通过钩住 NtQueryVirtualMemory() 函数向所有 PunkBuster 进程注入代码。函数尝试查询你的机器人进程的内存时,你可以给它任何你想要的数据,像这样:
NTSTATUS onNtQueryVirtualMemory(
HANDLE process, PVOID baseAddress,
MEMORY_INFORMATION_CLASS
memoryInformationClass,
PVOID buffer, ULONG numberOfBytes, PULONG
numberOfBytesRead) {
// 如果扫描针对此进程,确保它看不到钩子 DLL
if ((process == INVALID_HANDLE_VALUE ||
process == GetCurrentProcess()) &&
baseAddress >= MY_HOOK_DLL_BASE &&
baseAddress <= MY_HOOK_DLL_BASE_PLUS_SIZE)