What? Why decompilate the application?!!!无非是想看,想要,想得到。
之前做过反编译apk文件的,原本想的就是应该做下总结的,后来。。。不知道后来发生了什么,一定不是因为我懒了。总之,今天领导让我研究下一个口碑比较好的app,看下它某个功能怎么实现的,用的什么技术,又扒拉了半天才找好工具去查看,就觉得还是有必要做个总结的。废话少说,下面开始:
此次主要用到了三个工具,dex2jar,JD-GUI,apktool,其实还有一个windows下的批处理工具,最近已经和apktool打包到一起了,下面说说这几个工具具体怎么用。
先附上下载地址,以免你们像我一样又找了好久:
dex2jar下载链接: https://pan.baidu.com/s/13_IKg7AMBOzfeUbSNOsCPw 密码: 4f83
JD-GUI下载链接: https://pan.baidu.com/s/17zTC28C7oDKmUpvmb9eBnQ 密码: 4fmi
apktool下载链接: https://pan.baidu.com/s/1xECSBEvcVSbi7EBqz7T_VA 密码: qsij
三个工具一起打包下载地址http://download.csdn.net/download/yeluofengchui/10272356
以上地址长期有效,如果下载失败请私信我或者下面留言。
另附一个不通平台的apktool的下载地址:https://ibotpeaches.github.io/Apktool/install/
第一步:首先呢,拿到一个apk直接拿解压缩工具解压了,就能看到如下图所示的工程目录结构
lib下有引用的三方类库(.so资源),.java代码和.jar中的代码都被压缩到了classes.dex中了,res和assets中有想要的资源等。这个时候去打开AndroidManifest或者res中的layout、string等.xml资源,一定会看到一堆乱码,这个时候我们需要用到的是apktool。
第二,使用apktool反编译xml文件
将下载的apktool压缩包解压出来的三个文件aapt.exe,apktool.bat,apktool.jar放到同一个文件夹,把这个文件夹也放到系统盘的根目录中并把这个目录加到path变量中。PS:其实放哪里都行,重点是添加到系统的环境变量中方便调用;另外,这些文件夹包括后面其它文件的目录,都要采用英文,以免不必要的麻烦。在DOS命令行中输入:apktool d xx\yy.apk yy,得到yy文件夹,此文件夹中的xml文件就是编译好的可以正常查看的文件。包括strings.xm,AndroidManifest.xml等文件都可以正常查看了。
第三,使用dex2jar反编译dex文件
下载的dex2jar的压缩包解压后,会发现这个压缩包里可不止dex2jar,还有jar2dex的反向编译等工具,
然后,也将这个文件夹目录加到系统path变量中,就可以直接用:dex2jar.bat或dex2jar.sh转换dex文件了。
DOS行命令如下:d2j-dex2jar.bat xx\classes.dex(xx是classes.dex文件所在的路径)。
生成的jar如图所示
然后反编译jar包
得到jar包后,下载自已喜欢的反编译工具,推荐使用JD-GUI,有比较简单的图形界面,可以反编译单个class文件,也可以反编译jar包,比较方便。
打开压缩文件JD-GUI,运行jd-gui.exe,打开上面生成的jar包,即可看到源代码了。截图如下: