apk签名校验
apk签名
通过对 Apk 进行签名,开发者可以证明对 Apk 的所有权和控制权,可用于安装和更新其应用。而在 Android 设备上的安装 Apk ,如果是一个没有被签名的 Apk,则会被拒绝安装。在安装 Apk 的时候,软件包管理器也会验证 Apk 是否已经被正确签名,并且通过签名证书和数据摘要验证是否合法没有被篡改。只有确认安全无篡改的情况下,才允许安装在设备上。
简单来说,APK 的签名主要作用有两个:
- 证明 APK 的所有者。
- 允许 Android 市场和设备校验 APK 的正确性。
Android 目前支持以下四种应用签名方案:
- v1 方案:基于 JAR 签名。
- v2 方案:APK 签名方案 v2(在 Android 7.0 中引入)
- v3 方案:APK 签名方案 v3(在 Android 9 中引入)
- v4 方案:APK 签名方案 v4(在 Android 11 中引入)
V1 签名的机制主要就在 META-INF
目录下的三个文件,MANIFEST.MF
,ANDROID.SF
,ANDROID.RSA
,他们都是 V1 签名的产物。
(1)MANIFEST.MF
:这是摘要文件。程序遍历Apk包中的所有文件(entry),对非文件夹非签名文件的文件,逐个用SHA1(安全哈希算法)生成摘要信息,再用Base64进行编码。如果你改变了apk包中的文件,那么在apk安装校验时,改变后的文件摘要信息与MANIFEST.MF的检验信息不同,于是程序就不能成功安装。

(2)ANDROID.SF
:这是对摘要的签名文件。对前一步生成的MANIFEST.MF,使用SHA1-RSA算法,用开发者的私钥进行签名。在安装时只能使用公钥才能解密它。解密之后,将它与未加密的摘要信息(即,MANIFEST.MF文件)进行对比,如果相符,则表明内容没有被异常修改。

(3)ANDROID.RSA
文件中保存了公钥、所采用的加密算法等信息。

在某些情况下,直接对apk进行v1签名可以绕过apk的签名校验.
v2方案会将 APK 文件视为 blob,并对整个文件进行签名检查。对 APK 进行的任何修改(包括对 ZIP 元数据进行的修改)都会使 APK 签名作废。这种形式的 APK 验证不仅速度要快得多,而且能够发现更多种未经授权的修改。
签名校验
什么是签名校验?如何判断是否有签名校验?
**不做任何修改,直接签名安装,应用闪退则说明大概率有签名校验。**一般来说,普通的签名校验会导致软件的闪退、黑屏、卡启动页等。甚至有一些比较狠的作者,会直接rm -rf /
,把基带都格掉的一键变砖。
一些闪退的指令:
1 |
|
签名校验对抗
方法一:核心破解插件,无需签名安装应用。
方法二:一键通过签名工具,例如 MT、NP、ARMPro、CNFIX、Modex 的去除签名校验功能。
方法三:具体分析签名校验逻辑(改smali字节码,手撕签名校验)
方法四:io重定向
方法五:去作者家严刑拷打拿到.jks
文件和密码
手撕校验实例
算法助手 - 开启Log捕获
下图为拦截到的exit()
调用。

解决方法:简单粗暴,注释掉 smali码中调用exit()
的一行即可。