如何制作0到1木马免卡巴杀软检测的免杀技巧?
摘要:目录 静态免杀篇 动态免杀篇 流量混淆篇 免杀实战案例(一步步带你从0过卡巴) 结语 静态免杀篇 静态查杀原理 想要了解如何进行静态免杀,首先就得了解杀毒软件一般是如何查杀木马的,下面我列出常见的几种检测方式: 特征码比对:杀软会在云端或本
目录
静态免杀篇
动态免杀篇
流量混淆篇
免杀实战案例(一步步带你从0过卡巴)
结语
静态免杀篇
静态查杀原理
想要了解如何进行静态免杀,首先就得了解杀毒软件一般是如何查杀木马的,下面我列出常见的几种检测方式:
特征码比对:杀软会在云端或本地存储大量的病毒库,当一个木马被杀软扫描时,会将木马的某些特征片段进行hash运算,与病毒库进行比较,如果木马多个片段与病毒库比对成功,该木马就会被查杀。
静态启发式分析:杀软会直接分析木马的PE结构,对各种区段,例如资源,导入函数等进行分析,如果存在多个可疑的点,该木马就会被查杀
近些年因为AI爆火,很多杀软都会加入AI进行木马分析,但是分析的原理也无非是上面两种(可能有新技术但大差不差)
静态免杀思路
根据上面的原理,我们针对木马的静态免杀思路也就很明了了,我们只需要打破杀软所认定是木马的特征,就能很轻松的过静态免杀。
现在单纯只用下面某个思路去免杀,很难有好的效果,由于现在的杀软都用多种检测方式同时检测。我们希望免杀简单点,可以结合下面的多种思路同时运用进行免杀
一,对shellcode进行编码/加密
主要是过特征码比对,目的是消除shellocde中的木马特征。
这里经过实践,某些加密很难取得好的效果,比如说简单的xor加密,奇偶换位等
解决方法:
使用强加密比如AES,RSA等,或多种密码混合使用。
使用奇怪的编码,比如说将shellocde编码成ip,uuid,或者有某些ctf中的杂项编码佛曰等等(这个可以一定程度上骗过ai)
二,对shellocde中加上自解密壳
主要是过特征码比对,目的是消除shellocde中的木马特征。(某些情况下可能比直接在loader中写解密效果要好)
三,分离免杀
把shellcode和loader分开,进行加载(网络加载/文件加载/隐写),这个在免杀中的效果是真的好。
原理:如果把shellcode放在loader中一起编译,大概率会报毒(杀软的静态启发式查杀会检查到data段中有一大段不正常数据,专业点叫信息熵太高了)
四,变换shellcode
反编译shellcode替换某些指令,加上某些花指令等等。例如:
替换同义指令
xor eax, eax => mov eax, 0x0
更改指令顺序
push eax
push ebx
...
pop ebx
pop eax
------------------
push ebx
push eax
...
pop eax
pop ebx
添加花指令
jnz label
jz label
emit 0xe8
label:
五,替换资源
静态启发式分析中会分析区段内容,添加或窃取一些资源可以让杀软认为这是一个普通的程序
工具: restorator
六,添加证书
某些杀软,比如说360,对于证书来说非常看重,一般检测到某些合规白名单证书会放宽检测,我们可以通过窃取证书来瞒天过海
工具链接: https://github.com/secretsquirrel/SigThief
七,更换编译器或配置
某些编译器编译出来的比较容易被杀,比如说msvc,可以换成clang或llvm等等,编译器的优化参数也会有影响(可能把你混淆的代码给优化了)
八,更换语言
不同语言的免杀效果也会大不相同,比如说同样的逻辑,在c中被杀和在rush中免杀
九,对代码进行混淆
可以使用开源库如Obfuscator-LLVM等,对代码进行混淆,膨胀保护
十,更换一些api/动态导入api
杀软会检查导入表的某些api进行静态查杀
这里我用mfc做了一个免杀工具,工具完全开源,可以学习到PE结构和自解密壳的原理
链接: https://github.com/NOOB-P/My_re_tools
动态免杀篇
动态查杀原理
动态查杀一般是杀软的最后一道防线,杀软会主动检测并拦截运行中的木马的恶意行为,要绕过检测,就需要了解杀软在运行中是如何检测木马的。
