花指令

了解花指令的作用、使用方法及如何去除

##花指令的作用

花指令是对抗反汇编的有效手段之一,正常代码添加了花指令之后,可以破坏静态反汇编的过程,使反汇编的结果出现错误,使ida和ollydbg等搜索不到字符串。错误的反汇编结果会造成破解者的分析工作大量增加,进而使之不能理解程序的结构和算法,也就很难破解程序,从而达到病毒或软件保护的目的。
缺点:不能防止动态调试

以以下代码为例:

#include <iostream>
int main()
{
    _asm 
    {
        xor eax,eax
        test eax,eax
        je Label1
        _emit 0e8h
        Label1:
    }

    std::cout << "Test Junk Code" << std::endl;
    system("pause");
}

##原理

通过加入汇编代码构成恒成立跳转,在ollydbg中

alt

在ida中

alt

如何去除花指令进行反编译?

找到花指令的地方,并将这个E8改为90(即nop)

alt

改完后的效果,返现字符串已经吐出来了

alt

可以看到在ida中就可以反汇编了

alt

alt