工具
Simplify Android 反混淆工具
基于 smalivm 的通用 Android 反混淆工具。smalivm 是一个沙箱化的 Dalvik 虚拟机,会逐个执行方法并记录所有执行路径上可能的寄存器与类取值;遇到文件或网络输入等未知值时,两个分支都会执行。Simplify 随后对 APK 或 DEX 反复进行常量传播、死代码删除、反射还原和窥孔优化,可在保持行为不变的前提下解密字符串、去除反射;它不会重命名类或方法。smalivm 也可作为库使用,最新发布版还附带基于它的单步 Smali 调试器 sdbg。
使用条件与局限
- 项目已不再活跃:最新发布版 v1.3.0 于 2020-03-30 发布,提供 simplify、smalivm 和 sdbg 三个 jar;所审阅的 master 分支提交日期为 2021-05-23。项目固定使用 smali/dexlib2 2.4.0,默认以 android-25 的类构建 Android 框架参考,因此分析使用较新 DEX 或 API 特性的应用时应核对结果。
- 使用方式是对使用者自备的 APK 或 DEX 运行 java -jar simplify.jar。构建需要 JDK 8,需递归克隆 AndroidFrameworkSmali 子模块以获取参考框架类,并执行 Gradle 的 fatjar 任务。每个方法的执行受访问次数、调用深度和时间限制;README 建议对大型应用用包含与排除模式缩小范围,输出 DEX 默认 API 级别为 15。
- --remove-weak 默认开启,即使代码存在弱副作用也会删除;--ignore-errors 可能导致意外结果,因此应将输出与原始代码对照。仓库附带项目提供的混淆示例应用用于测试;测试曾通过使用 Oracle JDK 8 的 Travis CI 配置运行,仓库没有 GitHub Actions 工作流,本次审阅未运行任何内容。
- 采用双重许可:开源用途适用 GPL-3.0,或选择允许分发二进制但禁止再分发源码的商业许可。Android 框架类和各依赖保留各自条款。所审来源未确立与 REA 的关联。
关于此条目
- 类型
- 工具
- 类别
- Android 工具
- 关联
- 基础工具
- 目标
- 应用
来源复核于
说明已依据一手来源复核;这不代表已运行验证、经过安全审计或确认兼容。
一手来源
- README.md GitHub · CalebFenton/simplify · 修订 29fb25d
- LICENSE.GPL GitHub · CalebFenton/simplify · 修订 29fb25d
- LICENSE.COMMERCIAL GitHub · CalebFenton/simplify · 修订 29fb25d
- .gitmodules GitHub · CalebFenton/simplify · 修订 29fb25d
- .travis.yml GitHub · CalebFenton/simplify · 修订 29fb25d
- smalivm/build.gradle GitHub · CalebFenton/simplify · 修订 29fb25d
- https://github.com/CalebFenton/simplify/releases/tag/v1.3.0