Simplify:一款通用Android反混淆器

通用Android反混淆器

Android程序代码混淆是Android开发者经常用来防止app被反编译之后迅速被分析的常见手法。在没有混淆的代码中,被反编译的Android程序极其容易被分析与逆向,分析利器JEB就是一个很好的工具。但是加了混淆之后,函数、变量的名称将被毫无意义的字母替代,这将大大提高分析的难度。

Simplify安卓反混淆工具实际上是通过执行一个APP来解读其行为,随后尝试通过优化代码来实现行为一致。该安卓反混淆工具思路清晰,代码风格好,值得深入学习与优化。下图是在使用该工具前后,反编译代码的对比图。

Android反混淆器

该项目有三个部分组成

  1. smalivm:提供用于执行Dalvik方法的虚拟机沙箱。执行方法后,它返回一个包含每个执行路径的所有可能寄存器和类值的图形。即使某些值未知,它也可以工作,例如文件和网络I / O. 例如,任何ifswitch具有未知值的条件都会导致两个分支被占用。
  2. simplify:从smalivm分析执行图并应用优化,如常量传播,死代码删除,非反射和一些窥孔优化。这些非常简单,但是当重复应用时,它们将解密字符串,删除反射,并大大简化代码。它重命名方法和类。
  3. demoapp:包含在您自己的项目中使用smalivm的简单,评论很多的示例。如果您正在构建需要执行Dalvik代码的内容,请查看它。

Simplify Android反混淆安装

构建需要安装Java Development Kit 8(JDK)。

因为这个项目包含Android框架的子模块,所以要克隆--recursive

或者随时更新子模块:

然后,构建一个包含所有依赖项的jar:

在成功执行之后,Simplify.jar 应该出现在simplify/build/libs/simplify.jar这里,接着你可以使用以下命令行测试Simplify.jar是否安装成功

Simplify Android反混淆 使用

项目地址:https://github.com/CalebFenton/simplify