程序免杀技术之——花指令

来源:互联网 发布:c语言char函数意思 编辑:程序博客网 时间:2024/04/27 22:58

花指令(junk code) 意思是程序中有一些指令,由设计者特别构思,希望使反汇编的时候出错,让破解者无法清楚正确地反汇编程序的内容,迷失方向。经典的是一些跳转指令,目标位置是另一条指令的中间,这样在反汇编的时候便会出现混乱。花指令有可能利用各种 jmp, call, ret, 一些堆栈技巧,位置运算,等等 。

当然,花指令也广泛运用到免杀技术中,不过随着杀毒技术以及虚拟机技术的不断升级,单一的加花已经不能避免杀软的识别,不过花指令和其他免杀手段配合起来效果却也是很好的。杀毒软件还原病毒代码后,除了特征码以外,会根据头文件的60位以内的文件头代码来判断病毒。因此花指令不仅可以混淆,还可以进行文件头免杀。本文的目的仅仅是让大家掌握利用反汇编手段加花的方法,没有兴趣的同学可以直接用工具加花,不过我一直坚信手工才是王道~~o(∩_∩)o 哈哈


接下来我们配置一个Bankdook的服务端,放入PEID里扫一下。因为Bandoor是Delphi与VC的混合产物,所以扫不出来类型,因为也没有加壳,所以这里显示是Nothing found。我们需要的是这里的入口点和文件偏移信息。在这里我们看到入口点和文件偏移地址相同,都是000121B1。
程序免杀技术之鈥斺敾ㄖ噶

这里要注意区分,文件地址和内存地址的概念。我们在PEID等工具中看到的地址是文件地址,也就是加载在文件当中的代码地址。而我们打开OD进行反汇编时,会变代码的地址是内存地址,即程序运行时分配到内存中的地址。这两者要区分好,因为后面的修改我们要用到。接下来用OD将服务端加载进去。OD的第一行代码便是头代码,对应的地址便是入口地址的内存地址,即131521B1。

程序免杀技术之鈥斺敾ㄖ噶


接下来我们向下拉,来到全是nop的尾部,这里是空白地带,我们在这里写如花指令。当然,如果存在附加数据的话需要把附加数据进行备份,反汇编后在用C32Asm复制回去。我们选择13152F84这个地址,右键汇编。这里我将把下列代码写入:

PUSH -1
PUSH 0
PUSH 0
MOV EAX,DWORD PTR FS:[0]
PUSH EAX
MOV DWORD PTR FS:[0],ESP
SUB ESP,1
PUSH EBX
PUSH ESI
PUSH EDI
POP EAX
POP EAX
nop
POP EAX
nop
ADD ESP,1
POP EAX
MOV DWORD PTR FS:[0],EAX
POP EAX
POP EAX
nop
POP EAX
nop
POP EAX
MOV EBP,EAX
JMP 原入口地址

程序免杀技术之鈥斺敾ㄖ噶

如果大家需要其他花指令也可以去找一下,或者自己写一些,总之越是生僻的越有效http://hi.baidu.com/xiaochudianx ... 7d033a8644f960.html

  全写完后,我们需要将花指令的尾部用JMP跳回文件头,因为花指令的作用就是混淆伪装。我们记录的文件头地址是131521B1,可以在刚刚进入OD是记录,也可以用OC偏移量转换器入口点的文件地址转换为内存地址。就是我们用PEID记录下的文件地址。

程序免杀技术之鈥斺敾ㄖ噶

程序免杀技术之鈥斺敾ㄖ噶

接下来我们右键点击空白处,选择复制到可执行文件→所有修改,在弹出的框中右键选择保存,就将文件另存为了PE可执行文件。之后我们需要将花指令所在地修改为文件的入口点,我们先将花指令头的内存地址13152F84转为文件地址,即00012F84。
程序免杀技术之鈥斺敾ㄖ噶 

接下来我们用PEditor载入文件,将入口点地址修改为即00012F84,点击应用更改即可。


程序免杀技术之鈥斺敾ㄖ噶 


这只是花指令的普通应用方法,还有中转跳转法等方法。有的PE文件修改后会出现无效文件的情况,大家可以试试区段加花的方法。虽然加花指令的方法有局限性,但与修改特征码,修改头文件,壳中加籽,混合加壳,输入表输出表免杀等方法混合使用,其效果也是很可观的。



http://blog.sina.com.cn/s/blog_5d6916a40100viz1.html

原创粉丝点击