需要用到的工具:
apktool:https://ibotpeaches.github.io/Apktool/
jd-jui:http://jd.benow.ca/
dex2jar:https://github.com/pxb1988/dex2jar
首先来简单的说明下Apk文件本质上其实是一个zip包。我们直接进行解压就能看到其中的目录。
目录说明
- AndroidManifest.xml:应用的全局配置文件
- classes.dex:源代码编译成class后,转成jar,再压缩成dex文件,dex是可以直接在Android虚拟机上运行的文件。
- lib文件夹:引用的第三方sdk的so文件。
- META-INF文件夹:Apk签名文件。
- res文件夹:资源文件,包括了布局、图片等等。
- resources.arsc:记录资源文件和资源id的映射关系。
- 其中还有一个没有显示就是→assets文件夹:原始资源文件夹,对应着Android工程的assets文件夹,一般用于存放原始的网页、音频等等。
上述的这些说明 简单的说明了一个apk基本包含的东西,直接把apk解压是没有办法进行阅读的,在打包这个过程中经过了build-tools处理了。
其实反编译Apk的目的就是Apk拆成我们可以阅读的文件。通过反编译,我们一般想要得到里面的AndroidManifest.xml文件、res文件和java代码。
我将介绍3个工具来对apk进行反编译
1、反编译java代码首先需要下载dex2jar这个工具,下载地址:sourceforge.net/projects/de…
2、将要反编译的apk文件重命名为zip格式并解压缩,注意其中的classes.dex文件,它存放了全部的java代码,将classes.dex文件拷贝到dex2jar解压后的根目录下。
3、打开cmd,进入dex2jar解压后的根目录,执行命令:
d2j-dex2jar classes.dex
命令执行完后在对应目录下会生成classes-dex2jar.jar文件
二、反编译资源
Apktool: ps://ibotpeaches.github.io/Apktool/cmd到当前目录下面,并且把自己 .apk放到当前同级目录下面,执行如下命令:
java -jar apktool_2.3.1.jar d ApkName.apk
其中,res文件夹下存放的是反编译出来的所有资源,smali文件夹下存放的是反编译出来的所有代码,AndroidManifest.xml则是经过反编译还原后的manifest文件。smali文件夹下的文件smali文件使用的是Android虚拟机所使用的寄存器语言,如果看的懂smail文件的话,就可以修改源代码的逻辑了,好可怕的事...当然这不是我们重点讨论的。
此时查看AndroidManifest.xml文件,发现已经成功反编译出来了:
AndroidManifest.xml