【问题标题】:Can a hex editor be used to edit the instructions in an executable binary?可以使用十六进制编辑器来编辑可执行二进制文件中的指令吗?
【发布时间】:2011-10-28 19:23:19
【问题描述】:

如果我有一个包含已编译 C 代码的二进制可执行文件,我是否可以使用十六进制编辑器来编辑该二进制文件并将特定指令更改为另一条指令,例如 nopjmp?如何知道我要更改的指令的偏移量?


是的,这是为了教育目的。

【问题讨论】:

  • 是的,您可以为此使用十六进制编辑器。要获得偏移量,您需要一个调试器来跟踪程序流程。只要您的编辑不改变整体代码大小并且用另一个字节替换一个字节,这是一个“微不足道”的操作。一旦你开始添加或删除代码块,你就会进入一个痛苦的世界。
  • @MarcB 我能够使用十六进制编辑器和调试器 (gdb) 将 call 指令转换为 nop 指令。

标签: x86 mach-o machine-code hex-editors


【解决方案1】:

更新:抱歉,错过了 Mach-O 标签。此列表实际上是针对标准 x86,而不是专门针对 Mach-O。尽管如此,它仍然是标准 x86 代码的一个很好的列表 :)

当然可以,但您最好使用 OllyDbg、SoftICE 或 Immunity Debugger(Olly 的一种变体,专为逆向工程设计)等工具。学习 x86 asm 实际上并不像大多数人想象的那么难。你可以从http://win32assembly.online.fr/学到很多Win32汇编

如果您真的打算使用十六进制编辑器进行编辑,您可以在http://ref.x86asm.net/ 获取操作码列表。

这类东西的更多好工具:

  • PE Info(免费的 EXE 头文件编辑器)
  • CFF Explorer(免费的 EXE 标头编辑器/重建器。比 PE 信息更多的功能)
  • PE Explorer(商业 EXE 标头和资源编辑器)
  • TrID(文件类型标识符)
  • PEID(可执行文件/打包程序标识符)
  • IDA Pro(静态可执行分析)
  • procmon(活动分析)
  • procexp(类似于 taskmgr,但更好更深入)
  • ildasm(CIL 反汇编程序)
  • ilasm(CIL 汇编器)
  • RedGate Reflector(.NET 逆向工程工具)
  • .NET Reflector(.NET 逆向工程工具)
  • XVI32(十六进制编辑器)
  • Hex Workshop(十六进制编辑器/结构编辑器)

【讨论】:

  • 您指定的许多工具都无法解释 MachO 二进制格式。您列出的只有 IDA Pro。
  • 抱歉,我错过了 MachO 标签。我看到的都是 x86。
【解决方案2】:

执行此操作和所有其他形式的二进制操作的事实上的工具是 Interactive Disassembler(更好地称为 IDA,带有一个很酷的免费试用版!)记住你必须重新设置其余部分如果您更改指令 + 操作数的大小(即,将 x86 nop 指令更改为带有 Mach-O 中的操作数的 jmp 指令,则很可能会导致二进制文件无法运行,除非您重新设置基址,即 IDA当然有一个惊人的效用)。

十六进制编辑器无法做到这一点(至少很容易)。

【讨论】:

    猜你喜欢
    • 2010-12-16
    • 2012-08-15
    • 2011-03-14
    • 2015-04-13
    • 2012-07-20
    • 2015-10-26
    • 1970-01-01
    • 2017-02-01
    • 2011-06-10
    相关资源
    最近更新 更多