通用Android反混淆器
Android程序代码混淆是Android开发者经常用来防止app被反编译之后迅速被分析的常见手法。在没有混淆的代码中,被反编译的Android程序极其容易被分析与逆向,分析利器JEB就是一个很好的工具。但是加了混淆之后,函数、变量的名称将被毫无意义的字母替代,这将大大提高分析的难度。
Simplify安卓反混淆工具实际上是通过执行一个APP来解读其行为,随后尝试通过优化代码来实现行为一致。该安卓反混淆工具思路清晰,代码风格好,值得深入学习与优化。下图是在使用该工具前后,反编译代码的对比图。
该项目有三个部分组成
- smalivm:提供用于执行Dalvik方法的虚拟机沙箱。执行方法后,它返回一个包含每个执行路径的所有可能寄存器和类值的图形。即使某些值未知,它也可以工作,例如文件和网络I / O. 例如,任何
if
或switch
具有未知值的条件都会导致两个分支被占用。 - simplify:从smalivm分析执行图并应用优化,如常量传播,死代码删除,非反射和一些窥孔优化。这些非常简单,但是当重复应用时,它们将解密字符串,删除反射,并大大简化代码。它不重命名方法和类。
- demoapp:包含在您自己的项目中使用smalivm的简单,评论很多的示例。如果您正在构建需要执行Dalvik代码的内容,请查看它。
Simplify Android反混淆安装
构建需要安装Java Development Kit 8(JDK)。
因为这个项目包含Android框架的子模块,所以要克隆--recursive
:
1 |
git clone --recursive https://github.com/CalebFenton/simplify.git |
或者随时更新子模块:
1 |
git submodule update --init --recursive |
然后,构建一个包含所有依赖项的jar:
1 |
./gradlew fatjar |
在成功执行之后,Simplify.jar
应该出现在simplify/build/libs/simplify.jar
这里,接着你可以使用以下命令行测试Simplify.jar
是否安装成功
1 |
java -jar simplify/build/libs/simplify.jar -it 'org/cf/obfuscated' -et 'MainActivity' simplify/obfuscated-app.apk |
Simplify Android反混淆 使用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
usage: java -jar simplify.jar <input> [options] deobfuscates a dalvik executable -et,--exclude-types <pattern> Exclude classes and methods which include REGEX, eg: "com/android", applied after include-types -h,--help Display this message -ie,--ignore-errors Ignore errors while executing and optimizing methods. This may lead to unexpected behavior. --include-support Attempt to execute and optimize classes in Android support library packages, default: false -it,--include-types <pattern> Limit execution to classes and methods which include REGEX, eg: ";->targetMethod\(" --max-address-visits <N> Give up executing a method after visiting the same address N times, limits loops, default: 10000 --max-call-depth <N> Do not call methods after reaching a call depth of N, limits recursion and long method chains, default: 50 --max-execution-time <N> Give up executing a method after N seconds, default: 300 --max-method-visits <N> Give up executing a method after executing N instructions in that method, default: 1000000 --max-passes <N> Do not run optimizers on a method more than N times, default: 100 -o,--output <file> Output simplified input to FILE --output-api-level <LEVEL> Set output DEX API compatibility to LEVEL, default: 15 -q,--quiet Be quiet --remove-weak Remove code even if there are weak side effects, default: true -v,--verbose <LEVEL> Set verbosity to LEVEL, default: 0 |
原文连接:Simplify:一款通用Android反混淆器
所有媒体,可在保留署名、
原文连接
的情况下转载,若非则不得使用我方内容。