分解自修改代码

9

我一直在思考 - 如何反汇编自修改的二进制代码? 我猜你不能使用olly或IDA,因为它们是静态反汇编器,对吗?如果你跳到一个指令的中间,反汇编器会发生什么?那么如何分析变形引擎呢?


不想过于苛刻地批评你的问题。也许我只是不太理解!然而,这可能不是那种可以在几段话中回答的问题。 - thb
2个回答

10

OllyDbg和IDA不仅是静态分析工具,它们都可以运行代码。IDA还可以远程运行您的代码,并且据我所知,甚至可以进行嵌入式调试。当然,如果您在某一点上"中断"程序执行,并查看反汇编,那么(在两个程序中)它将反映程序的当前状态,包括任何对自身所做的修改。

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

根据我的经验,这两个反汇编器都可以处理这种情况。例如,请参见此处,了解OllyDbg如何处理。这是EIP为00892C0E时的屏幕截图:

OllyDbg before

当我使EIP = 00892C0F时,即在指令的中间位置:

OllyDbg after

正如您所看到的,它只是重新反汇编了该指令,使其成为一个不同但仍然有效的操作码。

如何分析变形引擎?

与任何其他代码一样。您提到的技巧(跳转到指令的中间,自我修改)主要在一段时间以前很受欢迎,当时反汇编器和调试器还没有现在聪明。

当然,静态分析可能会非常困难,但您当然仍然可以完全脱机地分析二进制文件并解密"变形"(在您的脑海中),以了解代码的作用。但是当您可以使用实时调试器时,您只需看到代码正在做什么。

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


1
只是想引用这句话,因为它非常正确 :) “当然,所有这些都是编写代码和分析代码之间的无休止的竞赛。谁获胜取决于谁先放弃。” - Dominik Antal

2

Ollydbg可以处理这样的情况。

您要寻找的功能是“分析”。它将重新反汇编位置处的新指令,并使用更新的代码刷新CPU窗口。

假设位于地址X的指令将进行一些自修改更改。在执行该指令后,您可以运行“分析”命令。这会重新反汇编该基本块周围的代码,并使用更新的指令刷新CPU。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接