欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  数据库

木马免杀之汇编花指令技巧

程序员文章站 2022-04-13 09:49:32
...

相信很多朋友都做过木马免杀,早期的免杀都是加壳和改特征码,现在免杀技术已经发展到花指令免杀,改壳之类的,而这些需要一定的汇编知识,但是汇编却不是一块容易啃的骨头,所以我写了这篇菜鸟版的免杀汇编教程,帮助小菜们快速入门,掌握免杀必备的汇编知

  相信很多朋友都做过木马免杀,早期的免杀都是加壳和改特征码,现在免杀技术已经发展到花指令免杀,改壳之类的,而这些需要一定的汇编知识,但是汇编却不是一块容易啃的骨头,所以我写了这篇菜鸟版的免杀汇编教程,帮助小菜们快速入门,掌握免杀必备的汇编知识,改花指令,改特征码的技巧和编写自己的花指令。

  一、免杀必备的汇编知识

  push 压栈,栈是一种数据结构,记住四个字:先进后出。压栈就是把数据放如栈中,从栈顶放如,出栈的时候也是从栈顶取出,所以会有先进后出的特点!先进后出我们可以这样理解,例如:一个乒乓球筒,我们放入乒乓球,然后取出乒乓球,取出的都是就后放进的球。就如我们放入球的顺序是球1、2、3、4,取出的顺序是球4、3、2、1。

  pop 出栈,与push相对应。

  mov a,b 把b的值送给a,把它看作编程中的赋值语句就是b赋值给a,这时a的值就是b了。

  nop 无作用,就是什么也没做。

  retn 从堆栈取得返回地址并跳到该地址执行。

  下面是一些算术运算指令:

  ADD 加法

  sub 减法

  inc 加1

  dec 减1

  最后是跳转指令:

  jmp 无条件跳

  je 或jz 若相等则跳

  jne或jnz 若不相等则跳

  jb 若小于则跳

  jl 若小于则跳

  ja 若大于则跳

  jg 若大于则跳

  jle 若小于等于则跳

  jge 若大于等于则跳

  这些就是我们需要掌握的,怎么样不多吧,一些指令可能看不明白,看了后面的就会清楚了。对了,忘了讲寄存器了,寄存器是*处理器内的其中组成部份。寄存器是有限存贮容量的高速存贮部件,它们可用来暂存指令、数据和位址。我们需要了解的是8个通用寄存器:EAX,EBX,ECX,EDX,ESI,EDI,EBP,ESP

  二、特征码和花指令的修改

  特征码我就不多说了,大家都知道的,现在杀毒软件查杀都用特征码查杀,改了木马的特征码,杀毒软件就查不出我们的木马,这样就达到免杀的效果。而花指令是程序中的无用代码,程序多它没影响,少了它也能正常运行。加花指令后,杀毒软件对木马静态反汇编使,木马的代码就不会正常显示出来,加大杀毒软件的查杀难度。花指令的原理是堆栈平衡。前面介绍push说了,堆栈平衡可以这样理解,有进有出,不管花指令怎么写,我们要达到的目的是加花后,堆栈与未加之前一样。

  网上的花指令因为是公布出来的,所以免杀周期不长,一般公布出来不久就会被杀毒软件查杀,但是我们只要简简单单的修改一两句就可以达到免杀了。下面我们来看看5种修改方法。(也适用于特征码修改)

  我们先看看木马彩衣(金色鱼锦衣)花指令

  1、push ebp

  2、mov ebp,esp

  3、add esp,-0C

  4、add esp,0C

  5、mov eax,原入口

  6、push eax

  7、retn

  1、2、在大部分程序开头可以经常看到。push ebp是将寄存器ebp压入堆栈,mov ebp,esp是将寄存器esp的值送给寄存器ebp。3、4、使用了add指令,add esp,-0C是寄存器esp加上-0C,add esp,0C是寄存器esp加上0C,3、4、加起来就是什么也没做,达到堆栈平衡。5、6、7、完成了跳转到入口点的功能,我们一句句来看看mov eax,原入口,将入口点送入寄存器eax,push eax将寄存器eax压入堆栈,retn我们知道是从堆栈取得返回地址并跳到该地址执行。这样就回到入口点了。

  我们看看实例,以木马彩衣免杀为例,先侦壳,用peid载入,显示Microsoft Visual Basic 5.0 / 6.0,(如图1)很好,免去了脱壳的麻烦,复制木马彩衣后再粘贴,得到复件 木马彩衣.exe,我们用木马彩衣对复件 木马彩衣.exe加花,加金色鱼锦衣,(如图2)然后用Ollydbg.exe载入,我们就可以看到看到金色鱼锦衣的花指令了。(如图3)用卡巴扫描,被卡巴认出来了。(如图4)这是因为金色鱼锦衣公布比较久,用的人多了,对杀毒软件就无效了。

