可以使用十六进制编辑器编辑可执行二进制文件中的指令吗?

时间:2011-10-28 19:23:19

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

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


是的,这是出于教育目的。

2 个答案:

答案 0 :(得分:4)

更新:抱歉,错过了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(十六进制编辑器/结构编辑器)

答案 1 :(得分:3)

执行此操作和所有其他形式的二进制操作的事实上的工具是交互式反汇编程序(更好地称为IDA,附带一个很酷的免费试用!)记住你将不得不重新设计其余的如果你改变指令+操作数的大小(IE将x86 nop指令更改为jmp指令,而不是Mach-O中的操作数,那么,很可能会导致二进制文件无法运行,除非你重新调整,哪个IDA当然有一个惊人的实用程序)。

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