【发布时间】:2012-05-06 11:53:30
【问题描述】:
我一直在想 - 如何反汇编自修改二进制文件?我猜您不能使用 olly 或 IDA,因为它们是静态反汇编程序,对吗?如果你跳到指令的中间,反汇编程序会发生什么?以及如何分析变质引擎?
【问题讨论】:
-
不希望对您的问题进行过于严厉的批评。也许我只是不明白!但是,这可能不是几段就能回答的问题。
标签: ollydbg ida self-modifying disassembly
我一直在想 - 如何反汇编自修改二进制文件?我猜您不能使用 olly 或 IDA,因为它们是静态反汇编程序,对吗?如果你跳到指令的中间,反汇编程序会发生什么?以及如何分析变质引擎?
【问题讨论】:
标签: ollydbg ida self-modifying disassembly
OllyDbg 和 IDA 不仅是静态分析器,它们都可以运行代码。 IDA 还可以远程运行您的代码,据我所知,它甚至可以进行嵌入式调试。当然,如果您在某个时刻“中断”程序执行,并查看反汇编,它将(在两个程序中)反映程序的当前状态,包括它对自身所做的任何修改。
如果你跳到指令的中间,反汇编程序会发生什么?
根据我的经验,上述两种反汇编程序都可以处理这种情况。比如看这里,OllyDbg是怎么管理的,这里是EIP为00892C0E时的截图:
当我使 EIP = 00892C0F 时,它位于指令的中间:
如您所见,它只是重新反汇编指令,使其成为不同(但仍然有效)的操作码。
如何分析变质引擎?
就像任何其他代码一样。您提到的技巧(跳转到指令的中间,修改自身)主要在不久前流行,当时反汇编器和调试器还没有现在那么聪明。
当然,静态分析可能非常困难,但您当然仍然可以完全离线分析二进制文件并破译“变形”(在您的脑海中)以了解代码的作用。但是,当您可以实时使用调试器时,您就可以简单地看到代码在做什么。
当然,所有这些都是编写代码和分析代码的人之间的无休止的竞赛。谁赢取决于谁更早放弃。
【讨论】:
Ollydbg 会处理这种情况。
您正在寻找的功能是“分析”。它将重新反汇编该位置的新指令,并使用更新的代码刷新 CPU 窗口。
假设地址 X 处的指令将进行一些自修改更改。执行该指令后,您可以运行“分析”命令。这是围绕该基本块重新反汇编代码并使用更新的指令刷新 CPU。
要分析,请在 CPU 窗口中的所需位置单击鼠标右键,然后单击 Analysis>Analyze Code。快捷键是 Ctrl-A。
【讨论】: