工具

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 工具
关联
基础工具
目标
应用

来源复核于

说明已依据一手来源复核;这不代表已运行验证、经过安全审计或确认兼容。

一手来源

  1. README.md GitHub · CalebFenton/simplify · 修订 29fb25d
  2. LICENSE.GPL GitHub · CalebFenton/simplify · 修订 29fb25d
  3. LICENSE.COMMERCIAL GitHub · CalebFenton/simplify · 修订 29fb25d
  4. .gitmodules GitHub · CalebFenton/simplify · 修订 29fb25d
  5. .travis.yml GitHub · CalebFenton/simplify · 修订 29fb25d
  6. smalivm/build.gradle GitHub · CalebFenton/simplify · 修订 29fb25d
  7. https://github.com/CalebFenton/simplify/releases/tag/v1.3.0