概念
花指令:目的是干扰IDA和OD等软件对程序的静态分析。使这些软件无法正常反汇编出原始代码
常用的两类反汇编算法:
1.线性扫描算法:逐行反汇编(无法将数据和内容进行区分)(例如OD)
2.递归行进算法:按照代码可能的执行顺序进行反汇编程序(例如IDA)
可执行花指令
这部分花指令代码在程序的正常执行过程中会被执行,但执行这些代码没有任何意义,执行前后不改变任何寄存器的值(eip除外),同时这部分代码也会被反汇编器正常识别
这种花指令的首要目的依然是加大静态分析的难度,让你难以识别代码的真正意图,并且可以破坏反编译的分析,使得栈指针在反编译引擎中出现异常
不可执行花指令
虽然被插入到了正常代码的中间,但是并不意味着它一定会得到执行,这类花指令通常形式为在代码中出现了类似数据的代码,或者IDA反汇编后为jmupout(xxxxx)
这类花指令一般不属于CPU可以识别的操作码,那么就需要在上面用跳转跳过这些花指令才能保证程序的正常运行
实现(重点掌握)
简单花指令
0xe8是跳转指令,两个跳转一个指向无效数据,一个指向正常数据来干扰递归扫描算法
简单jump
干扰线性扫描算法
永真条件跳转
通过设置永真或者永假使得程序一定会执行
清除
右键Patching--change byte,修改E8(有时候是E9)为90(nop)
右键nop整行伪代码范围
Create function重构函数,F5查看伪代码
例题: NewStarCTF 2023 Petals