我尝试了解Michael Sikorski所着的书“实用恶意软件分析”的示例。有一个关于反拆卸技术的例子,我不理解。它说一种常见的技术是创建两条条件指令,即如果跳转到零(JZ)并跳转(如果不是零)(JNZ),它们一起考虑实际上只是一个无条件指令(这对我来说很清楚)。以下是反汇编程序创建的两个可能结果的图形。x86汇编对同一目标的两个跳转指令
下面引用指的是图中1:
在本例中,紧接在两个条件跳转指令的指令似乎是在一个调用指令(调用),从字节0xE8开始。这是不是这样的,但是,因为这两个条件跳转指令实际上指向一个字节超出了0xE8字节
那是什么意思?为什么跳位置loc_4011C4 + 1(其中从自带+1) ?并在图2它是loc_4011C5?有人可以提供更详细的解释吗?
跳转目标在调用指令内部是1个字节。为什么?因为这就是程序员编写它的原因,大概是为了混淆目的。图2显示了将要执行的实际指令。 C4 + 1 = C5 – Jester