向 Windows DLL 添加静态变量

逆向工程 拆卸 视窗 部件 x86 聚乙烯
2021-06-28 20:27:59

我正在尝试修补 Windows x86 DLL 中的一个函数,但是结果证明我需要一个静态变量来存储某些状态,而这些状态在调用中未被原始可执行文件正确保留。

我知道通常静态变量存储在.data段中或.bss段中,以及 PE 文件头中SizeOf(Un)InitializedData但是,我很难找出如何在 x86 程序集中写入添加空间的地址。基本上,我假设它类似于mov eax, dword ptr ds:[??],但我不知道??我应该在那里放什么。

另一种方法是破解并重新使用.data内的一些希望实际上没有使用的内存区域我试图通过查看Memory layout选项卡x32dbg并找到.data加载的 DLL段地址,然后获取接近末尾某处的地址来做到这一点这种方法将工作秒,内存确实是书面的,但该计划不久之后崩溃由于一些例外RtlFreeHeap(),这我也感到困惑,因为我认为它的.data部分,而不是堆。

有人可以帮助我了解如何做到这一点吗?

1个回答

使用 ghidra 检查 bss 肯定会让您了解谁在引用什么。

如果没有符号,就很难推断段内据称未使用的空间是否是更复杂结构的一部分。

出于这个原因,我建议通过 Ida 或任何 PE 编辑器扩展它。一旦有了空间,就可以使用先前推断的交叉引用来计算要使用的地址。您必须模仿该模式,只需使用新分配的空间(第一个字节)和您选择的交叉引用(第一个字节)之间的差异来增加参考值。