小结
常见的花指令构造方法主要有:
- 0x1 垃圾指令:这些垃圾指令并不影响程序的执行结果和过程,对寄存器也没有影响,但是大量重复的辣鸡指令可以有效阻碍逆向过程
- 0x2 指令膨胀(等价替换):通过使用多条指令替换一条执行,或者起到同样的效果的方法来阻碍逆向分析
- 0x3 绝对执行分支:反汇编器优先反汇编错误分支,使用绝对执行分支插入花指令可以干扰反汇编器反汇编。
- 0x4 打乱执行流:通过打乱执行流,再向中间插入辣鸡指令干扰分析
绝对分支执行
所谓绝对分支执行:就是虽然是一条条件跳转,但是其结果是已知确定的。是一个必然发生或者必然不发生的事情。常见的构造方法就是JZ-JNZ
|
|
打乱执行流
跳来跳去,你说晕不晕
进阶花指令
利用条件跳转是很容易被分析察觉出来的。执行流的更改除了使用跳转以外还是可以使用调用函数的。由于函数调用比跳转来的复杂所以增加了反汇编器识别的难度。
目的,隐藏那些字符串。我们首先思考一件事:花指令是不被执行的,如何在函数调用后返回的时候准确的落到花指令的后面也就是程序执行的地方。
方案:结合Hook技术中跳转Detour的方法,代码执行处F-减去函数地址$-代码大小。其实跳跃的就是那些花指令的地方,但是这些地方不能直接计算。用函数调用处(也就是函数返回地址)作为参照。加上之间的距离就是代码执行处F。
适配一下VS就是下面这样