反汇编自修改代码

Sam*_*uel 9 ida disassembly self-modifying ollydbg

我一直想知道 - 如何拆解自修改二进制文件?我猜你不能使用olly或IDA,因为它们是静态反汇编程序,对吗?如果你跳到指令的中间,反汇编程序会发生什么?如何分析变质引擎?

kub*_*uba 10

OllyDbg和IDA不仅是静态分析器,它们都可以运行代码.IDA也可以远程运行你的代码,据我所知,它甚至可以进行嵌入式调试.当然,如果你在某个时候"破坏"程序执行,并查看反汇编,它将(在两个程序中)反映程序的当前状态,包括它对自身所做的任何修改.

如果你跳到指令的中间,反汇编程序会发生什么?

根据我的经验,所提到的反汇编程序都可以处理这种情况.例如,请参阅此处,OllyDbg如何管理它,这是EIP为00892C0E时的屏幕截图:

OllyDbg之前

当我使EIP = 00892C0F时,它位于指令的中间:

OllyDbg之后

如你所见,它只是重新拆解指令,使其成为一个不同(但仍然有效)的操作码.

如何分析变质引擎?

就像任何其他代码一样.你提到的技巧(跳到指令的中间,修改自己)很久以前很流行,当时反汇编程序和调试程序不像现在那样聪明.

当然,静态分析可能非常困难,但您当然可以完全离线分析二进制文件并破译"变形"(在您的脑海中)以了解代码将执行的操作.但是当您可以使用调试器时,您只需看看代码是什么.

当然,所有这些都是人们编写代码和分析代码的人之间的无休止的竞争.谁获胜取决于谁更快放弃.