代码混淆 - 花指令分析

萌新只会搞定一些特别简单的花指令,而且还得灵光一闪才搞的定,今天来具体学习一下花指令相关内容

概念

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

原理

用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 
上一篇:2018年,Java程序员转型大数据开发,是不是一个好选择?


下一篇:最长公共子序列问题 C++ (超详细)