gpt4 book ai didi

assembly - 给定其在运行进程中的地址,在可执行文件中查找指令?

转载 作者:行者123 更新时间:2023-12-04 08:41:30 26 4
gpt4 key购买 nike

我正在修改一个旧的废弃软件游戏以获得无限的生命。

包含指令dec ecx 的地址与它在调试的.exe 中的位置不一样。

我记得我的一个老 friend 曾经告诉我,有一个公式可以通过.exe 中的指令获取“真实”地址。 Cheat Engine 给了我内存地址。我记得在数学公式中,我需要得到模块,在 OllyDbg 中我得到了它。但是我不记得公式了。有人知道那个数学公式是怎么来的吗?公式非常简单!还有另一种获取文件位置以永久修改.exe的方法吗?

最佳答案

有一个“公式”,但您实际上需要查看可执行文件的内部(尽管可以根据一些假设简化此公式)。

  1. 获取你感兴趣的指令/数据的内存地址(Virtual Address)。[VA]
  2. 获取指令/数据所在模块的基址。 [MODBASE]
  3. 从 VA 中减去 MODBASE,你得到所谓的相对虚拟地址 [RVA]:
    • VA - MODBASE = RVA
  4. 使用 PE 文件解析器/编辑器打开二进制文件(例如 *.exe 或 *.dll)并查看节标题。
  5. 找到您的 RVA 所在的部分。
  6. 找到 RVA 所在的部分后,获取“相对虚拟地址”部分。 [SECRVA].
  7. 从 RVA 中减去 SECRVA,然后得到一个 [OFFSET]。
    • RVA - SECRVA = OFFSET
  8. 获取您在 5 处找到的部分的 RawAddress [SECRAWADDR]。
  9. 在[SECRAWADDR]中加入[OFFSET],结果就是你要查找的指令/数据在二进制文件中的偏移量。
    • OFFSET + SECRAWADDR = INSDATAOFFSET(文件中指令或数据在磁盘上的偏移量)。

假设

通常(我坚持通常,有时情况并非如此),第一部分的 [SECRVA] 将为 0x1000 - 这恰好是代码部分 - 其 [SECRAWADDR] 将为 0x400。

因此,如果您根据指令在内存中的地址搜索指令的偏移量,通常可以假设:

  • SECRVA = 0x1000
  • SECRAWADDR = 0x400

示例

基于 cmd.exe 的示例。

假设我正在 0x1C34B0 搜索此代码当程序加载到内存中时:

CPU Disasm
Address Hex dump Command Comments
001C34B0 /$ E8 B3040000 CALL 001C3968
001C34B5 \.^ E9 2EFEFFFF JMP 001C32E8

注意指令操作码(字节)是:0xE8B3040000

  1. VA = 0x1C34B0
  2. 在内存中搜索模块库(使用调试器或 ProcessExplorer;此处有趣的列在进程浏览器中简称为“Base”。):

CMD Base address

  • MODBASE = 0x1B0000

    1. VA - MODBASE = RVA ; 0x1C34B0 - 0x1B0000 = 0x134B0 ; RVA = 0x134B0

    2. 在 PE 编辑器中打开二进制文件(我使用 CFF 资源管理器):

Section headers

  1. 让我们看看 0x134B0 位于哪个部分:

第一部分是 .text,它的虚拟地址是 0x1000,它的虚拟大小是 0x23E4C(所以该部分的结尾是 0x1000 + 0x23E4C = 0x24E4C)。

0x134B0 是在 0x1000 和 0x24E4C 之间吗?

  • 0x1000 >= 0x134B0 < 0x24E4C -> 是:所以地址位于 .text 部分。

注意:对每个部分重复相同的过程,直到找到正确的部分。

  1. SECRVA = 0x1000 (虚拟地址部分)

  2. RVA - SECRVA = OFFSET ; 0x134B0 - 0x1000 = 0x124B0

  3. SECRAWADDR = 0x400 (原始地址部分)

  4. OFFSET + SECRAWADDR = INSDATAOFFSET ; 0x124B0 + 0x400 = 0x128B0

如果我们看0x128B0在我们的文件中:

Offset in binary file

所以我们在文件 ( 0xE8B3040000 ) 中发现了与内存中完全相同的字节。

关于assembly - 给定其在运行进程中的地址,在可执行文件中查找指令?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34094781/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com