我在 .exe 文件中有这个地址,我想做一个 C# Windows 窗体应用程序,让我在地址十六进制部分写一个新数字,我的意思是它是"C0/EA/03",我想更改" 03"到我在我的应用程序中写的数字并保存更改。那可能吗?如果是,请帮助我如何做到这一点。提前致谢。
为了更具体,我想这样做:
-示例(无效,仅作为示例) -
因此,当我单击按钮时,我之前显示的地址中的 03 现在将变为 FF(255 十六进制)。
这看起来像是来自 OllyDbg 的截图,是这样吗?下一个问题是您想在运行时(注入)还是在静态 exe 文件(补丁)中执行此操作?
要修补文件,您需要找出 exe 文件中该特定字节的实际偏移量。这样做需要识别 PE 文件的文本部分,转到文本部分的基地址,然后偏移到文本部分。要获得偏移量,您需要使用反汇编程序,如 Olly 或 ndisasm。找到该shr dl,3
指令,然后计算该指令相对于已加载文本部分的偏移量。请记住,加载的虚拟地址与文件中的地址不同。0x538695 可能是一个加载的虚拟地址,但很难从你的问题描述中分辨出来(我猜它是一个虚拟地址,因为它看起来像 Olly 的字体)。无论如何,将该偏移量添加到 PE EXE 文件中文本部分的基础上,一切就绪。
使用 LordPE 之类的工具可能更容易做到这一点。
http://www.tech-juice.org/2011/02/21/portable-executable-converting-rva-to-file-offset-and-back/