1⼀、前⾔
通过不⼀样的⽅法过Windows Defender的静态和动态查杀。
本文原作者四五qq,公众号锦鲤安全
2⼆、效果图
在windows server 2022 上进⾏测试,defender已更新⾄最新,过defender静态加动态查杀:
VT查杀:
3三、过defender静态查杀
过静态查杀主要在shellcode加解密上做⽂章,加载器可以随意⼀点,如何防⽌杀软通过代码中的key和 解密函数逆推出原shellcode才是重点。
下⾯是⼀个动态EnumDesktops回调加载器:
直接使⽤这个加载器打包exe,肯定会被杀软查杀的,我们对shellcode进⾏加密。
下⾯是我最常使⽤的⾃定义异或加解密:
加密过程:
先异或再加上6位的key得到与原⻓度6倍的密⽂。
使⽤⾃定义的异或加解密shellcode后的代码:
使⽤这个⾃定义的异或加解密对shellcode进⾏加密已经可以过⼤部分杀软查杀了,但还是有⼀些杀软报 毒,原因很简单,key和解密函数直接出现在代码中,逆推能⼒厉害的杀软可以使⽤key和解密函数逆推 出原shellcode。
之前使⽤过对key进⾏⼀点混淆,在key中插⼊Sleep()和rand()碰撞出key的⽅法,有⼀点的效果,可以绕 过95%的杀软,但还是绕不过defender,在不插⼊花代码的情况下还是很容易被defender的静态查杀:
如果在解密函数中插⼊⼤量花代码的话则有不错的静态免杀效果,可以过defender静态查杀。
因此,对key再次进⾏混淆,key不能直接出现代码代码中,也不能由代码可以直接推导出key,这样就没 有意义了。更⾼级的做法是把key放到外界中,从运⾏环境中去获取key。⽐如,把key设为与运⾏路径或
系统⽬录下的某个⽂件名或注册表中某个固定的值相关等,当然,考虑到注册表操作可能会被360这些杀 软拦截,所以我设成了运⾏路径的最后⼀个字符,如果我的免杀⻢newsc.exe运⾏路径为C:\Users\Administrator\Desktop\newsc.exe,那么最后⼀个字符“e”就为解密密钥。代码实现如下:
将上⾯的⼏点组合起来,使⽤上⾯的⾃定义异或随机值加密将shellcode加密,密钥e,打包exe,在不加 花代码的情况下过了defender静态:
上⾯的代码中,获取最后⼀个字符有⼀个减字符'0'的操作,那是因为我将⾃定义的加解密打包成了exe, 不必每次都⽤c代码加密,exe⽤的密钥是数字类型因此有⼀个-'0'转数字的操作,你们实际使⽤c代码加 密时不必减'0'。
g++
newsc.cpp exclusionPath.cpp -o newsc.exe -mconsole
-fno-stack-protector
-fvisibility=hidden -Wl,--dynamicbase
-Wl,--nxcompat
4最后:
需要源码 添加 暗月的备用号 回复源码
如提示添加频繁请稍后添加
或加群