修改特征码

免杀的最基本思路是破坏特征,这个特征有可能是特征码,有可能是行为特征,只要破坏了病毒木马的固有特征,并保证其原有功能没有改变,就能实现免杀。

特征码: 能识别一个程序是一个病毒的一段不大于64字节的特征串

  1. 改特征码,最初的免杀思想,例如一个文件在某一个地址内有“CS上线成功”这么一句话。只要将相应地址内的那句话该成别的就行,比如: success;当然如果是不影响程序运行甚至无关痛痒的一句话,直接删除也是可以的。
  2. 如果一个文件某个特定区域的校验符合病毒库中的特征,那么反病毒软件就会报警。找出这一特征,并进行修改以达到欺骗杀软的目的而实现免杀。

花指令免杀

花指令就是一段毫无意义的指令,也被称为垃圾指令。花指令是否存在对程序的执行结果没有影响,所以它存在的唯一目的就是阻止反汇编程序,或者对反汇编设置障碍。
大多数杀软是根据特征码来判断文件是否有毒的,而为了提高精度,现在的特征码都是在一定偏移限制之内的,否则会对杀软的效率产生严重的漏洞影响。
而添加了花指令后,程序的部分偏移会受到影响,如果杀软不能识别这段花指令,那么它检测的偏移量就会整体偏移,从而导致杀软无法正常检测到特征码。

加壳免杀

软件加壳可以被称为软件加密(或者软件压缩),只不过是加密的方式不一样了。壳就是软件所增加的保护,不会破坏里面的程序结构,当运行这个加壳程序时,系统首先运行程序里面的壳,然后由壳将加密的程序逐步还原到内存中,最后运行程序。
当我们运⾏这个加壳的程序时,系统⾸先会运⾏程序的“壳”,然后由壳将加密的程
序逐步还原到内存中,最后运⾏程序。这样⼀来,在我们看来,似乎加壳之后的程
序并没有什么变化,然⽽它却达到了加密的⽬的,这就是壳的作⽤。
加壳虽然对于特征码绕过有⾮常好的效果,加密壳基本上可以把特征码全部掩盖,
但是缺点也⾮常的明显,因为壳⾃⼰也有特征。在某些⽐较流氓的国产杀软的检测
⽅式下,主流的壳如VMP, Themida等,⼀旦被检测到加壳直接弹框告诉你这玩意⼉
有问题,虽然很直接,但是还是挺有效的。有些情况下,有的常⻅版本的壳会被直
接脱掉分析。
⾯对这种情况可以考虑⽤⼀切冷⻔的加密壳,有时间精⼒的可以基于开源的压缩壳
改⼀些源码,效果可能会很不错。
总得来说,加壳的⽅式来免杀还是⽐较实⽤的,特别是对于不开源的PE⽂件,通过
加壳可以绕过很多特征码识别

内存免杀

CPU不可能是为某⼀款加壳软件⽽特别设计的,因此某个软件被加壳后的可执⾏代
码CPU是读不懂的。这就要求在执⾏外壳代码时,要先将原软件解密,并放到内存
⾥,然后再通知CPU执⾏。
因为杀毒软件的内存扫描原理与硬盘上的⽂件扫描原理都是⼀样的,都是通过特征
码⽐对的,只不过为了制造迷惑性,⼤多数反病毒公司的内存扫描与⽂件扫描采⽤
的不是同⼀套特征码,这就导致了⼀个病毒⽊⻢同时拥有两套特征码,必须要将它
们全部破坏掉才能躲过反病毒软件的查杀。
因此,除了加壳外,⿊客们对抗反病毒软件的基本思路没变。⽽对于加壳,只要加
⼀个会混淆程序原有代码的“猛”壳,其实还是能躲过杀毒软件的查杀的。

二次编译

metasploit的msfvenom提供了多种格式的payload和encoder,⽣成的shellcode也
为⼆次加⼯提供了很⼤遍历,但是也被各⼤⼚商盯得死死的。
⽽shikata_ga_nai是msf中唯⼀的评价是excellent的编码器,这种多态编码技术使得
每次⽣成的攻击载荷⽂件是不⼀样的,编码和解码也都是不⼀样。还可以利⽤管道
进⾏多重编码进⾏免杀。
⽬前msfvenom的encoder特征基本都进⼊了杀软的漏洞库,很难实现单⼀encoder
编码⽽绕过杀软,所以对shellcode进⾏进⼀步修改编译成了msf免杀的主流。互联
⽹上有很多借助于C、C#、python等语⾔对shellcode进⾏⼆次编码从⽽达到免杀的
效果。

资源修改

有些杀软会设置有扫描⽩名单,⽐如之前把程序图标替换为360安全卫⼠图标就能
过360的查杀。

  1. 加资源
    使⽤ResHacker对⽂件进⾏资源操作,找来多个正常软件,将它们的资源加⼊到⾃
    ⼰软件,如图⽚,版本信息,对话框等。
  2. 替换资源
    使⽤ResHacker替换⽆⽤的资源(Version等)。
  3. 加签名
    使⽤签名伪造⼯具,将正常软件的签名信息加⼊到⾃⼰软件中。

    参考

    免杀技术有⼀套: https://anhkgg.com/aanti-virus/
    Meterpreter免杀及对抗分析: https://www.freebuf.com/sectool/157122.html
    免杀艺术: https://www.4hou.com/technology/3853.html