准备工具
apktool
github地址:https://github.com/iBotPeaches/Apktool
dex-tool
github地址:https://github.com/pxb1988/dex2jar
jd-gui
github地址:https://github.com/pxb1988/dex2jar
实现步骤
1、使用 apktool 反编译 apk
将 apk 安装包和下载的 apktool 放在同一目录。
假如我的安装包叫 base.apk ,我想把它反编译到 test 文件夹下,反编译命令如下:
java -jar apktool_2.9.1.jar d base.apk -o test
说明:
与 jadx 不同,apktool 反编译 apk 后,你在反编译后的 AndroidManifest.xml 里是找不到 versionCode 内部版本号 和 versionName 版本名称 的,因为 apktool 把它放到了 apktool.yml 文件里,如果你要修改 versionCode 、versionName ,可以在 apktool.yml 文件里修改。
编译为apk
假如你修改了 test 文件夹里的代码 或者 修改了 versionCode 、versionName 等其他内容,可用下面的命令将 test 文件夹编译为 apk 。
java -jar apktool_2.9.1.jar b test -o test.apk
该命令将 test 文件夹编译为 test.apk 。
到这里你已经得到了一个修改后的 apk,但是这个编译后的 apk 还无法安装到手机上,因为修改了文件,在安装时手机会对安装包里的签名进行比对签名,如果签名对不上说明apk被篡改了,就不会进行安装。
所以,如果现在要对修改后的 apk 重新进行签名,才能安装。
关于 apk 签名的具体细节说明,可参考这篇文章:Android apk之v1、v2、v3签名
2、dex2jar,对dex转为jar包
1、修改apk后缀为zip
2、解压zip
3、获取解压后的classes.dex文件,大部分apk存在多个dex文件
apk 安装包本质是经过特殊处理的压缩包,可以直接将 target.apk 修改后缀名为 target.zip,然后通过解压工具解压,解压后的文件夹包含各种资源文件和文件夹,以及 dex 文件,如果apk是多个 dex 文件组成,解压后会有多个dex 存在,可逐个操作。
3、对目标DEX进行操作
1、打开cmd,定位到dex-tool的文件夹下
我们需要使用的是以下批处理文件
2、执行以下代码,将dex转化为jar包
d2j-dex2jar.bat classes.dex
4、使用jd-gui查看jar源码
打开
将3得到的jar包拖入即可查看源码
参考链接
链接:https://blog.youkuaiyun.com/qq_33697094/article/details/135225275