2012-04-25 118 views
9

我一直在想 - 如何反汇编自修改二进制文件?我想你不能使用olly或IDA,因为它们是静态的反汇编,对吗?如果跳到教学中间,反汇编器会发生什么?那么如何分析变质引擎?反汇编自修改代码

+0

人们不希望太苛刻地批评你的问题。也许我只是不明白!但是,这可能不是几个段落中可以回答的问题。 – thb 2012-04-25 18:44:44

回答

10

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

如果跳到指令中间,反汇编器会发生什么?

根据我的经验,这两个提到的反汇编程序可以处理这种情况。例如,看到这里,OllyDbg中如何管理它,这里是截图时EIP是00892C0E:

OllyDbg before

当我做EIP = 00892C0F,这是一条指令的中间:

OllyDbg after

如您所见,它只是简单地重新组装指令,使其成为一个不同的(但仍然有效的)操作码。

如何分析变质引擎?

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

当然,静态分析可能非常困难,但是您当然仍然可以完全脱机地分析二进制文件,并解读“变形”(在您的头脑中)以了解代码的功能。但是,如果您现场可以使用调试器,那么您只需查看代码即可。

当然,所有这些都是编写代码的人和分析代码的人之间的无休止的竞赛。谁赢谁取决于谁早早放弃。

+1

只是想引用这个,因为这是真的:) “当然,所有这些都是编写代码的人和分析它的人之间的无尽的竞赛。谁赢谁取决于谁早点放弃。” – 2012-06-06 19:47:29

1

Ollydbg将处理这种情况。

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

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

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