Shellcode 免杀六层套娃:av-evasion-skills 从源码到落地的完整方案

⚡ 不落地 · 不触发 · 多层混淆,一套源码全搞定


av-evasion-skills 整体架构

🚀 一句话介绍

av-evasion-skills 是一套完整的 Shellcode 免杀方案,包含三层处理(Patch → XOR加密 → IPv4混淆)和一个高度混淆的 Loader,通过 DLL 侧载 + Module Stomping + 白 DLL 注入,实现真正的无文件落地 + 进程内执行。

🔗 项目地址:https://github.com/bluechips-zhao/av-evasion-skills


💡 解决什么问题?

日常攻防场景中,你可能遇到这样的困境:

😖 痛点😎 av-evasion-skills 解法
Shellcode 一丢到目标机器就被杀软秒删三层静态混淆,特征码彻底抹除
Cobalt Strike / Metasploit 原始载荷被拦源码可控,自定义加密链路
PowerShell 无文件脚本被杀软行为检测捕获Module Stomping + 白 DLL,不走寻常路
每次手工混淆都要重头来脚本自动化,三行命令搞定

🏗️ 核心架构

整个方案分为 Shellcode 处理Loader 执行 两大阶段:

╔═══════════════════════════════════════════════════════════╗
║            第一阶段:Shellcode 混淆(三层)                 ║
╠═══════════════════════════════════════════════════════════╣
║                                                           ║
║   ┌─ Step 1 ──────────────────────────────────────────┐  ║
║   │  shellcode-patch.py  →  特征码修补(不死免杀)     │  ║
║   └───────────────────────────────────────────────────┘  ║
║                         ↓                                 ║
║   ┌─ Step 2 ──────────────────────────────────────────┐  ║
║   │  shellcode-encrypt.py  →  XOR 循环加密 + 密钥     │  ║
║   └───────────────────────────────────────────────────┘  ║
║                         ↓                                 ║
║   ┌─ Step 3 ──────────────────────────────────────────┐  ║
║   │  shellcode-obfuscate-ipv4.py  →  IPv4 数字混淆    │  ║
║   │  字节流转为 IP 数字数组,编译进 payload_dll.c      │  ║
║   └───────────────────────────────────────────────────┘  ║
║                                                           ║
║   输出:helper.dll  +  shellcode_obfuscated_ipv4.c        ║
╚═══════════════════════════════════════════════════════════╝
                              ↓
╔═══════════════════════════════════════════════════════════╗
║             第二阶段:Loader 执行(十步)                     ║
╠═══════════════════════════════════════════════════════════╣
║                                                           ║
║   ① LoadLibrary("helper.dll")     加载 Payload DLL         ║
║   ② sscanf 解析 IPv4 数据         还原字节流               ║
║   ③ GetEncryptionKey()            获取密钥 XOR 解密         ║
║   ④ FreeLibrary(helper.dll)       卸载 DLL 消除痕迹        ║
║   ⑤ LoadLibrary("msimg32.dll")    加载白 DLL              ║
║   ⑥ 定位 msimg32.dll .text 段     Module Stomping 目标     ║
║   ⑦ WriteProcessMemory + VirtualProtect  写入 Shellcode    ║
║   ⑧ FlushInstructionCache         刷新 CPU 指令缓存         ║
║   ⑨ SecureZeroMemory + HeapFree   清理内存明文痕迹        ║
║   ⑩ CreateFiber                   线程切换执行(无RT注入)  ║
║                                                           ║
║   helper.dll(已卸载)  ·  msimg32.dll(.text被占用)     ║
╚═══════════════════════════════════════════════════════════╝

🔬 第一层:Shellcode Patch(特征码修补)

# 将原始 Shellcode 复制到 scripts 目录
cp your_shellcode.bin scripts/shellcode_raw.bin
cd scripts/

# 执行第一步:Patch Shellcode
python shellcode-patch.py shellcode_raw.bin

📌 技术要点:针对杀软常见静态特征码进行字节级修补,是免杀链路的第一道防线。


