
花指令笔记
花指令是什么
简单来说就是用来干扰反编译器进行分析的一些代码小技巧
要说专业一点的话就是:
花指令是企图隐藏掉不想被逆向工程的代码块(或其它功能)的一种方法, 在真实代码中插入一些垃圾代码的同时还保证原有程序的正确执行, 而程序无法很好地反编译, 难以理解程序内容, 达到混淆视听的效果。
花指令通常用于加大静态分析的难度。 [1]
常见花指令类别
抵消型花指令
这类花指令一般不会影响分析,但是可能会影响栈平衡
这类花指令通常要注意两个方面,逆运算与栈平衡
常见的逆运算:
push-pop(压栈-出栈)
add-sub adc-sbb (加法-减法 进位加法-借位减法)
mul-div imul-idiv (乘法-除法 整数乘法-整数除法)
inc-dec (加1-减1)
shl-shr (左移-右移)
xor-xor (异或)
not-not (取反)
jmp db型花指令
这类花指令可能不太会影响到 IDA 的分析,但有可能会影响到其它逆向分析软件,尤其是使用线性扫描算法的软件
这类花指令分为无条件跳转、条件跳转和干扰分析型
比较需要注意的是干扰分析型
一个栗子:
start:
xor eax,eax;
test eax,eax;
jz label0;
jnz label1;
label 0:
db 0E8h
label 1:
xor eax,3;
add eax,3;
...........
花指令去除步骤
手动去除
找到花指令 nop 掉,然后选择先前为分析成功的部分,先按 P
转换为函数,再尝试将重新分析后的程序转换为伪代码
具体可参考这篇文章
脚本去除
有时候遇到工作量比较大时可以使用脚本去除,如果是比较简单的花指令使用脚本也可以提高效率
要使用脚本需要先将对应的脚本拷到 IDA 对应的文件夹里
然后在 Edit -> Plugins -> 插件名
使用
我使用了 NoMoreFlower ,这个可以去除一些基本的花指令
如想更详细的了解请阅读这篇文章:https://bbs.kanxue.com/thread-279604.htm ↩︎