ollydbg - 反汇编 self 修改代码

标签 ollydbg ida self-modifying disassembly

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

最佳答案

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

What happens with disassembler if you jump into middle of an instruction?



根据我的经验,上述两种反汇编程序都可以处理这种情况。例如,请参见此处,OllyDbg的管理方式,这是EIP为00892C0E时的屏幕截图:

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

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

And how does one analyze metamorphic engines?



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

当然,静态分析可能非常困难,但是您仍然可以完全离线地分析二进制文件,并(在您的脑海中)破译“变形”,以了解代码将执行的操作。但是,当您可以实时使用调试器时,您只需查看代码的功能即可。

当然,所有这一切都是编写代码的人与分析代码的人之间的无尽竞赛。谁获胜取决于谁放弃更快。

关于ollydbg - 反汇编 self 修改代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10321726/

相关文章:

assemblies - 是否可以编写一个动态生成新类并用新类修补自身的程序集?

javascript - 以编程方式决定在 javascript 中修改哪个样式属性

assembly - JNZ 和 CMP 组装说明

c++ - 防止 Visual C++ 内联函数

assembly - IDA 专业版 : How to modify a function to always return true?

reflection - 自修改代码和反射有什么区别?

运行代码时 Python 在极少数情况下会崩溃 - 如何调试?

c++ - 将 unicode 字符串复制到剪贴板不起作用

assembly - 什么是大双字?