被编译器处理过的代码和资源已经打包成了APK,有的甚至被转化成了二进制文件。但是我们也有一些方法,把这些编译过的内容给变回原来的样子,这个过程叫做-反编译。
反编译分为两个部分:一个是资源文件,一个是java文件。so文件是c++编译的结果,可以认为是不可反编译的(反编译成汇编指令,估计大部分人也看不懂)。
APK tool是反编译的有力工具,据说是谷歌提供的官方的反编译工具,可以把APK目录解包,资源文件全部还原成编译前的样子,而dex文件反编译成smail格式的文件(而不是我们希望的java原文件)。smail格式文件是安卓系统的虚拟机执行时使用的语法,我们不会去讲解这部分内容。
APKTool
的最新版本;2. 在官网下载与`APKTool`配套的[脚本文件-apktool.bat](https://raw.githubusercontent.com/iBotPeaches/Apktool/master/scripts/windows/apktool.bat),其内容如下;
@echo off
if "%PATH_BASE%" == "" set PATH_BASE=%PATH%
set PATH=%CD%;%PATH_BASE%;
java -jar -Duser.language=en "%~dp0\apktool.jar" %1 %2 %3 %4 %5 %6 %7 %8 %9
不过该脚本有一个小小的问题-需要去掉apktool.jar
前面的一个\
;下载完成后用文本编辑器打开该脚本,将这一段修改成,
@echo off
if "%PATH_BASE%" == "" set PATH_BASE=%PATH%
set PATH=%CD%;%PATH_BASE%;
java -jar -Duser.language=en "%~dp0apktool.jar" %1 %2 %3 %4 %5 %6 %7 %8 %9
3. 将下载的APKTool压缩包解压,与脚本文件一起放到你希望存放的目录下,例如`D:\Work\apktool`;
4. 为了使用方便,将存放目录加入到系统的环境变量中; `我的电脑`点击右键->`属性`->`高级系统设置`->`环境变量`,选中`Path`这一项,进行编辑;
5. 启动`cmd命令行窗口`,输入`apktool -version`,如果看到类似如下内容就说明安装成功了;
$ apktool -version
2.0.3
至此,APKTool就安装并设置完成了。
如果无法访问官网下载,请上安豆网,下载最新的版本。
接下来开始使用APKTool,
1. 启动cmd命令行窗口
;
2. 假设apk放在D:\Test.apk目录,输入
apktool d D:\Test.apk,开始反编译
Test.apk`;
$ apktool d D:\Test.apk
I: Using Apktool 2.0.3 on Test.apk
I: Loading resource table...
I: Decoding AndroidManifest.xml with resources...
I: Loading resource table from file: C:\Users\Gym\apktool\framework\1.apk
I: Regular manifest package...
I: Decoding file-resources...
I: Decoding values */* XMLs...
I: Baksmaling classes.dex...
I: Copying assets and libs...
I: Copying unknown files...
I: Copying original files...
3. 编译的结果就在cmd命令行窗口
启动的位置下,反编译的目录结构如下,
现在打开res目录下的资源都被还原了,打开后就能看到原始的设计;而java源码被反编译成了smli格式的文件。
1. 在官网下载[dex2jar](http://sourceforge.net/projects/dex2jar/files/)工具,它可以把APK中的dex文件转化成jar文件;
2. 下载完成后,将压缩包解压,放到你希望存放的目录下,例如`D:\Work\dex2jar`;
3. 为了使用方便,将存放目录加入到系统的环境变量中;
4. 在官网下载[JD-GUI](http://jd.benow.ca/),它可以查看jar文件的java源码;
5. 下载完成后,将压缩包解压,放到你希望存放的目录下,例如`D:\Work\jd-gui`;
1. 解压APK文件,找到Android软件安装包中的`class.dex`;
2. 用dex2jar工具将classes.dex生成jar文件;启动`cmd命令行窗口`,输入`d2j-dex2jar D:\classes.dex`,开始反编译`classes.dex`,`d2j-dex2jar`后面需要跟上要反编译的dex文件路径;
$ d2j-dex2jar D:\classes.dex
dex2jar classes.dex -> .\classes-dex2jar.jar
结果生成了classes-dex2jar.jar
文件;
3. 进入JD-GUI目录,运行JD-GUI工具,打开上面的生成的jar文件,即可看到java源代码。