智能自动化脱壳工具 — 多引擎融合检测 + 自动化脱壳 + 结果验证
| 功能 | 说明 |
|---|---|
| 多引擎融合检测 | 静态特征 + YARA 签名 + 熵分析三引擎加权投票,置信度评分 |
| 智能 OEP 定位 | ESP 定律 + 节跳转检测 + 写后执行检测,三策略并行 |
| 专用脱壳器 | UPX / ASPack / FSG / MPRESS / PEtite / NsPack / .NET 专用脱壳 |
| 通用模拟引擎 | Unicorn x86 模拟器,处理未知壳,内置反反调试 API stub |
| 多格式支持 | PE32 / PE64 / ELF32 / ELF64 / .NET |
| 递归多层脱壳 | 自动检测并处理多层嵌套壳 |
| 脱壳结果验证 | 格式校验 + 熵对比 + 大小对比 + 导入表检查 + 重检测 |
| 批量处理 | 一键处理整个目录,适合批量分析样本 |
| JSON 报告 | 输出结构化分析报告,便于集成到自动化流水线 |
| 壳名 | 类型 | 检测 | 脱壳 |
|---|---|---|---|
| UPX | 压缩壳 | ✅ | ✅ |
| ASPack | 压缩壳 | ✅ | ✅ |
| FSG | 压缩壳 | ✅ | ✅ |
| MPRESS | 压缩壳 | ✅ | ✅ |
| PEtite | 压缩壳 | ✅ | ✅ |
| NsPack | 压缩壳 | ✅ | ✅ |
| MEW | 压缩壳 | ✅ | ✅ |
| PECompact | 压缩壳 | ✅ | ✅ |
| Themida | 保护壳 | ✅ | |
| VMProtect | 保护壳 | ✅ | |
| Obsidium | 保护壳 | ✅ | |
| Armadillo | 保护壳 | ✅ | |
| ConfuserEx | .NET 混淆 | ✅ | ✅ (de4dot) |
| .NET Reactor | .NET 保护 | ✅ | ✅ (de4dot) |
| 未知壳 | 通用 | ✅ | ✅ (Unicorn) |
pip install -r requirements.txt# 检测并脱壳(自动选择最优脱壳器)
python smart_unpacker.py target.exe
# 指定输出路径
python smart_unpacker.py target.exe -o unpacked.exe
# 仅检测壳(不脱壳)
python smart_unpacker.py target.exe --detect-only
# 详细模式(显示节分析)
python smart_unpacker.py target.exe -v
# 递归脱壳(处理多层壳,最多5层)
python smart_unpacker.py target.exe --recursive --max-layers 5
# 批量处理目录
python smart_unpacker.py ./samples/ --batch -o ./output/
# 生成 JSON 分析报告
python smart_unpacker.py target.exe --report report.jsonsmart_unpacker/
├── smart_unpacker.py # 主程序入口(CLI)
├── core/
│ ├── detector.py # 多引擎融合检测器
│ ├── dispatcher.py # 脱壳策略调度器
│ ├── iat_fixer.py # IAT 重建模块
│ └── validator.py # 脱壳结果验证
├── engines/
│ ├── static_engine.py # 静态分析引擎(节名/EP特征/字符串/导入表)
│ ├── yara_engine.py # YARA 签名引擎
│ └── unicorn_engine.py # Unicorn 通用模拟脱壳引擎
├── unpackers/
│ ├── upx_unpacker.py # UPX 专用(支持变种修复)
│ ├── aspack_unpacker.py # ASPack 专用
│ ├── fsg_unpacker.py # FSG 专用
│ ├── mpress_unpacker.py # MPRESS 专用
│ ├── petite_unpacker.py # PEtite 专用
│ ├── nspack_unpacker.py # NsPack 专用
│ ├── dotnet_unpacker.py # .NET 反混淆(de4dot)
│ └── generic_unpacker.py# 通用 Unicorn 脱壳器
├── signatures/
│ └── peid.yar # PEiD 风格 YARA 规则库(20+ 规则)
└── utils/
├── entropy.py # Shannon 熵计算与分类
├── pe_utils.py # PE 文件解析工具
├── elf_utils.py # ELF 文件解析工具
└── logger.py # 彩色日志(Rich)
最终置信度 = 静态引擎(35%) + YARA引擎(45%) + 熵分析(20%)
静态引擎 检测维度:
- 节名匹配(UPX0/UPX1/.aspack/.vmp0 等)
- 入口点字节特征(PUSHAD+CALL+0 等)
- 文件字符串扫描
- 导入表分析(极少导入 → 加壳特征)
- EP 是否在最后一个节
YARA 引擎 特性:
- 20+ 条精确规则覆盖主流壳
- 支持自定义扩展规则(
.yar文件放入signatures/目录) - 每条规则携带置信度元数据
熵分析 策略:
- 节级别熵值计算(Shannon 熵)
- 高熵节比例评分
- 熵值 > 7.0 → 极强加壳特征
通用模拟引擎支持三种 OEP 检测策略,并行运行取最先触发者:
| 策略 | 原理 | 适用壳 |
|---|---|---|
| ESP 定律 | PUSHAD 后记录 ESP,POPAD+JMP 后即为 OEP | UPX、ASPack、FSG |
| 节跳转检测 | 执行流从高熵节跳到低熵节 | 大多数压缩壳 |
| 写后执行检测 | 被写入的内存页随后被执行 | 自解压壳 |
内置反反调试 API stub(模拟 kernel32/ntdll 常用函数),防止壳检测到模拟环境。
目标文件: target_upx.elf
文件大小: 56,680 bytes (55.4 KB)
[ 检测 ] 正在分析壳特征...
┌──────────────────┬──────────────────────────────┬──────────┐
│ 检测项 │ 结果 │ 置信度 │
├──────────────────┼──────────────────────────────┼──────────┤
│ 文件格式 │ ELF64 │ │
│ 是否加壳 │ [✓] 是 │ │
│ 检测到的壳 │ UPX │ 97.0% │
│ 平均节熵值 │ 7.9040 (极高熵(加密/随机)) │ │
└──────────────────┴──────────────────────────────┴──────────┘
[ 脱壳 ] 使用 UPX 脱壳器...
[✓] 脱壳成功!
输出文件: target_upx_unpacked.elf
[ 验证 ] 验证脱壳结果...
脱壳验证
┌──────────────┬──────────────────────────────────────────┐
│ 验证项 │ 详情 │
├──────────────┼──────────────────────────────────────────┤
│ format │ ELF64 ([✓]) │
│ size │ 56,680 → 138,216 bytes ([✓] 增大) │
│ entropy │ 7.9040 → 5.7941 ([✓] 下降) │
│ redetect │ [✓] 未再检测到 UPX │
│ 综合评分 │ 85/100 │
└──────────────┴──────────────────────────────────────────┘
耗时: 0.07s
将自定义 .yar 文件放入 signatures/ 目录,规则 meta 中需包含:
rule MyCustomPacker {
meta:
packer = "MyPacker" // 壳名称
confidence = 90 // 置信度 (0-100)
strings:
$sig = { ... }
condition:
uint16(0) == 0x5A4D and $sig
}| 包 | 用途 |
|---|---|
pefile |
PE 文件解析 |
lief |
多格式二进制解析 |
capstone |
反汇编(指令分析) |
unicorn |
x86/x64 模拟执行引擎 |
yara-python |
YARA 规则匹配 |
rich |
终端美化输出 |
外部工具(可选):
upx— UPX 脱壳(自动安装)de4dot— .NET 反混淆
MIT License © hackerchen716