【问题标题】:Is there a disassembler with modification and reassembly capabilities for a 32-bit executable? [closed]是否有具有 32 位可执行文件的修改和重组功能的反汇编程序? [关闭]
【发布时间】:2016-07-19 10:33:06
【问题描述】:

我有一个类项目,我们需要获取一个用 C++ 编写的 32 位可执行文件并将其反汇编并修改汇编代码,然后重新组装它。我们应该在游戏中进行硬编码作弊之类的操作。

我已经搜索了几个小时,但找不到任何可以执行此操作的软件。我查看了 Ollydbg 并花了大约两个小时使用它,但无法真正弄清楚如何让它工作。我使用了作弊引擎,这实际上对我来说效果很好——我能够隔离修改我关心的地址的代码并将其替换为对游戏产生有利影响的代码,但据我所知作弊引擎无法重新编译修改后的代码。

这是一门相当低水平的计算机科学课程,因此在提出建议时请考虑我的能力水平,但如果有任何软件或替代方法可以让我这样做,我将不胜感激。谢谢!

【问题讨论】:

  • 关于软件的问题不在 SO 上,但你的问题似乎很有趣,我以前从未见过这样的问题。
  • 看看来自 Hexrays 的 IDA Pro 免费版。
  • Agner Fog's objconv disassembler 输出 NASM、MASM 或 GNU 程序集,由您选择。但是,它不会重新组装成逐字节相同的代码。例如带有imm32 的指令本来可以使用imm8,最终会得到imm8。 NASM / YASM 语法确实支持 add eax, dword 1 之类的东西来发出 add eax, imm32,但 objconv 不这样做。没有语法可以在 add r/m32, imm32 编码或 add-imm32-to-eax 的特殊操作码之间进行选择(这使得 5 字节的 insn 包括立即数,如 mov-immediate)。

标签: c++ assembly executable decompiler disassembly


【解决方案1】:

既然你提到了 OllyDBG 和 Cheat Engine,我假设你使用的是 Windows。

首先,您可以使用 OllyDBG 保存文件,但由于某种原因,我在 OllyDBG 2 中找不到此选项,仅在旧版本(如 1.10)中。可以在代码窗口右击copy to executable > all modifications,会打开一个新窗口,在新窗口上右击选择save file

我真正喜欢的另一种选择是x64dbg。它是一个开源调试器/反汇编器,并且可以选择通过“补丁”保存更改。

另一个选项是通过十六进制编辑器应用更改,它允许您以二进制格式修改任何文件(包括可执行文件)。当然,这有点困难,因为您需要手动将更改转换为操作码,但如果您的更改不是太大或仅包含修改一些常量,它可能是一个更快更容易的解决方案。有很多十六进制编辑器,但我最喜欢的是XVI32

我个人喜欢做的是使用 Windows API 的 WriteProcessMemoryReadProcessMemory 通过代码修改内存,因为它允许您动态地执行此操作。

【讨论】:

  • 我可以使用作弊引擎即时修改代码,看看我对汇编代码的修改做了什么,然后它会根据我编写的代码自动为我生成操作码。然后我可以用编辑器找到相应的原始十六进制并更改它!感谢您的帮助!
  • @Koronakesh 很高兴为您提供帮助 :) 您最终使用了什么十六进制编辑器?
  • HxD 是我找到的。
猜你喜欢
  • 2018-05-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-09
  • 2021-10-12
  • 2011-09-08
相关资源
最近更新 更多