SmartUnpacker 是一款面向样本分析和逆向前置处理的自动化脱壳工具。它把“判断是否加壳、识别壳类型、选择脱壳策略、验证输出结果”这几步串成一条可复用流程。

我更希望它做的是前置过滤:先把重复判断和批量处理交给工具,真正复杂的保护壳和异常样本,再回到人工逆向里细看。

GitHub 项目地址https://github.com/Hackerchen716/smart-unpacker

它解决什么问题

脱壳流程里最容易消耗耐心的部分,往往不是最后那一下分析,而是前面一连串判断:这个样本是不是被压缩或保护过、像哪一种壳、入口点有没有跳回原始代码、dump 出来的文件还能不能被正常解析。

SmartUnpacker 把这些动作拆成检测、调度、脱壳和验证四个环节。它先给出壳类型和置信度,再根据结果选择专用脱壳器;如果没有命中明确策略,就降级到通用模拟引擎,最后再对输出文件做一轮结果评分。

核心设计

  • 多引擎融合检测:静态特征、YARA 规则和熵分析一起投票,权重分别是 35%、45%、20%,避免只靠单一特征误判。
  • 策略调度:UPX、ASPack、FSG、MPRESS、PEtite、NsPack 和 .NET 样本会优先走对应脱壳器,失败后再按场景降级。
  • Unicorn 通用模拟:未知 PE32 壳会尝试用 Unicorn 执行,结合 ESP 定律、节跳转和写后执行检测来定位 OEP。
  • 结果验证:输出文件会经过格式、大小、熵值、导入表和重检测检查,最后得到一个综合评分,而不是简单地“有文件就算成功”。

支持范围

格式上它面向 PE32、PE64、ELF32、ELF64 和 .NET 样本。壳类型上覆盖 UPX、ASPack、FSG、MPRESS、PEtite、NsPack、MEW、PECompact,以及 ConfuserEx、.NET Reactor 这类 .NET 保护。

像 Themida、VMProtect、Obsidium、Armadillo 这类保护壳,项目里更适合把它们看成“可检测、部分处理”的目标。自动化脱壳能先做筛选和尝试,不能替代人工确认。

基本用法

pip install -r requirements.txt
python smart_unpacker.py target.exe
python smart_unpacker.py target.exe --detect-only
python smart_unpacker.py target.exe --recursive --max-layers 5
python smart_unpacker.py ./samples/ --batch -o ./output/
python smart_unpacker.py target.exe --report report.json

常规分析可以直接给一个目标文件;如果只是想判断壳类型,用 --detect-only;遇到多层壳时用 --recursive 限制最大层数;批量样本则可以直接传目录并输出到指定路径。

边界

脱壳工具适合放在 CTF、靶场、授权样本分析和隔离环境里使用。它能减少重复操作,但不保证每个样本都能自动还原到可直接分析的状态,尤其是强虚拟化、强反调试和强混淆样本。

我的使用习惯是把它当成第一轮自动化处理器:能稳定处理的先处理掉,处理不了的保留检测结论和报告,再进入 IDA、x64dbg、Ghidra 或其它手工分析流程。