Android签名流程

88 阅读2分钟
  1. 对Apk中的每个文件做一次算法(数据摘要+Base64编码),保存到MAINFEST.MF
  2. 对MAINFEST.MF整个文件做一次算法(数据摘要+B阿瑟64编码),存放到CERT.SF文件的头属性中,在对MAINFEST.MF文件中各个属性块做一次算法(数据摘要+Base64编码),存放到一个属性块中。
  3. 对CERT.SF文件做签名,内容存档到CERT.RSA中

对一个APK文件签名之后,APK文件根目录下会增加META-INF目录,该目录下增加三个文件,分别是:MANIFEST.MF、CERT.SF和CERT.RSA,以下是具体的流程:

MANIFEST.MF 这是摘要文件,文件中保存了APK里面所有文件的SHA1校验值的BASE64编码,格式如下(一个文件对应一条记录)。如果改变了APK包中的文件,在apk安装校验时,改变后的文件摘要信息与 MANIFEST.MF 的检验信息不同,程序就不会安装成功。假如攻击者修改了程序的内容,又重新生成了新的摘要,就可以通过验证。

CERT.SF 这是对摘要的签名文件,对前一步生成的MANIFEST.MF,使用SHA1-RSA算法,用开发者的私钥进行签名。在安装时只能使用公钥才能进行解密。解密之后,与未加密的MANIFEST.MF进行对比,如果相符,则表明内容没有被异常修改。如果在这一步,开发者修改了程序内容,并生成了新的摘要文件,但是攻击者没有开发者的私钥,所以不能生成正确的签名文件。系统在对程序进行验证的时候,用开发者公钥对不正确的签名文件进行解密,得到的结果和摘要文件对应不起来,导致不能通过检验,不能成功安装文件。文件格式如下:

CERT.RSA 该文件中保存了公钥、所采用的加密算法等信息

1727322270919.png