目录
概述
Android有多少种反编译方式,我并不清楚,在现阶段,使用一些工具就能做到一键反编译,但是每种工具反编译出的源码都不尽相同,这点值得我思考了,这些工具的反编译原理是什么?是不是各自有各自的侧重?后期搞清楚这些反编译的原理,在写个文章分享。
下面介绍3种反编译的方式:
- dex2jar + jd-gui
- jadx-gui
- apktool
apk编译和反编译流程
android打包流程
.java ------> .class ------> .dex ------> .apk
apk反编译流程
.apk ------> .dex ------> .class ------> .java
dex2jar + jd-gui
反编译出来的是java代码;
工具下载地址
使用流程
1..apk ------> .dex
有时候会得到classes.dex ,classes2.dex ... 多个文件,这个是因为Android分包MultiDex机制造成的,我没想出什么好办法合并起来,只能分别做反编译操作即可。
2..dex ------> .class
3..class ------> .java
jadx-gui 在file选项中,点击 Save All Sources 保存源码,得到 classes-dex2jar.jar.src.zip 文件。
将 classes-dex2jar.jar.src.zip 解压,即可得到源码,导入到ide中方便阅读。
jadx-gui
反编译出来的是java代码;
工具下载地址
使用流程
打开jadx-gui-0.8.0.exe后,open打开.apk文件即可。
apktool
反编译出来的是smali代码;apktool不但能反编译,还能重新编译打签名。其实AndroidKiller和ApkIDE改之理这两款反编译的图形工具,底层都是基于apktool实现的,因为我查看它们两个软件的目录里都有apktool.bat;
工具下载地址
使用流程
打开cmd终端工具,输入如下命令
# 先cd进到apktool_2.3.4.jar所在的目录java -jar apktool_2.3.4.jar d -f G:\安装包\APK反编译\物流助手2.0.apk -o OK
解压出来的源码就是当前目录下OK文件夹里面。
重新编译
# 在修改了里面smali代码之后apktool.bat b OK
apktool还能生成keystore 和 对编译好的apk打签名
实战经验
如果碰到dex反编译的时候,比如源文件classes.dex为几M,反编译之后只为几百KB,说明该app经过了加壳处理。