免杀技术介绍
1.修改特征码
免杀的最基本思想就是破坏特征,这个特征有可能是特征码,有可能是⾏为特征, 只要破坏了病毒与⽊⻢所固有的特征,并保证其原有功能没有改变,⼀次免杀就能 完成了。
特征码:能识别一个程序是一个病毒的一段不大于64字节的特征串
就⽬前的反病毒技术来讲,更改特征码从⽽达到免杀的效果事实上包含着两种⽅ 式。 ⼀种是改特征码,这也是免杀的最初⽅法。例如⼀个⽂件在某⼀个地址内有“灰鸽⼦ 上线成功!”这么⼀句话,表明它就是⽊⻢,只要将相应地址内的那句话改成别的就 可以了,如果是⽆关痛痒的,直接将其删掉也未尝不可。 第⼆种是针对⽬前推出的校验和查杀技术提出的免杀思想,它的原理虽然仍是特征 码,但是已经脱离纯粹意义上特征码的概念,不过万变不离其宗。其实校验和也是 根据病毒⽂件中与众不同的区块计算出来的,如果⼀个⽂件某个特定区域的校验和 符合病毒库中的特征,那么反病毒软件就会报警。所以如果想阻⽌反病毒软件报 警,只要对病毒的特定区域进⾏⼀定的更改,就会使这⼀区域的校验和改变,从⽽ 达到欺骗反病毒软件的⽬的。 修改特征码最重要的是定位特征码,但是定位了特征码修改后并不代表程序就能正 常运⾏,费时费⼒,由于各个杀软⼚商的特征库不同,所以⼀般也只能对⼀类的杀 软起效果。虽然效果不好,但有时候在没有源码的情况下可以⼀⽤。
2.花指令免杀
花指令其实就是⼀段毫⽆意义的指令,也可以称之为垃圾指令。花指令是否存在对 程序的执⾏结果没有影响,所以它存在的唯⼀⽬的就是阻⽌反汇编程序,或对反汇 编设置障碍。
⼤多数反病毒软件是靠特征码来判断⽂件是否有毒的,⽽为了提⾼精度,现在的特 征码都是在⼀定偏移量限制之内的,否则会对反病毒软件的效率产⽣严重的影响! ⽽在⿊客们为⼀个程序添加⼀段花指令之后,程序的部分偏移会受到影响,如果反病毒软件不能识别这段花指令,那么它检测特征码的偏移量会整体位移⼀段位置, ⾃然也就⽆法正常检测⽊⻢了。
3.加壳免杀
说起软件加壳,简单地说,软件加壳其实也可以称为软件加密(或软件压缩),只 是加密(或压缩)的⽅式与⽬的不⼀样罢了。壳就是软件所增加的保护,并不会破 坏⾥⾯的程序结构,当我们运⾏这个加壳的程序时,系统⾸先会运⾏程序⾥的壳, 然后由壳将加密的程序逐步还原到内存中,最后运⾏程序。 当我们运⾏这个加壳的程序时,系统⾸先会运⾏程序的“壳”,然后由壳将加密的程 序逐步还原到内存中,最后运⾏程序。这样⼀来,在我们看来,似乎加壳之后的程 序并没有什么变化,然⽽它却达到了加密的⽬的,这就是壳的作⽤。 加壳虽然对于特征码绕过有⾮常好的效果,加密壳基本上可以把特征码全部掩盖, 但是缺点也⾮常的明显,因为壳⾃⼰也有特征。在某些⽐较流氓的国产杀软的检测 ⽅式下,主流的壳如VMP, Themida等,⼀旦被检测到加壳直接弹框告诉你这玩意⼉ 有问题,虽然很直接,但是还是挺有效的。有些情况下,有的常⻅版本的壳会被直 接脱掉分析。 ⾯对这种情况可以考虑⽤⼀切冷⻔的加密壳,有时间精⼒的可以基于开源的压缩壳 改⼀些源码,效果可能会很不错。 总得来说,加壳的⽅式来免杀还是⽐较实⽤的,特别是对于不开源的PE⽂件,通过 加壳可以绕过很多特征码识别。
4.内存免杀
CPU不可能是为某⼀款加壳软件⽽特别设计的,因此某个软件被加壳后的可执⾏代 码CPU是读不懂的。这就要求在执⾏外壳代码时,要先将原软件解密,并放到内存 ⾥,然后再通知CPU执⾏。
因为杀毒软件的内存扫描原理与硬盘上的⽂件扫描原理都是⼀样的,都是通过特征 码⽐对的,只不过为了制造迷惑性,⼤多数反病毒公司的内存扫描与⽂件扫描采⽤ 的不是同⼀套特征码,这就导致了⼀个病毒⽊⻢同时拥有两套特征码,必须要将它们全部破坏掉才能躲过反病毒软件的查杀。
因此,除了加壳外,⿊客们对抗反病毒软件的基本思路没变。⽽对于加壳,只要加 ⼀个会混淆程序原有代码的“猛”壳,其实还是能躲过杀毒软件的查杀的。
5.⼆次编译
metasploit的msfvenom提供了多种格式的payload和encoder,⽣成的shellcode也 为⼆次加⼯提供了很⼤遍历,但是也被各⼤⼚商盯得死死的。 ⽽shikata_ga_nai是msf中唯⼀的评价是excellent的编码器,这种多态编码技术使得 每次⽣成的攻击载荷⽂件是不⼀样的,编码和解码也都是不⼀样。还可以利⽤管道 进⾏多重编码进⾏免杀。 ⽬前msfvenom的encoder特征基本都进⼊了杀软的漏洞库,很难实现单⼀encoder 编码⽽绕过杀软,所以对shellcode进⾏进⼀步修改编译成了msf免杀的主流。互联 ⽹上有很多借助于C、C#、python等语⾔对shellcode进⾏⼆次编码从⽽达到免杀的 效果。
6.分离免杀
侯亮⼤神和倾旋⼤神都分别提到过payload分离免杀和webshell分离免杀,采⽤分离 法,即将ShellCode和加载器分离。⽹上各种加载器代码也有很多,各种语⾔实现的 都很容易找到,虽然看起来⽐较简单,但效果却是不错的。⽐如侯亮⼤神提到的 shellcode_launcher,加载c代码,基本没有能查杀的AV。
7.资源修改
有些杀软会设置有扫描⽩名单,⽐如之前把程序图标替换为360安全卫⼠图标就能 过360的查杀。
1. 加资源
使⽤ResHacker对⽂件进⾏资源操作,找来多个正常软件,将它们的资源加⼊到⾃ ⼰软件,如图⽚,版本信息,对话框等。
2. 替换资源
使⽤ResHacker替换⽆⽤的资源(Version等)。
3.加签名
使⽤签名伪造⼯具,将正常软件的签名信息加⼊到⾃⼰软件中。