完全花指令免杀学习 花指令,简称“花”,意思是像花儿一样的指令。花儿是干什么的呢?当然是吸引你去观赏的,就是让你(也包括杀软)只顾去观赏美丽“花朵”,而忘记或者忽略了“花朵”后面的“果实”。简单说来,花指令就是一些看似杂乱实则另有目的的汇编指令,能够让汇编语句进行一些跳转,使得杀毒软件不能正常的判断病毒文件的构造。说的更俗就是一段垃圾代码,和一些乱跳转。但是这并不影响程序的运行,却会使一些杀毒软件无法正确识别***程序,从而达到免杀的效果。

花指令在免杀领域里是一种十分有潜力的免杀方法,其涉及面很广,我们如果能够熟练运用花指令免杀的话,能够开拓我们的思维,并由此衍生出许多创造性的思路方法。

先说一下花指令免杀的注意事项:(据说在文章前面部分容易引起注意) 
1、配置一个不加壳的***。如果***被加壳,我们应该先脱壳。这点很重要,加壳的***会直接导致免杀失败。 
2、整个过程需要记住两个地址:程序的入口点地址和添加花指令的起始地址。大家可以随手用文本文档记录下。 
3、写花之前需要判断所选区域能否写花,方法下文给出,只是这点大家需要牢记。 
4、在花指令的末尾需要用到跳转指令,跳回程序的入口点地址。 
5、最后需要修改加好花的***的入口地址,将其改为添加花指令的起始地址。 
6、公布出来的花指令会很快被杀软辨认出而惨遭查杀,所以,大家要多搜集一些不常见的花,自己平时也多写写属于自己 
的个性花,这样能够对你的免杀很有帮助。 
7、以上几点我觉得是比较重要的,希望大家记住,呵呵。

评评花指令免杀法: 
1、优点:通用性不错,一般一个***程序加入比较好的花指令后,可以躲较大一部分的杀毒软件,特别是对卡巴有很强大的生命力。不像改特征码,只能针对某一种杀毒软件的免杀。 
2、缺点:这种方法不能过具有内存查杀的杀毒软件,比如瑞星的内存查杀等。 
3、发展方向:与改入口点,加壳,改特征码等方法联合起来使用,免杀效果将会很好。这种混合式的免杀方法也是今后免杀的发展方向。

好了,说了那么多,现在开始正式学习了^-^

花指令始于汇编,我们学花先得懂得一些基本的汇编知识。对汇编了解的越多,写起花指令来就更加得心应手、随心所欲,也更能够富于创造性,效果也会更好。推荐一本书,经典的汇编大作啊,《汇编语言》,清华大学王爽教授主编,我就是看这本书过来的,呵呵。

我们免杀用到的汇编知识有限,我为大家介绍一些常用的指令作为参考,说常用只是针对免杀来说的。来源于网上,我尽量整理的可供查阅一些:

1.传送指令mov:传送指令的格式为: 
Mov ebp,esp;将esp传送至ebp

2.进栈指令push:进栈指令的格式为: 
Push ebp;将基址指针寄存器(ebp)压入堆栈

3.出栈指令pop:出栈指令的格式为: 
Pop ebp;将基址指针寄存器(ebp)弹出堆栈

4.加法指令add:加法指令的格式为: 
Add esp,1;将指针寄存器(esp)加1

5.减法指令sub:减法指令的格式为: 
Sub esp,1;将指针寄存器(esp)加1

6.增量指令inc:增量指令的格式为: 
Inc ecx;计数器(ecx)加1

7.减量指令dec:减量指令的格式为: 
Dec ecx;计数器(ecx)减1

8.无条件转移指令jmp:无条件转移指令的格式为: 
Jmp 00000001;跳转到00000001

9.子程序调用指令call:子程序调用指令的格式为: 
Call XX.00001234;调用位于00001234处的子程序

刚接触的朋友是不有点头晕迷糊,关于什么寄存器啊,栈啊什么的,新手可以不必理会,只需用知道这些语句大概是什么意思,记住怎么写就行了。

