apk签名校验

apk签名

通过对 Apk 进行签名,开发者可以证明对 Apk 的所有权和控制权,可用于安装和更新其应用。而在 Android 设备上的安装 Apk ,如果是一个没有被签名的 Apk,则会被拒绝安装。在安装 Apk 的时候,软件包管理器也会验证 Apk 是否已经被正确签名,并且通过签名证书和数据摘要验证是否合法没有被篡改。只有确认安全无篡改的情况下,才允许安装在设备上。

简单来说,APK 的签名主要作用有两个:

  1. 证明 APK 的所有者。
  2. 允许 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.MFANDROID.SFANDROID.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
2
3
4
5
kill/killProcess()   // 杀死当前应用活动的进程。这一操作将会把所有该进程内的资源(包括线程全部清理掉)。当然,由于ActivityManager时刻监听着进程,一旦发现进程被非正常Kill,它将会试图去重启这个进程。这就是为什么,有时候当我们试图这样去结束掉应用时,发现它又自动重新启动的原因.

system.exit() // 杀死了整个进程,这时候活动所占的资源会被释放。

finish() // 仅仅针对Activity,当调用finish()时,只是将活动推向后台,并没有立即释放内存、活动资源。

签名校验对抗

方法一:核心破解插件,无需签名安装应用。

方法二:一键通过签名工具,例如 MT、NP、ARMPro、CNFIX、Modex 的去除签名校验功能。

方法三:具体分析签名校验逻辑(改smali字节码,手撕签名校验)

方法四:io重定向

方法五:去作者家严刑拷打拿到.jks文件和密码

手撕校验实例

算法助手 - 开启Log捕获

下图为拦截到的exit()调用。

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


apk签名校验
https://becks723.github.io/2025/03/05/apk签名校验/
作者
Becks723
发布于
2025年3月5日
许可协议