一、工具准备
1.apktool
ApkTool下载地址:https://ibotpeaches.github.io/Apktool/install/,科学上网找到Installation for Apktool下载到apktool.bat(图1中Windows wrapper script)和apktoolx.x.x.jar(Windows下的find newest here)文件,改名为apktool.bat和apktool.jar。
图1 apktool下载
Apktool主要完成apk文件的打包和拆解(即build和decode,对应指令后的b和d),得到资源、smali(smali语言大概是davlik虚拟机的机器语言,未作深究)代码等各种文件。反编译指令为apktool d xxx.apk,而重新打包使用apktool b xxx(目录地址)。得到的文件默认放在同目录下,也可在命令中指定,具体命令如图2:
图2 apktool参数
2.dex2jar
这个就简单了,用来将apk中的classes.dex文件(直接解压提取)转成jar查看,官网下载后把classex.dex放入目录下,执行dex2jar.bat classes.dex命令,即可得到对应的jar文件。
3.jd-gui
即Java-decompiler,查看jar中的class代码。打开上一步得到的jar文件即可。
4.smali2java
最为方便的工具,可以直接打开apk查看代码,也可以打开单个smali文件转成Java。不过也只能查看代码,而不能查看其他文件。
二、反编译Java代码
1.使用smali2java直接打开apk
2.使用dex2jar和jd-gui
解压apk提取classes.dex -> 使用“dex2jar.bat classes.dex”将其转成jar文件 -> 使用jd-gui查看Java代码。
三、反编译资源文件等
使用apktool解码apk得到的文件夹如下图3,其中res文件夹下存放layout、drawable、values等资源。
图3 apktool解码文件
四、回编译