下面再总结一些常用的花指令组合,记住后新手朋友们写花就更简单了。

1、nop 空指令,无作用,用来干扰杀软

2、push 0 将0压入堆栈 
  pop 0 将0弹出堆栈

3、push ebp 将基址指针寄存器压入堆栈 
  pop ebp 将基址指针寄存器弹出堆栈 
  
4、jmp+地址 无条件跳转 
   
5、add esp,1 将指针寄存器加1(数字可以改变) 
  sub esp,1 将指针寄存器减1 
加1减1等于0吧,是废话,呵呵

6、add esp,1 将指针寄存器加1 
  add esp,-1 将指针寄存器加-1 
又是废话……

7、sub esp,1 将指针寄存器减1 
  sub esp,-1 将指针寄存器减-1 
减1再减-1,废话啊……

8、push esi 将源变址寄存器压入堆栈 
  push edi 将目的变址寄存器压入堆栈 
   
9、inc ecx 计数器加1 
  dec ecx 计数器减1

10、sub eax,-2 将数据寄存器减去-2,就是加上2呗 
  dec eax 将数据寄存器的计数器减1 
  dec eax 将数据寄存器的计数器减1 
写来写去就是写废话呗……

11、push ******** 将入口地址压入栈 
retn 返回到此地址 
去了又回,也是废……

12、mov eax,******** 将入口地址传送到数据寄存器中 
jmp eax 跳到程序入口点地址

看到这里,我觉得朋友们至少有两点发现:一是以上指令均是废话,全都是让计算机白忙活的,当然,杀软也是,这就有可能迷惑杀软,呵呵,“美花计”。二是这些指令都是一组一组的,应该作为一个组合出现才能够保证这是废话。所以,大家在写花的时候基本就是这些类型的指令的排列组合了。这样看来,花真是太多了,杀软要想完全弄清楚那是不可能的啦,所以一定会有能够免杀的花的!还有一些比较经典的花,(当然如今可能已经被杀软识别了),我们可以多学习,自己对其进行个性化的修改,这有助于我们学习花指令。当然,若是发现你加了自己的花指令还是会被杀,原因可能是你的花指令比较常用,早已被杀软盯上,你写的花里面本身就含有特征码,这样反而还会增大被杀软查杀的几率。所以写花需要自己多尝试,只要你肯写,就一定会成功的免杀的!


讲了这么多都是基础知识啊,下面讲讲加花的过程。

1、用OD载入***,待程序分析完毕停止后,记录下入口点地址。 
2、向下拉找到最近的空白比较多的零区,先选定一部分区域点击右键复制到可执行文件,若能够弹出一个新的窗口,则可以对其写花。(更准确的做法是先把一段零区nop掉,在复制到可执行文件,保存后看能否运行,若能运行则可以写花) 
3、在所选的零区选定一个首地址并记录,然后开始写花。 
4、写完花后注意跳转到程序的原入口点地址。 
5、保存后用LordPE打开,修改程序入口点地址为花的首地址。 
6、运行你的***试试看能否运行(这才是最重要的),可以运行的话再用杀软检查看能否免杀。一般加花可以过卡巴等部分 
杀软,对于瑞星的虚拟内存查杀技术和ESET nod等的启发式扫描基本不能够躲过。

以上只是简单的介绍一下花指令免杀法的过程,具体还有细节方面的东西,就需要大家认真看看这方面的教程了。

若你的花能够躲过卡巴,恭喜你,加花成功了,请用一个记事本记录下你的花,千万别丢喽。若不幸还是被杀软干掉了,别灰心,成功来源于不断的尝试之后!

关于跳转的一点补充和归纳:

常见的跳转方法有以下几种: 
1、直接jmp 跳转地址 
2、jz 原入口点 
jnz 原入口点 
3、mov eax,原入口点 
jmp eax 
4、ja 原入口点 
jle 原入口点 
5、jb 原入口点 
jge 原入口点 
6、jg 原入口点 
jle 原入口点 
7、je 原入口点 
jne 原入口点 
8、mov eax,原入口点 
push eax 
ret