反编译 APK

Android逆向

反编译APK

工具介绍

如果只是想拿到apk中的图片资源,只需要将apk后缀改为zip然后解压缩,res目录中就包含了所有的资源文件

classes.dex 则包含了所有的代码,只是还无法查看

AndroidManifest.xml 文件打开会发现无法阅读,都是16进制数

此时就需要用到工具 —— ApkTool

ApkTool

下载

ApkTool官网

安装

使用
1
apktool d xxx.apk

d 表示 decode

还可以加上一些附加参数来控制 decode 行为:

-f :如果目标文件夹已存在,则强制删除现有文件夹(默认如果目标文件夹已存在,则解码失败)

-o :指定解码目标文件夹的名称(默认使用 APK 文件的名字来命名目标文件夹)

-s :不反编译dex文件,也就是说 classes.dex 文件会被保留(默认会将 dex 文件解码成 smali 文件)

-r :不反编译资源文件,也就是说 resources.arsc 文件会被保留(默认会将 resources.arsc 解码成具体的资源文件)

反编译之后会得到以下内容:

  • 1、AndroidManifest.xml:经过反编译还原后的 manifest 文件
  • 2、original 文件夹:存放了未经反编译过、原始的 AndroidManifest.xml 文件
  • 3、res 文件夹:存放了反编译出来的所有资源
  • 4、smali 文件夹:存放了反编译出来的所有代码,只不过格式都是.smali类型的

xml文件已经可以看懂了,不过 smali 类型文件我们依然无法阅读

此时,需要用到另一个工具 —— dex2jar + jd-gui

dex2jar

功能

将 dex 转换成 jar 形式文件

下载

dex2jar官网

使用

将下载的 dex2jar 压缩包解压后,可以看到以下内容

windows上使用dex2jar.bat即可

1
dex2jar.bat classes.dex路径

看到上述console则表示成功

代码都位于 classes-dex2jar.jar 中

现在需要用到另一款工具 jd-gui

jd-gui

下载

jd-gui官网

根据需要下载对应包即可

使用

image-20250327145549112

解压到本地,双击jd-gui.exe文件即可运行

用jd-gui打开之前解压出来的dex文件即可看到所有的源码