木马免杀之汇编花指令技巧

木马免杀之汇编花指令技巧

木马免杀之汇编花指令技巧

木马免杀之汇编花指令技巧

1、替换法

  我们用替换法来修改金色鱼锦衣,修改结果如下:

  1、push ebp

  2、mov ebp,esp

  3、add esp,1

  4、add esp,-1

  5、mov eax,原入口

  6、push eax

  7、retn

  将原来3、4、句add esp,-0C和add esp,0C改成add esp,1和add esp,-1这两句也能达到堆栈平衡,(如图5)右键选中add esp,-0C,点击汇编,将add esp,-0C改成add esp,1,将add esp,0C改成add esp,-1。选中修改部分,右键单击→复制到可执行文件→选择部分,弹出窗口,右键保存文件。这里我保存成“替换法.exe”用卡巴查杀,免杀了。(如图6)

木马免杀之汇编花指令技巧

木马免杀之汇编花指令技巧

  2、移位法

  1、push ebp

  2、mov ebp,esp

  3、nop

  4、nop

  5、add esp,-0C

  6、add esp,0C

  7、mov eax,原入口

  8、push eax

  9、retn

  将原来的3、4、5、6、7、几个语句向下移动2行,修改后保存为“移位法.exe”。

  3、添加法

  1、push ebp

  2、mov ebp,esp

  3、push edx

  4、pop edx

  5、add esp,-0C

  6、add esp,0C

  7、mov eax,原入口

  8、push eax

  9、retn

  在金色鱼锦衣中加入push edx和pop edx,这两句是将寄存器edx压入和弹出堆栈,一样达到堆栈平衡。修改后保存成“添加法.exe”。

  4、去除法

  1、push ebp

  2、mov ebp,esp

  3、mov eax,原入口

  4、push eax

  5、retn

  删除add esp,-0C和add esp,0C,修改后保存成“去除法.exe”。

  5、跳转法

  push ebp

  mov ebp,esp

  jmp 跳出到add esp,-0C的地址

  mov eax,复件_木?0040109C

  push eax

  retn

  add esp,-0C

  add esp,0C

  jmp 跳回mov eax,复件_木?0040109C的地址

  这个可能比较复杂,大家看看截图(图7),修改后保存为“跳转法.exe”。

木马免杀之汇编花指令技巧

  我们用卡巴试试修改后的效果,(如图8)看看,只有原来的木马彩衣,加了金色鱼锦衣的和去除法的可以查到。去除法是因为金色鱼锦衣的代码比较短,如果花指令长点,效果会比较好。几种修改方法结合使用效果更好,当然,一样可修改特征码,相对跳转法在修改特征码中使用比较多。

木马免杀之汇编花指令技巧

三、编写自己的花指令

  通过上面的学习我们可以知道花指令大概结构,一般开始是push ebp和mov ebp,esp,接下来就是一些能保持堆栈平衡的指令,完了就是跳回入口点了。

  我罗列出一些能保持堆栈平衡的代码

  push ebp 把基址指针寄存器压入堆栈

  pop ebp 把基址指针寄存器弹出堆栈

  push eax 把数据寄存器压入堆栈

  pop eax 把数据寄存器弹出堆栈

  nop 无作用,就是什么也没做

  mov eax,eax 将eax送入eax,等于什么也没做

  sub eax,1

  add eax,1 寄存器eax+1和寄存器eax-1,一样等于什么也没做

  sub eax,2

  dec eax

  dec eax 一样很简单的加减运算,先是寄存器eax+2,紧接着连续用dec指令处理寄存器eax两次,就是-1再-1,达到堆栈平衡。

  很简单,大家参考后可以自己写出N多这样的指令。写完这些就可以写跳转语句了。

  JMP 入口点 这时最简单的跳转了,无条件跳回入口点,最简单当然效果也最差了

  mov eax,入口点

  push eax

  retn 很眼熟吧,金色鱼锦衣的跳转,解释过,不多说了。

  mov eax,入口点

  jmp eax 和金色鱼锦衣的跳转的原理差不多吧,入口点压入寄存器eax,再跳到寄存器eax,就是跳到入口点了。

  je 入口点

  jne 入口点 等于则跳和不等于则跳,合起来就是绝对跳咯,像这样的条件跳转语句很多,大家可参考前面跳转指令的知识自己写。

  上面的指令随便结合相信大家可以写出属于自己的花指令了,这样我这篇文章的目的也就达到了。花指令添加的方法大家可以参照去年第9期的主题乐园。