跳转至

用线程注入执行代码洞穴

把完整的代码洞穴写入内存后,剩下的就是执行它。在这个示例中,你可以用以下代码执行洞穴:

HANDLE thread = CreateRemoteThread(process, NULL, 
NULL,
    (LPTHREAD_START_ROUTINE)remoteCave,
    remoteString, NULL, NULL);
WaitForSingleObject(thread, INFINITE);
CloseHandle(thread);
VirtualFreeEx(process, remoteString, fulllen, 
MEM_RELEASE)

对 CreateRemoteThread()、WaitForSingleObject() 和 CloseHandle() 的调用注入并执行代码洞穴,VirtualFreeEx() 通过释放清单 7-4 代码中分配的内存来掩盖机器人的痕迹。在最简单的形式下,这就是执行注入游戏的代码洞穴的全部内容。实践中,你还应该在调用 VirtualAllocEx()、WriteProcessMemory() 和 CreateRemoteThread() 后检查返回值,确保一切都成功。

例如,如果 VirtualAllocEx() 返回 0x00000000,意味着内存分配失败。如果你不处理失败,WriteProcessMemory() 也失败,CreateRemoteThread() 会以 0x00000000 作为入口点开始执行,使游戏崩溃。WriteProcessMemory() 和 CreateRemoteThread() 的返回值也是如此。通常,这些函数只在进程句柄没有以所需访问标志打开时才会失败。