准备工具:
- Android Studio
- apktool
- dex-tools
- jd_gui
工具默认各位看官都以自备。我这只有apktool,dex-tools,jd-gui。反编译工具下载地址
反编译
我知道的反编译方式主要有两种:
一、直接通过apktool命令反编译apk
二、将apk后缀名改为zip,直接解压,通过jd-gui工具查看。
先说第一种用apktool命令反编译,新建一个Test文件夹,将要反编译的app-release.apk放进去。
1、打开终端,cd到Test目录。
2、再执行apktool d app-release.apk。执行完后,Test目录下就回多一个app-release文件夹。
打开Test文件夹大概可以看到以下文件
AndroidManifest.xml就是对应我们项目里的清单文件。
res目录里就是我们项目里的资源文件。
smail里面就是我们项目的代码。
我的项目代码路径是com/example/studydemo。因此我就可以在smali文件里找到我自己写的代码的路径。
我们可以通过Android Studio打开app-release文件夹。打开Android Studio,file -> open -> 选择./Test/app-release文件夹 -> open
用Android Studio打开,我们就可以查看别人的代码逻辑了,不过我们的java或者kotlin代码都被解析成了smali语法,若想读懂还需要对smali语法有一定的了解,我还知之甚少,这里就不献丑了。
这就是通过apktool命令进行反编译的方式。
接下来说说第二种反编译方式,这里还是在Test文件里对app-release.apk进行反编译。为了保留原文件,这里我将原apk复制了一份,并将文件名改为app-release2.zip。直接对该zip文件进行解压,得到app-release2文件夹。
AndroidManifest.xml就是对应我们项目里的清单文件。
res目录里就是我们项目里的资源文件。
classes.dex文件就是可执行文件,我们需要通过dex-tools,将该文件转换成jar文件。
先将classes.dex文件复制到dex2jar-2.0(这个文件是dex-tools-2.0.zip解压得到的)文件夹中,在终端中cd到dex2jar-2.0目录,执行sh d2j-dex2jar.sh classes.dex命令,执行后,就可以看到dex2jar-2.0目录下多了classes-dex2jar.jar文件。
再打开jd-gui-osx-1.6.6(这个文件是jd-gui-osx-1.6.6.zip解压得到的)文件夹中的JD-GUI。
在JD-GUI中file -> open file -> 选择dex2jar-2.0目录下的classes-dex2jar.jar文件 -> 打开
打开之后,同样也能找到com.example.studydemo文件夹,里面就是我们的代码
通过JD-GUI查看代码,更加容易看懂一些,只不过一般代码都会混淆处理,需要花点时间去捋清代码逻辑。
这就是通过jd-gui工具的方式反编译。
在下学艺不精,如有不足,请各位看官海涵。