Android 反编译需要用到以下几个工具:
Apktool: 这个工具的作用是:
It is a tool for reverse engineering 3rd party, closed, binary Android apps. It can decode resources to nearly original form and rebuild them after making some modifications; it makes possible to debug smali code step by step. Also it makes working with app easier because of project-like files structure and automation of some repetitive tasks like building apk, etc.
下载地址:https://bitbucket.org/iBotPeaches/apktool/src/master/
Dex2Jar地址:https://sourceforge.net/projects/dex2jar/
JDgui 地址:https://github.com/java-decompiler
一、Apk反编译工具及其使用方法
1.原理
学习反编译之前,建议先学习一下Apk打包的过程,明白打包完成后的Apk里面都有什么文件,各种文件都是怎么生成的。
这里有两篇AndroidWeekly中推荐过的好文章:
Apk技术也有非常多的技术可以学习,主要都是围绕着如何减小体积,如何提高打包速度展开,这里先不多说了。下面是一张基本的Apk文件结构图。
Apk文件本质上其实是一个zip包。直接拿解压工具解压就可以看到其中包含了什么。下面简单介绍一下Apk文件的结构。
-
AndroidManifest.xml:应用的全局配置文件
-
assets文件夹:原始资源文件夹,对应着Android工程的assets文件夹,一般用于存放原始的网页、音频等等,与res文件夹的区别这里不再赘述,可以参考上面介绍的两篇文章。
-
classes.dex:源代码编译成class后,转成jar,再压缩成dex文件,dex是可以直接在Android虚拟机上运行的文件。
-
lib文件夹:引用的第三方sdk的so文件。
-
META-INF文件夹:Apk签名文件。
-
res文件夹:资源文件,包括了布局、图片等等。
-
resources.arsc:记录资源文件和资源id的映射关系。
上面的截图中每个文件都是一个最基本的Apk
文件应该包含在内的。但是直接把Apk当做zip解压后的这些文件是没法直接阅读的,毕竟他们都是经过了build-tools打包工具处理过的。我们直接用文本编辑器打开这里面的Manifest文件看看。
反编译Apk的目的就是Apk拆成我们可以阅读的文件。通过反编译,我们一般想要得到里面的AndroidManifest.xml文件、res文件和java代码。
2.Apk反编译步骤
(1) ApkTool拆包,得到AndroidManifest和res等资源文件
工具下载地址: