Android APK 反编译学习

Android APK 反编译学习
雨落幽篁相关博客:
Android 逆向系列(一):反编译 APK 技术完全解析 - 掘金
Mac电脑安装apktool工具包_apktool mac-CSDN博客
apktool:
作用:
反编译 APK 中的资源,可以看到 AndroidManifest.xml
文件和 activity_main.xml
文件中的代码;
例如:AndroidManifest.xml
反编译前后对比;(当然也可以直接拖到 Android studio
中查看)
安装
参考下载页面中的描述进行操作,我的电脑是 Mac ,所以就记录 Mac 的安装方式;
- 点击 wrapper script,复制其中的内容到文本编辑器中,然后重新命名为 apktool (记住不要后缀.sh,点击看这个文件的简介中 名称与扩展名中也不要设置.sh 后缀)
- 点击 latest version 下载最新的 apktool2.jar 包,下载完成后修改文件名为 apktool.jar
- 然后将上面两个文件,拖进/usr/local/bin 目录中
- 给这两个文件添加可执行权限,命令chmod a+x filePath。
打开命令输入chmod a+x
后直接将文件拖拽至命令中 - 然后终端输入 apktool,如果出现一些版本信息,那就说明成功了
使用
apktool d -f apk_path -o flod_path
其他命令:
-f :如果目标文件夹已存在,则强制删除现有文件夹(默认如果目标文件夹已存在,则解码失败)
-o :指定解码目标文件夹的名称(默认使用 APK 文件的名字来命名目标文件夹)
-s :不反编译dex文件,也就是说 classes.dex
文件会被保留(默认会将 dex 文件解码成 smali 文件)
-r :不反编译资源文件,也就是说 resources.arsc
文件会被保留(默认会将 resources.arsc
解码成具体的资源文件)
反编译完成后的文件夹说明:
AndroidManifest.xml
:经过反编译还原后的 manifest 文件- original 文件夹:存放了未经反编译过、原始的 AndroidManifest.xml 文件
- res 文件夹:存放了反编译出来的所有资源
- smali 文件夹:存放了反编译出来的所有代码,只不过格式都是.smali类型的
dex2jar
作用
作用:将 dex 文件转换成 jar 文件
安装
下载链接:dex2jar - Browse Files at SourceForge.net
使用
- 将 APK 改成 zip 格式的,然后将其中的 dex 文件放到 上面下载的 dex2jar-2.0 文件夹中;
- 然后执行
cd dex2jar-2.0
#进入 dex2jar-2.0 文件夹下
sh d2j-dex2jar.sh classes.dex
# 执行 sh 脚本
如果出现 Permission denied 报错提示,就执行下面命令
chmod 777 d2j_invoke.sh
然后再执行 sh 脚本;
执行成功就会看到 dex2jar-2.0 文件夹中多出一个 classes-dex2jar.jar
文件;
其中 dex 文件中的代码就都是在这个 jar 文件中,接下来就需要使用 jd-gui 去查看 jar 包下的内容;
jd-gui
作用
作用:查看 jar 包里面的具体内容
安装
下载地址:Java Decompiler
- 下载 Mac 版本,然后解压;
- 双击打开 JD-GUI,会出现如下图的报错提示;
这是因为 universalJavaApplicationStub.sh
脚本在 Mac Big Sur 及以上版本有兼容性问题,我们需要对这个脚本的内容进行替换。
解决步骤:
- 双击 JD-GUI 显示包内容
- 根据截图找到
universalJavaApplicationStub.sh
- 将此文件内容替换为 universalJavaApplicationStub 这个链接中的内容;
注意:安装之前你要保证系统已经安装了 JDK 1.8 及以上版本
然后可以再双击 JD-GUI,发现可以打开了;
接着将需要打开的 jar 包给拖进去,就可以查看代码了;
阶段性小结:
1、如果要反编译 app 的代码,就使用 dex2jar + jd-gui
2、如果要反编译 app 的资源,就使用 apktool (这个我觉得直接拖到 A android studio 更方便)