last update time 20210728
反编译,利用apktool
反编译apk得到可以修改smali
源码
-
apktool d target.apk -o target
-
若遇到
DexBackedDexFile$NotADexFile
错误,使用apktool d --only-main-classe target.apk -o target
,正常则跳过 -
aapt
是资源编译和打包工具,apktool 2.0+ 二进制文件中内嵌aapt工具
-
用dex2jar
将apk转换成jar
d2j-dex2jar -f target.apk
用jd-gui
或者用Android Studio
阅读源码,跟反编译出来的smali
对比
-
若对
smali
语法不熟悉,可以自己找资料学习一下。这里推荐一些个人认为比较好的文章 -
IDEA系的一个可将java/kotlin编译成smali的插件 java2smali, 目前只能手动安装,具体安装方法网上一大堆
用apktool
回编译
apktool b target -o target_new.apk
清除apk原签名,并用 jdk 的jarsigner
重新签名
-
清除签名
- 删除apk包里面的
META-INF
文件夹里除MANIFEST.MF
所有内容,此文件夹包含原签名信息。
- 删除apk包里面的
-
重新签名
jarsigner -verbose -keystore %KEYSTORE% -signedjar %OUTPUT% %INPUT% %ALIAS%
-
网上教程的
signapk.jar
是Android源码包中的一个签名工具,以及testkey.pk8
与testkey.x509.pem
也是源码提供的签名文件。我们使用自己的签名文件签名就可以了 -
安装不同签名的apk需要卸载重装