学而实习之 不亦乐乎

Android Apk 签名及其应用

2023-04-08 22:19:46

通过对App加固,提升App安全性,防止Apk(安卓应用软件包)被入侵、篡改、山寨,提升代码的安全性和被破解难度。不过,在对Apk加固后,Apk原有的签名信息会丢失,需要重新签名,否则,无法在安装到手机等安卓设备上。  因此Apk重签名需要和加固前保持一致,否则会触发加固的防二次打包功能,导致Apk无法正常运行。

一、Apk的签名的作用

软件签名并非安卓系统首创,在诺基亚主导的塞班(Symbian OS)时代就开始运行。通过签名每个程序开发商都拥有合法账号ID。

Apk签名类似在开发者在Apk中写入一个独有的“指纹”。安卓App导出为Apk时,需要选择一个数字证书,也就是keystore文件。该Key文件用来对App进行签名,是导出App的一个钥匙,是Apk的独有“指纹”,需要开发者自己生成。

生成签名以后,除非再次修改,否则Apk将永久有效。同时,在安卓设备上安装该Apk,安卓形同会对Apk签名进行校验,如果校验失败则无法获得通过。这是安卓系统自带的一种安全性验证机制,目的是为了确保Apk来源的真实性,防止Apk遭第三方篡改,保证Apk的完整性、原创新和安全性。

二、Apk签名的组成

APK签名分块包含了4部分:分块长度、ID-VALUE序列、固定magic值。

签名有V1、V2、V3、V4等四个方案。其中,V2方案应用最多。该方案是在安卓7.0 (Nougat)中被引入的,是一种全文件签名方案,能够发现对APK的受保护部分进行的所有更改,从而有助于加快验证速度并增强完整性保证。

V2方案支持并行计算,无需计算所有文件的摘要,以分块形式进行hash,良好保证了APK内各文件的完整性。而且它只需进行一次hash校验,速度很快。

三、Apk二次签名

应用加固为什么必须重签名?
应用加固不可避免的会破坏原有签名,加固后必须对加固包重签名才能发布至应用市场,否则会被提示 “应用未签名”,请务必确保加固前后的签名一致。