【发布时间】:2018-01-28 06:41:06
【问题描述】:
我尝试从 Michael Sikorski 的“实用恶意软件分析”一书中理解一个示例。有一个我不理解的反反汇编技术的例子。它说一种常见的技术是创建两个条件指令,即如果为零则跳转(JZ)和如果不是零则跳转(JNZ),它们一起考虑实际上只是一个无条件指令(这对我来说很清楚)。以下是反汇编程序创建的两种可能结果的图形。
以下引用参考图1:
在本例中,紧跟在两个条件跳转指令之后的指令似乎是在 (call) 处的调用指令,从字节 0xE8 开始。然而,情况并非如此,因为两个条件跳转指令实际上都指向 0xE8 字节之外的 1 个字节
这应该是什么意思,为什么跳转位置是 loc_4011C4+1(+1 来自哪里)?在图2 中是 loc_4011C5?谁能提供更详细的解释?
【问题讨论】:
-
跳转目标是调用指令内的1个字节。为什么?因为这就是程序员编写它的方式,大概是出于混淆目的。图 2 显示了将要执行的实际指令。 C4+1=C5