免责声明
我花了大量的私人时间替专案研究 App 是否混淆成功,混淆结果是否达到需求。虽然我只会做简单的反组译跟实际上能达到商业需求的程度相比根本不值得一提,不过我还是想将笔记与大家分享,因此看完此篇而做任何事情与我本人无关,不过还是希望不要做违法的事情。
前情提要
根据Shrink, obfuscate, and optimize your app文章,启用 minifyEnabled 可以缩小、优化 App 顺便混淆程式码。
如何验证成功启用 minifyEnabled
要检验 minifyEnabled
启用,就得反组译 App。
启用与未启用对照图


根据上图可以发现未启用的程式码一览无遗,而启用后的程式码、Package、Path、Class、Method、Field 都被英文字母取代
反组译 4 步骤
第一步 - 取得 Apk
取得 Apk 有3种方式
从手机端系统
取得把 App 在 Google Play 商店的网址丢给第三方解析
。ex.apkpure从开发者端打包
取得而开发者端打包格式有两种:ApkAAB(不讨论)
第二步 - 取得 classes.dex
把 Apk 副档名改成 Zip 副档名,并解压缩取 classes.dex



第三步 - 打包成 Jar 档
为什么需要再次打包成 Jar 档? 为了阅读 smali 代码
根据 Android App 反组译流程(上) 文章表示
关于 Smali ,在 Android 官网中并无相关介绍,它应该出自 JesusFreke 的开源项目 smali。smali/baksmali 是针对 dalvik 使用的 dex 格式的彙编/反彙编器。它的语法基于 Jasmin's/dedexer,支持 dex 格式的所有功能(注释,调试信息,行信息等等)。因此我们可以认为 smali 和 Dalvik 字节码文件是等价的。事实上,Apktool 也正是调用这个工程生成的 jar 包来进行反编译生成 smali 代码的。对生成的 smali 代码进行修改之后再重打包,就可以修改 apk 中的逻辑了。因此,能阅读 smali 代码对我们进行 android 逆向十分重要。
使用 dex-tools-2.1-SNAPSHOT 工具打包
3-1 将 classes.dex 放入 dex-tools-2.1-SNAPSHOT 工具所在位置的资料夹当中

d2j-dex2jar classes.dex


网路上看到的资源都是使用 dex2jar-2.0 而不是 dex-tools-2.1-SNAPSHOT耶?
这两个是一样的东西,都是 pxb1988 的开源,我会使用 dex-tools-2.1-SNAPSHOT 是因为在使用 dex2jar-2.0 时发生错误。

第四步 - 使用 JD-GUI 观赏 Jar 里面的程式码
为什么不能直接解压缩 Jar 看呢? 因为有加密
使用 JD-GUI 观赏 Jar