1. 反编译概述
- 反编译属于逆向工程中的一种
- 常见的三种反编译工具
- apktool: http://ibotpeaches.github.io/Apktool/
- dex2jar: https://github.com/pxb1988/dex2jar
- jd-gui: http://jd.benow.ca/
2. 使用 dex2jar 和 jd-gui 反编译 apk
- Dex2jar 是一个将 dex 文件转换为 jar 包的命令行工具,dex 文件来源于 apk,将 apk 通过 zip 包的方式解压缩即可提取出里面的 dex 文件
- Jd-gui 是图形化工具,因为 jar 包中都是 class 文件,所以还需要 jd-gui 将 jar 包进一步转换为 Java 代码
3. 使用 apktool 对 apk 进行二次打包
- 通过 dex2jar 和 jd-gui 可以将一个 dex 文件反编译为 Java 代码,但是它们无法反编译出 apk 中的二进制数据资源,但是采用 apktool 就可以做到这一点
- apktool 是一个命令行工具,它的另外一个常见的用途是二次打包,也就是常见的山寨版应用,但这是一种不被提倡的行为,甚至是违法的
- 通过 apktool 解包以后,可以查看到 apk 中的资源以及 smali 文件,smali 文件是 dex 文件反编译(不同于 dex2jar 的反编译过程)的结果
- smali 有自己的语法并且可以修改,修改后可以被二次打包为 apk,通过这种方式就可以修改 apk 的执行逻辑及绕过签名校验,显然这让山寨版应用变得十分危险
- apk 经过二次打包后并不能直接安装,必须要经过签名后才能安装