大家好,我是一个在IT行业十余年的小菜鸟,今天与大家讲一讲不一样的免杀。
一 常见的免杀。
shellcode混淆,汇编花指令,使用常见的xor,AES等加密,这种方式不能说一定无法免杀,但是如果使用cs,msf等特征明显的shellcode,要做到免杀应该是一件很难的事情,而下面的免杀这些方法也许会让你焕然一新。
二 进阶免杀。
1.使用自定义的加解密。
shellcode无非就是一串二进制数组,你可以把它当成int数组,进行自定义的加减乘除之后,将生成的shellcode传入并进行相对应的操作还原执行,这样并不会触发免杀的报警机制,也就是大家常说的,生成exe的熵值并不会因为自定义加解密而增加。
2.使用不同的语言进行免杀。
在做免杀的过程中,也许大家会发现,c#。c++,python等语言,在做免杀时有不同的优势。
比如针对360,赛门铁克,defender,卡巴等软件,使用python和ruby进行同样的操作时,也许并不会被杀,而用c++就会,这是因为解释器·的不同,甚至有一段时间,使用python32位解释器,国外上面常见的杀软对这些病毒程序完全无动于衷。
而在做持久化时,你会发现java,有得天独厚的优势,因为他使用自身的jvm,所以很多操作并不会被杀软拦截,当然java的缺点也明显,编译后需要配套的jdk,也就意味着通常需要60M以上的空间,文件较大。
3.反汇编更改。
当我们将程序编译好之后,以python为列,我们可以将exe反汇编,并将其中的变量进行修改,使它不符合python的语法,修改之后你会发现,在windows系统中可以正常解析运行,而本来会被查杀的程序,却并没有被拦截,这是因为杀软内部是使用的沙盒处理,会解析异常,导致无法分析,也就不会报毒。
4.白加黑。
白加黑其实是很常见的一种免杀手段,都属于我眼中的中级手段,所以放在了这里,我觉得这个应该都明白,不用我细说了。
5.加载器
加载器有分为普通加载器和高级加载器。
普通的加载器比如申请动态内存,汇编加载等。这种对免杀提供的帮助并不大。
高级加载器,比如管道连接,syscall调用等,这些仅需要简单的处理就有可能绕过杀软的检查。
6.特征免杀
有时候我们程序被查杀仅仅只是因为某个函数被针对,比如VirtualProtect等相关函数,其实已经列入了杀软的黑名单,这时候我们需要对函数进行动态加载,就可以绕过杀软的检测机制。
三 超进阶免杀。
1.windows虚拟化。
在免杀的过程中,我们发现,无论使用什么语言开发,所有操作都依赖于windows系统,有没有什么办法能完全超脱,于是虚拟化技术就此排上用场,windows虚拟化技术,简单点说,就是在windows系统中安装一个简化版的系统,是这个简化版的新系统和我们的服务端进行通讯。而所有和被控机器的通讯,就是先通过服务端,向简化版的新系统通讯(虚拟系统),再通过简化版的新系统,以内网横向的方式操作被控机器。
所有对外的操作由于是在虚拟系统中进行操作,所以并不会被监控。
但该方法由于新开发的虚拟系统bug太多,(目标锁屏,虚拟机会断网等)最后暂时搁置了。
2.驱动
驱动免杀,也是现在用的最多的方式,由于很难弄到有效的驱动签名,所以我们使用过期签名。并通过白加黑,内存加载等手段,加载我们的驱动,然后修改windows硬编码,可以做到两种。
一种是使对面的杀软免杀能力完全无效,这样所有操作都是正常行为,也就是相当于卸载杀软。
第二种是进行转发,让他们的驱动,请求我们的驱动而不是系统驱动,在我们的驱动对指定的·程序进行过滤,从而实现部分程序,或者部分目录不检测,也就是类似于白名单效果。相当于在杀软旁边装了个杀软。
四 免杀总结。
系统里面装系统,杀软旁边装杀软,逃避不是最好的解决方案,最完美的防守,其实是进攻。