Android中如何进行签名校验和完整性校验

前言

签名校验和完整性校验主要是针对于二次打包的检测防范措施,如果没有签名校验和完整性校验功能,应用可能被恶意攻击者二次打包,被盗版的风险大大增加,同时也可能进行任意代码修改。

针对上面的问题,这章我们就对我们的App进行运行时签名校验。

准备

项目代码
项目代码的主要实现类SignatureChecker,欢迎查看。

验证默认签名信息

1.获取应用的APK

  • 在编写好项目以后,我们通过点击build->build apk.
  • 文件在项目的app/build/outputs/apk/debug/app-debug.apk
    在这里插入图片描述

2. 获取调试应用的keystore

  • 打开finder程序,Go -> Home -> ./android/debug.keystore
    在这里插入图片描述
  • 签署您的应用
  • 使用keytool命令查看android模式调试debug.keystore的签名信息,默认密码为空
    在这里插入图片描述
    命令:keytool -list -v -keystore debug.keystore

3.信息对比

  • 检查apk文件中的签名信息
    在这里插入图片描述
    上面的检查命令:keytool -printcert -file CERT.RSA

  • 对比信息在这里插入图片描述
    在这里完全可以看出,我们的apk默认的是经过androidstudio的debug.keystore来签名过的APK。

对APK进行重新签名

创建两个keystore

  • 创建两个KeyStore分别命名keyStoreAkeyStoreB
    在这里插入图片描述
  • 创建一个未签名的Apk,命名为app-release-unsigned
    签名_生成未签名APK

对APK进行签名

  • 使用KeyStoreA文件对app-release-unsigned进行签名,签名后的APK为app-release-keystoreA
jarsigner -verbose -keystore /Users/martin/Downloads/newsign/keystore/keystoreA -signedjar /Users/martin/Downloads/newsign/des/app-release-keystoreA.apk /Users/martin/Downloads/newsign/src/app-release-unsigned.apk android
命令解析

jarsigner的参数说明

  • keystore 参数指定您的私钥的绝对路径,例如:/Users/martin/Downloads/newsign/keystore/keystoreA
  • signedjar 参数指定签名后apk文件存放绝对的路径,例如 /Users/martin/Downloads/newsign/des/app-release-keystoreA.apk
  • [未签名的文件路径] 指定要签名apk文件的绝对路径,也就是您从我们这里下载到的,例如 /Users/martin/Downloads/newsign/src/app-release-unsigned.apk
  • [您的证书名称] 是指您创建密钥时您设置的证书名称

PS:参考MAC对APK包进行重新签名

签名成功:
签名_keystoreA签名

删除APK的签名信息并重新打包

  • 解压app-release-keystoreA删除META-INFO文件夹下的三个文件

    • ANDROID.RSA
    • ANDROID.SF
    • MANIFEST.MF
      在这里插入图片描述
      注意:这里的三个文件的名称因为工具的原因可能会根据改变,我们删除的时候,看他的后缀名称就好。
  • 重新打包删除后的app-release-keystoreA文件,后缀名改为APK。
    签名_打包移动APK

  • 使用我们的keyStoreBapp-release-keystoreA进行重新签名,生成app-release-keystoreB

jarsigner -verbose -keystore /Users/martin/Downloads/newsign/keystore/keystoreB -signedjar /Users/martin/Downloads/newsign/des/app-release-keystoreB.apk /Users/martin/Downloads/newsign/src/app-release-keystoreA.apk androidx

  • 7
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值