Android 将 apk 反编译为源码

第一步:解压 apk

apk 解压,在解压后的文件夹中可以找到 classes.dex 文件。(除了 classes.dex 文件,可能还会有 classes2.dex, classes3.dex 等等,本文以 classes.dex 为例,对其他几个 dex 文件的操作是类似的)

unzip
classes.dex

第二步:将 dex 转换为 jar 文件

使用 dex2jar 工具,将 dex 文件转换为 jar 文件

dex2jar 工具下载:https://github.com/pxb1988/dex2jar/releases

使用方式:

dex2jar安装路径\dex2jar-2.1\dex-tools-2.1\d2j-dex2jar.bat classes.dex
dex to jar

执行命令后,生成的 classes-dex2jar.jar 就是我们需要的 jar 文件。

第三步:查看 jar 文件

使用 Luyten 工具查看 jar 文件,就能看到反编译后的源码了。

Luyten 工具下载:https://github.com/deathmarine/Luyten/releases

Luyten

本例中,classes.dex 文件中存储的是 android 的一些基础库,实际编写的源码在 classes3.dex 中,对 classes3.dex 执行第二步,查看生成的 classes3-dex2jar.jar 文件,可以看到如下内容:

Luyten

这就是反编译 apk 的基本操作了。

附:利用 Cmder 设置别名实现一个命令反编译 apk

Cmder 是一个非常好用的命令行工具。

效果如下:

apk2jar

只需要执行 apk2jar 命令,就可以实现把 apk 解压到 apk_ 文件夹中,并将 apk_ 文件夹中的 classes.dex 文件转换为 jar。原理就是通过 Cmder 添加别名,把上述的第一步和第二步中执行的命令行组合起来了。

Cmder 添加别名很简单,编辑 Cmder安装目录\config\user_aliases.cmd 文件,将别名添加到里面即可。本例添加的别名如下:

apk2jar=unzip -q -d $1_ $1 && d2j-dex2jar.bat -o $1_\classes.dex.jar $1_\classes.dex
apk2jar2=unzip -q -d $12_ $1 && d2j-dex2jar.bat -o $12_\classes2.dex.jar $12_\classes2.dex
apk2jar3=unzip -q -d $13_ $1 && d2j-dex2jar.bat -o $13_\classes3.dex.jar $13_\classes3.dex

其中:

  • unzip 用来解压,-q 表示 quiet,也就是不输出解压详情,$1 表示输入的第一个参数,这里我们将输入的 apk 文件名添加下划线 _ 作为解压后的文件夹名。
  • d2j-dex2jar.bat 用来将 dex 转换为 jar-o 表示 output,用于指定输出位置,这里我将输出文件指定为解压后的文件夹下的 classes.dex.jar,为了直接使用 d2j-dex2jar.bat 而不是全路径,我们需要将 d2j-dex2jar.bat 所在的文件夹添加到系统环境变量的 Path 中。
  • apk2jar2apk2jar3 用于操作 classes2.dexclasses3.dex 文件。

你可能感兴趣的:(Android 将 apk 反编译为源码)