静态分析混淆代码

逆向工程 拆卸 部件 混淆 去混淆
2021-07-04 23:16:08

我正在反转一个被严重混淆的代码。它使用不透明的谓词、调用堆栈篡改、垃圾代码和控制流奉承。调用堆栈篡改使用在运行时通过复杂操作计算的间接分支(推送寄存器/retn)。逆向工程似乎几乎不可能。处理使用许多混淆技术的代码的正确方法是什么?我知道有些人使用动态符号执行,但我想知道是否有其他方法来处理这个问题。这是一个混淆函数十六进制射线输出的示例:

2个回答

通常,我会尝试检测使用了哪个混淆器。了解你的敌人是走向胜利的第一步。如果你能检测到混淆器,你可能很幸运,找到了相应的“反混淆器”。您将没有原始来源,但会显着降低熵和噪声。

一个好的起点是查看字符串的处理方式。每个混淆器都有自己的方法来做到这一点,这可能是一个明确的指标。

我通常寻找的另一个地方是二进制初始化:每个混淆器以不同的方式引导它自己的辅助函数。

当我不走运时,我倾向于依靠符号执行结合通过 ollydbg 和radare2 进行的动态分析。

再加上叶妮芙精彩而可敬的回答:

通过内存段肯定会有所帮助,很多时候混淆器会篡改这些。提供有关混淆器是什么的可能线索。

也看看导入的函数,那些看起来怎么样?一些混淆器会混淆IAT,并且IAT内部的一些函数可以被篡改,但是可以找到来自这些函数的“签名”代码,这可能会导致混淆器是什么。

有时,网络上甚至有预建的程序可以自动为您对程序进行反混淆处理。

祝你好运!:-)