【问题标题】:Disassembling self-modifying code反汇编自修改代码
【发布时间】:2012-05-06 11:53:30
【问题描述】:

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

【问题讨论】:

  • 不希望对您的问题进行过于严厉的批评。也许我只是不明白!但是,这可能不是几段就能回答的问题。

标签: ollydbg ida self-modifying disassembly


【解决方案1】:

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

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

根据我的经验,上述两种反汇编程序都可以处理这种情况。比如看这里,OllyDbg是怎么管理的,这里是EIP为00892C0E时的截图:

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

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

如何分析变质引擎?

就像任何其他代码一样。您提到的技巧(跳转到指令的中间,修改自身)主要在不久前流行,当时反汇编器和调试器还没有现在那么聪明。

当然,静态分析可能非常困难,但您当然仍然可以完全离线分析二进制文件并破译“变形”(在您的脑海中)以了解代码的作用。但是,当您可以实时使用调试器时,您就可以简单地看到代码在做什么。

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

【讨论】:

  • 只是想引用这个,因为这是真的:) “当然,所有这一切都是编写代码的人和分析代码的人之间的无休止的竞赛。谁赢取决于谁更早放弃。”
【解决方案2】:

Ollydbg 会处理这种情况。

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

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

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

【讨论】:

    猜你喜欢
    • 2011-06-16
    • 1970-01-01
    • 1970-01-01
    • 2013-07-21
    • 2015-12-21
    • 2012-06-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-21
    相关资源
    最近更新 更多