萌新只会搞定一些特别简单的花指令,而且还得灵光一闪才搞的定,今天来具体学习一下花指令相关内容
概念
花指令(或者叫脏字节)是企图隐藏掉不想被逆向工程的代码块(或其它功能)的一种方法,在真实代码中插入一些垃圾代码的同时还保证原有程序的正确执行,而程序无法很好地反编译, 难以理解程序内容,达到混淆视听的效果。
原理
用ida举例吧。我们用ida打开一个程序
我们看到,里面有代码,有数据块这些东西
但实际上,这并不是程序本身的样子,我们可以选中一些代码,按快捷键u(Undefined,取消定义)
这些代码会变成一堆十六进制的单字节的数据,这才是程序本身的样子
ida本身并不能区分什么是代码什么是数据,它是通过某种算法来分析出一堆数据组合在一起是什么代码。
让这种分析算法出错的最简单的方法,就是花指令。
例如,下列汇编指令中,0xE8就是一个简单花指令
addr:
push ebp
jz addr2
jnz addr2
db 0xE8
addr3:
sub esp, 0x100
add eax, 0x1
sub ebx, 0xAFBC11
addr2:
mov ebp, esp
jmp addr3