一个面向 Android APK Native SO 预筛选 的小工具。
核心目标不是“完整还原逻辑”,而是作为逆向分析 / 安全审计前的前置探针,帮助你在一堆 arm64-v8a 的 .so 里,更快发现高价值目标。
它适合用在下面这类场景:
- 在正式打开 IDA / Ghidra / Hopper 之前,先快速扫一遍 APK
- 从大量 Native 库中优先找出更值得投入时间的目标
- 提前识别疑似:
- 加壳 / loader 型保护
- 强混淆 / OLLVM 类特征
- ZIP 容器伪装 SO
- 可疑入口(
ELF入口/.init_array/JNI_OnLoad/Java_*)
ObfuScan 不是一个“全自动还原保护逻辑”的工具。
它更像一个审计前的前哨站:
- 帮你快速扫 APK 中所有 64 位 SO
- 给出简洁的中文风险摘要
- 按 高 / 中 / 低 风险排序
- 对高风险样本进一步展示关键入口预览
- 让你更快决定:
- 哪几个 SO 值得先看
- 哪些入口值得先下断点 / 先反汇编 / 先做动态跟踪
一句话总结:
先筛选,再深挖。
把有限的逆向时间优先花在更可能有价值的目标上。
自动枚举 APK 中的:
lib/arm64-v8a/*.so
支持提取和统计:
- ELF 文件头校验
- Program Header / Section Header
.text / .rodata / .data / .init_array.dynsym / .dynstr- 导入符号 / 导出符号
- 可执行段熵
- 大块高熵数据
- 是否裁剪符号表(strip)
对 .text 或可执行段进行线性反汇编,统计:
- 分支密度
- 间接跳转密度
- 算术 / 逻辑 / 比较类指令密度
用于辅助判断:
- 疑似 OLLVM
- 疑似强控制流混淆
- 疑似自定义保护逻辑
有些 APK 里的 .so 条目,实际上并不是裸 ELF,而是 ZIP 容器或二次包装资源。
ObfuScan 支持:
- 识别 ZIP 伪装 SO
- 自动尝试提取内层 ELF
- 对内层 ELF 继续分析
对高风险 SO,会进一步尝试预览:
ELF入口.init_arrayJNI_OnLoadJava_*- 名称中包含
init / load / register的导出函数
输出形式尽量保持简洁,方便快速人工判断。
默认输出为中文简洁结果,重点展示:
- SO 文件名
- 检测结果
- 风险等级
- 说明
- 可疑点
- 关键入口预览(高风险样本)
- 建议
适合在大量样本里先看重点,而不是一上来就被技术细节淹没。
这个工具更适合下面这些任务:
- 逆向分析前,先筛出值得看的一批 SO
- 安全审计前,先找“可能藏逻辑 / 藏保护 / 藏入口”的目标
- 从几百个 Native 库中快速找出更高价值的样本
- 对 APK 的 Native 层做第一轮快速体检
ObfuScan 不适合拿来做这些事情:
- 精确还原完整 CFG
- 精确恢复函数边界
- 自动还原 VMP 逻辑
- 自动还原壳 / VM / handler 细节
- 替代 IDA / Ghidra / 动态调试器
它更像是:
“真正开始逆向之前的筛选器”
而不是“逆向工作的终点”。
通常可以按这个思路理解:
优先看。
这类目标往往更可能存在:
- 加壳 / loader
- 强混淆
- 可疑初始化逻辑
- 异常入口
- 值得深入跟踪的保护层
有一定可疑度,但未必真有强保护。
适合结合具体业务背景决定是否深入。
通常更像普通发布版本、基础库、轻度混淆样本。
一般不作为第一优先级。
目前来看,高风险样本的筛选价值相对更高。
它的定位不是“百分百准确分类”,而是:
尽量把更值得逆向的人先排到前面。
在这个意义上,高风险结果通常更有参考价值。
VMP 检测目前只是启发式参考,不保证准确。
原因很简单:
- 各种自研 VM 差异很大
- 一些强混淆、壳、linker 逻辑也会出现类似特征
- 静态线性反汇编本身就有局限
- 没有做完整的 dispatcher / handler / bytecode 数据流恢复
所以当前版本里:
- “疑似 VMP” = 值得重点看
- 不等于已经确认是 VMP
- “未见明显 VMP 特征” 也不等于绝对没有 VMP
建议把它理解为:
一个帮助你优先级排序的辅助信号
而不是最终结论。
实际工作里,我更推荐这样用:
- 先用 ObfuScan 扫 APK
- 重点看高风险样本
- 再看这些高风险样本的入口预览
- 选出最值得深入的几个 SO
- 再进入:
- IDA / Ghidra
- Frida / 自研 JNI 监控
- 动态跟踪 / 断点调试
- CFG / dispatcher / handler 深挖
这样通常会比一开始盲开几十上百个 SO 更省时间。
- 主要面向 Android 64 位 AArch64 SO
- 不是完整反编译器
- OLLVM / 强混淆判断是启发式
- VMP 检测目前精度有限
- 对某些非常规壳 / 自研 VM / 深度伪装样本可能漏报或误报
- 当前更偏向“前置筛选”而不是“最终定性”
后面可能继续完善的方向包括:
- 接入AI
- 更稳的入口函数深挖
- 更细的 dispatcher / handler 识别
- 基本块切分
- 更强的 OLLVM / flatten 检测
- 更严格的 VMP 结构级识别
- 更详细的可选 verbose 输出
- 批量 APK 目录扫描
这个工具更适合:
- 做 Android Native 逆向的人
- 做 APK 安全审计的人
- 需要批量初筛 SO 的研究人员
- 想先快速找高价值目标,再投入深度分析的人
这个项目的核心思想很简单:
在真正开始逆向之前,先帮你找到更值得逆向的目标。
如果它能帮你把“本来要花在 100 个普通 SO 上的时间”,
提前集中到那几个真正值得看的目标上,那它就已经完成任务了。
感谢以下项目 / 工具:
- GPT
- Capstone
- miniz