0x03 免杀思路总结
环境准备:
火绒(静态)、360、windowsdef(动态) 免杀的最基本思路就是去除其特征,这个特征有可能是特征码,也有可能是行为特征,只要在不修改其 原有功能的情况下,破坏了病毒与木马所固有的特征,一次免杀就能完成。 文件免杀
修改特征码
在讲述修改特征码前,先解释一下啥叫特征码 特征码就是杀软用于判断文件是否带病毒的一段独一无二的代码,这些特征码在不同的杀软的病毒库中 不同。 但总体来说,特征码就是一种只在病毒或木马文件内才有的独一无二的特征,它或是一段字符,或者在 特定位置调用的一个函数。总的来说,如果某个文件具有这个特征码,那杀软就会认为它是病毒。反 之,如果将这些特征码从病毒、木马的文件中去除或破坏掉,那杀软就会认为它是一个正常文件。 更改特征码达到免杀的效果实际上包含两种思想。 一种方法是直接修改特征码,这也是免杀的最初方式,例如在木马病毒中有一句话表明它是木马,只要 将相应地址内的那句话改成别的就可以了,在不影响功能的情况下,可以考虑直接删掉 第二种方法是针对目前推出的校验和查杀技术,原理虽然仍是特征码,但已经不是纯粹意义上特征码的 概念。其方法就是针对杀软匹配的特定区域的校验和进行修改,使得这一区域的校验和改变,从而完成 免杀。也正因此,在定位特征码时,会存在定位了两次却得出不同结果。
花指令免杀
花指令就是一段毫无意义的指令,也称为垃圾指令,花指令对程序的运行和功能没有任何影响,它存在 的唯一目的就是阻止反汇编程序,或者增加反汇编的难度。然而这种操作对杀软的影响也是致命的。 它之所以能影响杀软是因为杀软是靠特征码判断文件是否有毒,然而目前各大安全厂商为了提高杀软的 效率,会将特征码限制在一定偏移量之内,而添加花指令,程序的部分偏移会受到影响,若杀软不能识 别这段花指令,检测特征码的偏移量会整体移一段位置,无法正常检测。 这仅仅是针对第一代扫描技术的方法,不过即使是杀软采用虚拟机分析、校验和扫描或启发式分析,花 指令也会起到一定的作用,针对不同的检测方式,花指令起到的作用也不同,其最根本的思想是扰乱程 序运行顺序,并未破解者设下陷,若花指令可以成功保护软件真正代码不被轻易反汇编,那对于杀软来 说,其检测的也并非木马或病毒的真正内容了。
例:使用msf的encode模块,对shellcode进行编码处理
基于shellcode编码&加密
msfvenom -l encoder 查看工具中具有的编码方式
具体命令:-p payload -e encoder -i encoder的次数 -b 排除那些字符,一般是排除空“xff x00 x0A x0d”
可使用原生编码进行多重编码,注:只有最后一次导出文件,之前的编码都使用-f raw原始数据的形式 通过管道符传递
加壳免杀
软件加壳也可称为软件加密(软件压缩),只是加密的方式与目的不同。 加壳的目的是减少被加壳应用程序的体积,或避免让程序遭到不法分子的破坏与利用。 很多人就会想,如果加壳的话会不会破坏程序,其实并不会,当我们运行这个加壳的程序时,系统首先 会运行程序的“壳”,然后由壳将加密的程序逐步还原到内存中,最后运行程序。 加密后的文件结构已经发生了巨大的变化,原有的特征码已经不知去向,杀软也就自然认为其为一个正 常的文件。 使用市面上的常见/不常见的加壳应用,对上方生成的exe文件进行压缩处理
风险:可能导致无法正常上线
加壳后去特征
kali中编辑器可修改hex数据
找到对应加壳软件的名称部分,通过修改数据去除特征,(光标上下左右选择)
内存免杀
众所周知CPU不可能为某一款加壳软件特别设计,因此某个软件被加壳后的代码CPU无法读懂,这就要 求在执行外壳代码时,要先将原软件解密,并放到内存中,然后再通知CPU执行,因此杀软可以在这设 立一个关卡对木马和病毒进行检测让其原形毕露,也正因此我们前面讲到的文件免杀在这里统统失效。 于是我们考虑在内存中对抗杀软的查杀,其实思想与文件查杀一样,因为杀软的内存扫描原理与硬盘上 的文件扫描原理一样,都是通过特征码对比,为了制造迷惑性,大多数杀软的内存扫描与文件扫描采用 的特征码不同,就导致一个病毒木马同时拥有两套特征码,需要全部破坏掉才能躲避杀软的查杀,在一 定程度上增加了免杀的难度
行为免杀
杀软目前都有主动防御,对恶意行为进行拦截提示,比如这些行为:
● 注册表操作、添加启动项、添加服务
● 文件写入、读系统文件、删除文件、移动文件
● 杀进程、创建进程
● 注入、劫持等 行为拦截原理 归根结底,恶意行为都是通过API调用来完成的,所调用的API可能是一个,也可能是多个API组合,杀软 通过技术手段拦截这些API调用,然后根据提前设置好的策略来判断是否属于恶意行为,因此我们想要对 因为免杀做出相应的措施需要关注的只有两个关键点:
● API
● 策略(顺序,调用源,参数等等) 常见的行为免杀有如下几种方法
1. 替换API 使用相同功能的API进行替换,由于杀软只会针对一部分API进行拦截,对于API不能做到面面俱到 的拦截,比如未导出API和底层API,所以这种方法还是有效的。
2. 重写API 完全重写系统的API功能,实现自己的对应功能API,对ring3的行为拦截非常有效。
3. 合理更改调用顺序 有时被拦截的行为是通过多个API组合来完成的,所以合理替换顺序,绕过杀软的拦截策略,也可 以绕过行为拦截
4. 绕过调用源 通过调用其他进行功能来完成API的功能,最经典的通过rundll32.exe来完成dll的加载等。 自己编写shellcodeloader