我可以使用 1 行程序集,然后使用一些辅助函数通过硬编码不同成员的正确偏移量来遍历 PEB 文件。
你必须从这里开始:
static void*
JMIM_ASM_GetBaseAddr_PEB_x64()
{
void* base_address = 0;
unsigned long long var_out = 0;
__asm__(
" movq %%gs:0x60, %[sym_out] ; \n\t"
:[sym_out] "=r" (var_out) //:OUTPUTS
);
//: printf("[var_out]:%d\n", (int)var_out);
base_address=(void*)var_out;
return( base_address );
}
然后在可执行文件上使用 windbg 来检查您机器上的数据结构。您需要的许多值都很难找到,而且只有随机黑客才会真正记录下来。您会发现自己在许多恶意软件编写网站上寻找答案。
dt nt!_PEB -r @$peb
在 windbg 中获取有关 PEB 文件的信息非常有用。
在我的游戏引擎中有一个完整的工作实现。只需查看:/DEP/PEB2020 即可获取代码。
https://github.com/KanjiCoder/AAC2020
I don't include <windows.h> in my game engine. Yet I use "GetProcAddress"
and "LoadLibraryA". Might be in-advisable to do this. But my thought was the more
moving parts, the more that can go wrong. So figured I'd take the "#define WIN32_LEAN_AND_MEAN" to it's absurd conclusion and not include <windows.h> at all.