参考文档:
反编译包:https://www.cnblogs.com/findyou/p/3450721.html
重签名:https://www.cnblogs.com/findyou/p/3801273.html
【1】反编译工具apktool
apktool: http://code.google.com/p/android-apktool/downloads/list
命令:
apktool d [目标.apk] [目标文件夹] ---------反编译(decode)
apktool b [文件夹] -o [编译之后的名称.apk] ---------重新编译成apk(buid)
apktool if framework-res.apk --------加载资源(install framework)
【2】apktool的安装
地址:https://ibotpeaches.github.io/Apktool/
传送门:https://ibotpeaches.github.io/Apktool/install/
Mac安装:
brew install apktool
apktool
就可以直接使用apktool命令了
或者下载apktool_2.xxx.xx.jar,在使用的时候:java -jar 路径/apktool_2.xx.xx.jar d [目标.apk] [目标文件夹]
【3】开始操作
新建个test文件夹,把test.apk丢进去,一步一步执行
cd test
apktool d test.apk
apktool b test -o test-build.apk
修改所需文件
# jarsigner -verbose -keystore key_test.keystore -storepass 123456 -keypass 123456 -signedjar resigned.apk test-build.apk key0
apksigner sign --ks key_test.keystore --ks-key-alias 别名 -ks-pass pass:密码 --out resigned.apk test-build.apk
zipalign -v 4 resigned.apk resigned_new.apk
resigned_new.apk 是最终的包
- 新建一个test文件夹,把test.apk放进去
- cd test
- 执行:apktool d test.apk
-
得到反编译后的android工程文件夹,反编译后的AndroidManifest.xml内容可以明文查看,这个时候可以修改值
- 执行:apktool b test -o test-build.apk, test-build.apk是重新编译后的apk
- 重新签名,在test文件夹放入key_test.keystore文件
jarsigner -verbose -keystore key_test.keystore -storepass 签名别名密码 -keypass 签名密码 -signedjar resigned-重新签名后的apk.apk test-build.apk 签名别名
# jarsigner -verbose -keystore key_test.keystore -storepass 123456 -keypass 123456 -signedjar resigned.apk test-build.apk key0
新:
apksigner sign --ks key_test.keystore --ks-key-alias 别名 -ks-pass pass:密码 --out resigned.apk test-build.apk
- 得到重新签名后的resigned.apk,使用apktool d [目标.apk]查看apk包内容是否修改成功
- 优化包:zipalign -v 4 resigned.apk resigned_new.apk
zipalign优化的最根本目的是帮助操作系统更高效率的根据请求索引资源,将resource-handling code统一将Data structure alignment(数据结构对齐标准:DSA)限定为4-byte boundaries。
【4】扩展 - 命令生成keystore
keytool -genkey -v -keystore 签名.keystore -alias 别名 -keyalg RSA -validity 10000
- keytool:工具名称,-genkey:生成数字证书操作,-v将生成证书的详细信息打印出来
- -keystore 签名.keystore 表示生成的数字证书的文件名为“ xxx.keystore”
- -alias 别名
- -keyalg RSA :成密钥文件采用RSA算法
- -validity 10000 :数字证书的有效期为10000天,意味着10000/365年之后该证书将失效
【5】发生问题:
- Failure [INSTALL_PARSE_FAILED_NO_CERTIFICATES: Scanning Failed.: No signature found in package of version 2 or newer for package
原因:android7.0后需要使用v2签名,要使用apksigner
老的:
jarsigner -verbose -keystore key_test.keystore -storepass 签名别名密码 -keypass 签名密码 -signedjar resigned-重新签名后的apk.apk test-build.apk 签名别名
解决:
apksigner sign --ks ${filename}.keystore --ks-key-alias 别名 -ks-pass pass:密码 --out ${agent}/${agent}_resigned.apk ${agent}/${agent}.apk
查看v2签名是否完好:
apksigner verify -v xx.apk
输出如下代表正常:
Verifies
Verified using v1 scheme (JAR signing): true
Verified using v2 scheme (APK Signature Scheme v2): true
Verified using v3 scheme (APK Signature Scheme v3): true
Verified using v4 scheme (APK Signature Scheme v4): false
Verified for SourceStamp: false
Number of signers: 1
- Failure [-124: Failed parse during installPackageLI: Targeting R+ (version 30 and above) requires the resources.arsc of installed APKs to be stored uncompressed and aligned on a 4-byte boundary]
解决:
zipalign -p -f -v 4 file.apk out.apk
zipalingn文档:https://developer.android.google.cn/studio/command-line/zipalign.html