问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

Android应用签名校验和完整性校验实战

创作时间:
作者:
@小白创作中心

Android应用签名校验和完整性校验实战

引用
CSDN
1.
https://blog.csdn.net/u011195398/article/details/84567580

签名校验和完整性校验是Android应用开发中重要的安全措施,主要用于防范二次打包和盗版风险。本文将详细介绍如何进行签名校验,包括获取APK、获取调试应用的keystore、对APK进行重新签名等步骤,并提供具体的命令行操作示例。

准备工作

在开始之前,你需要确保已经完成以下准备工作:

  1. 项目代码:确保你有一个完整的Android项目代码。
  2. 主要实现类:了解项目中的主要实现类,例如SignatureChecker

验证默认签名信息

1. 获取应用的APK

在编写好项目以后,通过以下步骤获取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进行签名

使用KeyStoreA文件对app-release-unsigned进行签名,签名后的APK为app-release-keystoreA

命令:

jarsigner -verbose -keystore /path/to/keystoreA -signedjar /path/to/app-release-keystoreA.apk /path/to/app-release-unsigned.apk android

命令解析:

  • -keystore参数指定您的私钥的绝对路径。
  • -signedjar参数指定签名后apk文件存放绝对的路径。
  • [未签名的文件路径]指定要签名apk文件的绝对路径。
  • [您的证书名称]是指您创建密钥时您设置的证书名称。

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

  1. 解压app-release-keystoreA,删除META-INFO文件夹下的三个文件:
  • ANDROID.RSA
  • ANDROID.SF
  • MANIFEST.MF

注意:这里的三个文件的名称因为工具的原因可能会根据改变,我们删除的时候,看他的后缀名称就好。

  1. 重新打包删除后的app-release-keystoreA文件,后缀名改为APK。

  2. 使用keyStoreBapp-release-keystoreA进行重新签名,生成app-release-keystoreB

命令:

jarsigner -verbose -keystore /path/to/keystoreB -signedjar /path/to/app-release-keystoreB.apk /path/to/app-release-keystoreA.apk androidx

防止APP被盗版验证

KeyStoreA和KeyStoreB的签名MD5比较

  1. 安装keystoreA签名过的APK文件。

命令:

adb install -r /path/to/app-release-keystoreA.apk

生成MD5值:

8ad65c2224d9c303250c7c49a3672323
  1. 修改签名,使用KeyStoreB重新签名

命令:

adb install -r /path/to/app-release-keystoreA.apk

生成MD5值:

8fe878055ba594ee41ba8a4b2e0ca3e5

注意:这里的MD5值不和KeyStore显示的格式一样,是因为我格式再次进行了MD5加密。

可以看出来,即使是同样的APK,但是使用不同的签名还是会出现不同的APK值。所以,我们可以在应用中做校验,当MD5值不一样时,就不是官方正版的APK了。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号