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 或其它手工分析流程。