工程化专栏——Mac环境下apk包反编译
该篇文章参考了其他博主的一些内容,并结合自身的实践进行总结记录,作为资料,方便后续的查阅。
一、准备工具
1、dex2jar:把dex文件转换成jar文件,下载链接:https://sourceforge.net/projects/dex2jar/
2、jd-gui:把jar文件转换成java文件,下载链接:http://java-decompiler.github.io/
3、apktool:apk逆向工具,将apk包中的资源文件解析出来。下载链接:https://ibotpeaches.github.io/Apktool/install/
二、反编译代码
1、首先解压dex-tool-2.0.zip得到dex2jar-2.0文件夹,
mac环境下需要的三个文件是 d2j_invoke.sh、d2j-dex2jar.sh、lib,他们在同一目录级别。

2、将apk文件的后缀改为zip并解压,然后将classes.dex文件移动到dex2jar-2.0的文件夹目录下,即与上述三个文件统一目录。

3、打开终端cd 到该目录下输入命令:

给这两个文件添加可执行权限。然后输入命令:

这时候就会在dex2jar-2.0目录下生成一个classes-dexjar.jar文件

4打开jd-gui-osx,使用JD-GUI.app打开classes-dexjar.jar即可。


三、反编译资源:
1、打开 wrapper script,将里面的内容拷贝到新的txt中,并命名为apktool.sh


2、下载apktool.jar,选择最新版本即可,下载完成后,将jar包命名为apktool.jar


3、将apktool.sh和apktool.jar放在同一个目录。

4、将apk文件移动到与上述两个文件相同的目录,终端cd到该目录,执行命令:

5、结束以后,就会多出一个xxx的文件夹,内容如下:

三、反编译资源映射文件:
R.class文件中的资源ID经过混淆后,需要通过反编译resources.arsc才能找到与之映射的资源文件名称。
1、R.class中的资源id = 2130843560,对应16进制为0x7F0217A8。

2、执行aapt d resources XXX.apk命令进行反编译,将反编译结果输出到文本中
aapt d resources /Users/bug处理/反编译工具/release_qidian_android_3.7.0.apk > a.txt
查询0x7F0217A8,就可以找到对应的文件名称了