🔐 第二层:XOR 循环加密

# 用自定义密钥加密
python shellcode-encrypt.py shellcode_patched.bin "MySecretKey"

这一层的价值:

  • 🔒 原始 Shellcode 从不出现在明文内存中
  • 🔑 自定义密钥运行时解密,黑盒化 Payload
  • 🔄 循环 XOR,密钥未知则无法还原

🌐 第三层:IPv4 数字混淆

真实运行截图(1388 字节 Shellcode → 347 个 IP 地址):

真实终端运行截图
# 将加密后的 Shellcode 转为 IPv4 数字数组
python shellcode-obfuscate-ipv4.py shellcode_encrypted.bin

生成的 IPv4 数组源码片段:

IPv4 数组源码预览

这一层是灵魂:

原始字节:\x4d\x5a\x90\x00 ...
          ↓  IPv4 数字混淆
C 源码:char* ipv4_array[] = {
          "189.102.115.116", "83.169.175.190",
          "37.33.24.51", "46.112.102.114", ...
       }
        ↓  编译进 helper.dll
磁盘上:100% 纯数字,无任何 Shellcode 特征!

🎯 杀软的静态签名库中不可能存在这种模式——数字数组根本不像恶意代码。


⚙️ Loader 执行流程详解

Loader 十步执行流程

Loader(loader_v4.c)十步执行,每一步都有精心的反检测设计:

步骤操作技术细节反检测效果
加载 Payload DLLLoadLibrary("helper.dll")利用正常 DLL 加载机制
解析 IPv4 数据sscanf 还原字节流字符串解析,无可疑函数调用
解密 ShellcodeGetEncryptionKey() 获取密钥密钥存在 DLL 中,非硬编码
卸载 DLLFreeLibrary(helper.dll)运行时卸载,消除磁盘痕迹
加载白 DLLLoadLibrary("msimg32.dll")系统白 DLL,签名有效
定位 .text 段在 msimg32.dll .text 段找空间Module Stomping
写入 ShellcodeWriteProcessMemory + VirtualProtect改写已有段,不分配新内存
刷新 CPU 缓存FlushInstructionCache确保 CPU 执行新指令
清理内存痕迹SecureZeroMemory + HeapFree擦除明文 Shellcode
切换线程执行CreateFiber(非 CreateRemoteThread无线程创建行为

🛡️ 核心免杀技术全景图

这套方案用了 9 层免杀技术,覆盖静态扫描到内存扫描全部环节:

九层免杀技术全景

🧪 白 DLL 选择

Loader 支持多个白 DLL 作为 Module Stomping 的目标载体:

✅ msimg32.dll   ← 首选(Windows 系统自带图形库)
✅ dcomp.dll     ← 备用(DirectComposition 组件)
✅ dwmapi.dll    ← 备用(Desktop Window Manager)

💡 这些 DLL 都是微软签名,.text 段写入 Shellcode 后,杀软很难将其判定为恶意。


🔧 编译构建

环境要求

依赖版本说明
🖥️ 操作系统Windows 10/11 (x64)必须是 Pro 版本
🐍 Python3.8+运行混淆脚本
🔨 GCCMinGW-w6464位编译器

编译命令

# Step 1: 编译 Payload DLL
gcc -shared -o helper.dll payload_dll.c -s

# Step 2: 编译 Loader
gcc -mwindows -o loader.exe loader_v4.c -s
参数作用说明
-shared编译为 DLL生成 helper.dll
-mwindowsGUI 模式不弹出黑色控制台窗口
-s去除符号表减小体积,增加分析难度

⚠️ 无需额外链接 -lpsapi,所有依赖均为系统自带,纯净无污染。

最终产物

┌─────────────────────────────────────┐
│  📦 loader.exe                       │
│     主程序,独立可执行文件             │
│     (无控制台,进程名普通)           │
├─────────────────────────────────────┤
│  📦 helper.dll                       │
│     携带加密 Shellcode + 密钥         │
│     (运行后即卸载,不留痕迹)         │
└─────────────────────────────────────┘
     ↑ 两者必须放在同一目录

🚀 快速使用流程

完整使用流程图
# ═══════════════════════════════════════
#  第一步:准备 Shellcode
# ═══════════════════════════════════════
# msfvenom / Cobalt Strike / Metasploit 均可
# 必须是 64 位 Shellcode

# ═══════════════════════════════════════
#  第二步:三层 Shellcode 混淆
# ═══════════════════════════════════════
cp your_shellcode.bin scripts/shellcode_raw.bin
cd scripts/

python shellcode-patch.py shellcode_raw.bin
# 输出:shellcode_patched.bin

python shellcode-encrypt.py shellcode_patched.bin "YourSecretKey"
# 输出:shellcode_encrypted.bin  +  shellcode_encrypted.c

python shellcode-obfuscate-ipv4.py shellcode_encrypted.bin
# 输出:shellcode_obfuscated_ipv4.c

# ═══════════════════════════════════════
#  第三步:编译 DLL 和 Loader
# ═══════════════════════════════════════
cd ..
gcc -shared -o helper.dll payload_dll.c -s
gcc -mwindows -o loader.exe loader_v4.c -s

# ═══════════════════════════════════════
#  ✅ 完成!最终产物
# ═══════════════════════════════════════
#  → loader.exe + helper.dll(同一目录)
#  → 丢到目标机器执行即可

❓ 常见问题 Q&A

Q1: Shellcode 太短(小于 50 字节)?

检查 payload_dll.c 中的 ipv4_array[] 长度,确保足够容纳你的 Shellcode。IPv4 混淆有最小体积要求。


Q2: 64位 Shellcode 用 32位 GCC 编译?

Shellcode 位数编译器备注
64位MinGW-w64(64位)✅ 推荐
32位MinGW32(32位)可行,但不推荐

Q3: 运行环境不对?

本项目仅支持 Windows 10/11 Pro x64,Home 版或更低版本未测试。


Q4: msimg32.dll 不可用?

备用白 DLL 已内置:dcomp.dlldwmapi.dll,Loader 支持自动切换,详见源码注释。


Q5: 如何分发 loader.exe 和 helper.dll?

⚠️ 两者必须放在同一目录,单独拷贝任一文件都会导致执行失败。可使用 IExpress 或压缩自解压等方式捆绑分发。


📋 常见应用场景

🎯 场景💡 如何使用
CTF 混淆题生成无特征 Shellcode 用于混淆类 CTF 题
代码混淆题二进制代码混淆场景训练
DLL 注入将 payload.dll / shellcode.dll 注入目标进程
Shellcode 注入绕过杀软直接注入 Shellcode
无文件攻击内存加载,无磁盘落地
后渗透阶段横向移动落地时的免杀处理
红蓝对抗攻防演练中的免杀载荷准备

📊 与其他免杀方案对比

免杀方案横向对比

⚠️ 注意事项

🔴 本工具仅供授权安全研究和合法攻防演练使用。

请勿将其用于任何未经授权的入侵活动,滥用者自行承担全部法律后果。


📌 结语

av-evasion-skills 的核心价值在于 全链路源码可控 + 九层免杀技术叠加

🔒 静态层  →  Patch + XOR + IPv4数字  →  特征码彻底消失
⚙️ 行为层  →  DLL侧载 + Module Stomping + 白DLL  →  进程行为干净
🧠 内存层  →  无RT注入 + SecureZeroMemory  →  内存扫描也过
💾 磁盘层  →  无文件落地  →  杀软文件系统监控失效

六层免杀套娃,源码完全开源,攻防演练必备。


🔗 项目地址:https://github.com/bluechips-zhao/av-evasion-skills

👤 作者:bluechips | 📌 版本:V4.1


本文档由 AI 安全助手自动生成 · 仅供安全研究与学习交流

© 版权声明
THE END
喜欢就支持一下吧
点赞5 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容