反编译 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文件即可看到所有的源码

jadx-gui

一个更强大的工具,一款出色的 **反编译工具 **和 代码查看器,但不能直接编辑 APK 文件或内部代码

使用 Jadx-GUI 打开一个apk文件时,它会根据 Dalvik 字节码(DEX文件)反编译成可读的 Java 源代码,然而,这些源代码只是 Jadx 根据字节码猜测出来的,并不是原始的、可变翼德Java源文件,因此,无法直接在 Jadx-GUI 中修改这些反编译出来的 Java 代码。

下载

Jadx-GUI

使用起来也很简单,打开exe文件

然后点击打开文件/打开项目或者将apk文件直接拖拽过来即可查看;