反汇编自修改代码

时间:2012-04-25 18:35:15

标签: ollydbg ida self-modifying disassembly

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

2 个答案:

答案 0 :(得分:10)

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

  

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

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

OllyDbg before

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

OllyDbg after

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

  

如何分析变质引擎?

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

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

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

答案 1 :(得分:1)

Ollydbg将处理此类情况。

您正在寻找的功能是“分析”。它将重新分解该位置的新指令,并使用更新的代码刷新CPU窗口。

假设地址X处的指令将进行一些自我修改。执行该指令后,可以运行“Analyze”命令。这是围绕该基本块的重新反汇编代码,并使用更新的指令刷新CPU。

要分析,右键单击CPU窗口中的所需位置,然后单击分析>分析代码。快捷方式是 Ctrl-A