Submitted by 李马 on 2007, February 21, 12:00 PM. 技术的角落
您可以任意转载这篇文章,但请在转载时注明原始链接和作者,谢谢。
今天用OllyDbg为某个软件脱壳的时候,发现了一小段令人费解的机器码。这段机器码经IDA解释后如下:
pusha ; 60 |
是的,这就是传说中的花指令了。我于是将其重新排列并解析,如下:
pushad ; 60 |
这段代码的第二行进行了一个近调用至proc1,proc1中的三行代码则将堆栈的栈顶(亦即ESP指向的位置)值加1,于是之后ret的返回地址便越过了e9的这一个字节并执行后面的近跳转,这个近跳转则会越过proc1的四个字节,最后执行line2处的真正代码。相比之下,静态分析的IDA却不会智能跳过这个字节,于是这个字节便被解释成为了跳转指令jmp。这样一来后面代码的解析也就被打乱了,加密者的目的也就达到了。