第一步:解压 apk
将 apk
解压,在解压后的文件夹中可以找到 classes.dex
文件。(除了 classes.dex
文件,可能还会有 classes2.dex
, classes3.dex
等等,本文以 classes.dex
为例,对其他几个 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

执行命令后,生成的 classes-dex2jar.jar
就是我们需要的 jar
文件。
第三步:查看 jar
文件
使用 Luyten
工具查看 jar
文件,就能看到反编译后的源码了。
Luyten
工具下载:https://github.com/deathmarine/Luyten/releases

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

这就是反编译 apk
的基本操作了。
附:利用 Cmder
设置别名实现一个命令反编译 apk
Cmder
是一个非常好用的命令行工具。
效果如下:

只需要执行 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
中。 -
apk2jar2
和apk2jar3
用于操作classes2.dex
和classes3.dex
文件。
网友评论