Android Apk反编译并重签名

参考文档:
反编译包: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内容可以明文查看,这个时候可以修改值


    test1.png
  • 执行: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】发生问题:

  1. 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
  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

你可能感兴趣的:(Android Apk反编译并重签名)