Assembly 在可执行文件中查找指令,给定其在运行进程中的地址?
我正在修改一个旧的弃置软件游戏,让它拥有无限的生命 包含指令Assembly 在可执行文件中查找指令,给定其在运行进程中的地址?,assembly,reverse-engineering,memory-address,portable-executable,cheat-engine,Assembly,Reverse Engineering,Memory Address,Portable Executable,Cheat Engine,我正在修改一个旧的弃置软件游戏,让它拥有无限的生命 包含指令dec ecx的地址与其在调试的.exe中的位置不同 我记得有一次我的一位老朋友告诉我,有一个公式可以通过.exe中的指令获得“真实”地址。作弊引擎给了我内存地址。我记得在数学公式中,我需要得到模块,在OllyDbg中我得到了它。但是我不记得公式了。有人知道这个数学公式吗?公式很简单! 还有另一种方法可以获取文件位置以永久修改.exe?当然有一个公式。 我们只需要反转PE加载程序的功能: 找到PE节在文件中的起始位置。 这些数字称为文件
dec ecx
的地址与其在调试的.exe中的位置不同
我记得有一次我的一位老朋友告诉我,有一个公式可以通过.exe中的指令获得“真实”地址。作弊引擎给了我内存地址。我记得在数学公式中,我需要得到模块,在OllyDbg中我得到了它。但是我不记得公式了。有人知道这个数学公式吗?公式很简单!
还有另一种方法可以获取文件位置以永久修改.exe?当然有一个公式。
我们只需要反转PE加载程序的功能:
这些数字称为文件偏移量
这些地址称为RVA(相对虚拟地址)
这些地址称为VAs(虚拟地址),是文件偏移的最终地址
- 起始文件偏移量,其中节在文件中开始
- 文件中的长度
- 一个起始内存地址,该段应加载到内存中(相对于基址)
- 加载到内存中后的长度(可能与文件长度不同)
出于某种原因,现在很难找到它,但它应该仍然存在于互联网上。记住:它是免费的
找到PE编辑器:,使用密码tuts4you解包RAR存档 加载文件(通过拖动到窗口或使用浏览按钮),然后点击FLC(文件位置计算器)。在新窗口中,输入地址
1由于分页,这实际上意味着使用PE头中设置的基址。
2计算为内存起始地址+内存长度-1有一个“公式”,但实际上需要查看可执行文件内部(尽管根据某些假设可以简化此公式)
- VA-MODBASE=RVA
- RVA-SECRVA=偏移量
- OFFSET+SECRAWADDR=INSDATAOFFSET(磁盘上文件中的指令或数据的偏移量)
SECRVA=0x1000
SECRAWADDR=0x400
0x1C34B0
处搜索此代码:
CPU Disasm
Address Hex dump Command Comments
001C34B0 /$ E8 B3040000 CALL 001C3968
001C34B5 \.^ E9 2EFEFFFF JMP 001C32E8
请注意,指令操作码(字节)为:0xE8B304000
VA=0x1C34B0
MODBASE=0x1B0000
- VA-MODBASE=RVA<代码>0x1C34B0-0x1B0000=0x134B0<代码>RVA=0x134B0
- 在PE编辑器中打开二进制文件(我使用CFF浏览器):
0x1000+0x23E4C=0x24E4C
)
0x134B0是否在0x1000和0x24E4C之间
->True:因此地址位于.text部分0x1000>=0x134B0<0x24E4C
SECRVA=0x1000
(节虚拟地址)