C/C++ 实现切片免杀的思路

今天突然想到了一个好玩的免杀思路,原理就是想办法切断磁盘特征与内存特征,关于沙盒免杀我寻思着,这样可以将不同的的DLL映射到内存,在内存中他们的特征也是被切断的,在注入器上做判断如果是沙盒则不加载,不是则分别注入三个甚至是更多的DLL,将我们的ShellCode切片力度更细,分配到几百个甚至上千个DLL上面,做成一个链,应该可以,没尝试过,抽空可以试试。

如果我们把粒度变得细致,捕捉特征也会变得异常的麻烦,如果被杀也仅仅只是某一个DLL被杀,我们只需要远程更新一下被杀的DLL即可继续使用,方便的很,一锅端的概率应该极低。

编译这些DLL时,要是能采用不同的编译器编译则会更好一些,例如VC6编译2个,VC7编译一个,VC8编译3个。

1.编写一个脚本,准备好更多的编译器,然后在脚本中取随机数,并随即使用不同版本的编译器进行编译。
2.编写一个脚本,只需要将头部第一个dll名字固定,其他的DLL文件名称全部随机取值,或者是以系统dll随机命名。
3.我们在这几百个DLL中内嵌一些系统DLL的头部信息,或者加入不同的花指令,写的绕一点,足够让分析者通宵了。

上面只是一个思路,完全可以实现,只不过所有的DLL都是在一个进程中的。

我在想,如果能将不同进程之间的DLL进行互通应该效果会更好!

顺着这个思路想了一下,能不能自己写一个进程,然后让自己写的这个程序作为一个桥梁使用,架起一座桥,使不同进程之间的DLL可以互相调用,这样一来,我们的反弹ShellCode就会变得更有趣,跳来跳去很赞,例如UserA.exe中存在一处ShellCode片段,UserB.exe中存在另一处,UserC.exe中也存在,最后都是通过我们的桥连接起来,让所有的分散的DLL链接起来。

单看独立进程中的独立DLL没有任何含义,只有将其链接起来才是一个完整的程序。


这个只是我的一个思路,没有实现,如果有能力就去实现一下,我认为可以实现

posted @ 2020-10-20 11:18  lyshark  阅读(362)  评论(0编辑  收藏