编码/补丁变量在其他.exe

Encoding/patching variable in other .exe

本文关键字:其他 exe 变量 补丁 编码      更新时间:2023-10-16

我不知道该怎么做:

我们有一个文件,命名为test。exe,

它有const int value = 5;在它里面,它所做的一切就是计数<<价值;

我想创建其他可执行文件,修补test.exe,所以它现在输出10而不是5。我希望在运行前完成。

我试过关闭ASLR,获得该变量的地址,然后修补,但磁盘和内存中的地址不同。

对不起,这句话假设你在Windows系统上工作。如果没有,我相信对于其他可执行的图像格式,您可以遵循类似的方法。

假设您试图询问如何更改目标中的数据,而不是如何更改屏幕输出,在这个特定的示例中…

你考虑过查看可执行映像的PE头吗?一旦加载到内存中,你可以将特定数据块的地址转换为PE文件中的偏移量,但请查看相关图像的PE Header中的IMAGE_SECTION_HEADER结构。

首先,计算内存中数据的RVA。这是数据相对于它所在的部分的地址。

第二,通过将可执行文件的头读入缓冲区,在可执行文件的PE头内部的IMAGE_SECTION_HEADER结构中进行索引。一旦将这个头文件加载到内存缓冲区中,就可以使用指针对其进行处理。一样,

IMAGE_NT_HEADERS* pImageHeader = &peHeaderBuffer[0];

找到包含你的数据的正确的IMAGE_SECTION_HEADER后,你可以访问结构的PointerToRawData成员,它将给你从PE文件开始的偏移量,如果你添加RVA,你将得到从你的数据所在的文件开始的偏移量。

显然,我的回答没有解释如何通过section头索引,因为这是一个相当乏味的任务,需要一段时间来解释。我建议您从简单的调试器(如OllyDbg)中查看可执行文件的PE头文件,并参考MSDN关于PE头文件的文档-可以在这里找到:

http://msdn.microsoft.com/en-us/library/windows/desktop/ms680336%28v=VS.85%29.aspx

如果您想要做的只是将此信息从目标中反转过来,那么使用OllyDbg非常容易。只需浏览PE Header视图,直到看到与数据对应的部分,OllyDbg将在那里列出PointerToRawData成员,您可以将其添加到RVA中。

通过签名查找:在值5周围获得8-16字节,然后在.exe二进制文件中搜索它们。

还要注意const int值通常内联到汇编代码中,所以如果你有2个或更多的语句引用它,你必须修补它们。