24kcsplus
文章15
标签21
分类0
花指令笔记

花指令笔记

花指令是什么

简单来说就是用来干扰反编译器进行分析的一些代码小技巧

要说专业一点的话就是:

花指令是企图隐藏掉不想被逆向工程的代码块(或其它功能)的一种方法, 在真实代码中插入一些垃圾代码的同时还保证原有程序的正确执行, 而程序无法很好地反编译, 难以理解程序内容, 达到混淆视听的效果。

花指令通常用于加大静态分析的难度。 [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 ,这个可以去除一些基本的花指令


  1. 如想更详细的了解请阅读这篇文章:https://bbs.kanxue.com/thread-279604.htm ↩︎

本文作者:24kcsplus
本文链接:https://24kblog.top/posts/1856646162/
版权声明:除非特别声明,否则本文采用 CC BY-NC-SA 3.0 CN 协议进行许可
×