Skip to content

Hackerchen716/smart-unpacker

Repository files navigation

SmartUnpacker 🔓

智能自动化脱壳工具 — 多引擎融合检测 + 自动化脱壳 + 结果验证

Python License Platform


特性

功能 说明
多引擎融合检测 静态特征 + 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.json

架构设计

smart_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 → 极强加壳特征

Unicorn 模拟引擎

通用模拟引擎支持三种 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

扩展 YARA 规则

将自定义 .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 反混淆

License

MIT License © hackerchen716

About

🔓 智能自动化脱壳工具 - 多引擎融合检测(静态+YARA+熵分析) + Unicorn模拟脱壳 + 自动验证 | Smart automated unpacker with multi-engine detection

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors