我一直在思考 - 如何反汇编自修改的二进制代码? 我猜你不能使用olly或IDA,因为它们是静态反汇编器,对吗?如果你跳到一个指令的中间,反汇编器会发生什么?那么如何分析变形引擎呢?
我一直在思考 - 如何反汇编自修改的二进制代码? 我猜你不能使用olly或IDA,因为它们是静态反汇编器,对吗?如果你跳到一个指令的中间,反汇编器会发生什么?那么如何分析变形引擎呢?
OllyDbg和IDA不仅是静态分析工具,它们都可以运行代码。IDA还可以远程运行您的代码,并且据我所知,甚至可以进行嵌入式调试。当然,如果您在某一点上"中断"程序执行,并查看反汇编,那么(在两个程序中)它将反映程序的当前状态,包括任何对自身所做的修改。
如果您跳到指令的中间,反汇编器会发生什么情况?
根据我的经验,这两个反汇编器都可以处理这种情况。例如,请参见此处,了解OllyDbg如何处理。这是EIP为00892C0E时的屏幕截图:
当我使EIP = 00892C0F时,即在指令的中间位置:
正如您所看到的,它只是重新反汇编了该指令,使其成为一个不同但仍然有效的操作码。
如何分析变形引擎?
与任何其他代码一样。您提到的技巧(跳转到指令的中间,自我修改)主要在一段时间以前很受欢迎,当时反汇编器和调试器还没有现在聪明。
当然,静态分析可能会非常困难,但您当然仍然可以完全脱机地分析二进制文件并解密"变形"(在您的脑海中),以了解代码的作用。但是当您可以使用实时调试器时,您只需看到代码正在做什么。
当然,所有这些都是编写代码和分析代码之间的无休止的竞赛。谁胜利取决于谁更快放弃。
Ollydbg可以处理这样的情况。
您要寻找的功能是“分析”。它将重新反汇编位置处的新指令,并使用更新的代码刷新CPU窗口。
假设位于地址X的指令将进行一些自修改更改。在执行该指令后,您可以运行“分析”命令。这会重新反汇编该基本块周围的代码,并使用更新的指令刷新CPU。
要进行分析,请在CPU窗口中右键单击所需位置,然后单击分析>分析代码。快捷键是Ctrl-A。