装载请标明出处,维权必究:http://www.javashuo.com/article/p-ewynzcev-dv.htmlhtml
首先咱们在as中双击apk,出现apk的分析界面,而后选中保存签名相关文件的文件夹:算法
一:签名文件:安全
一、MANIFEST.MF:保存了全部其余文件的SHA-1并base64编码后的值编码
二、CERT.SF:加密
SHA1-Digest-Manifest的值,这个值就是MANIFEST.MF文件的SHA-1并base64编码后的值。htm
后面几项的值是对MANIFEST.MF文件中的每项再次SHA1并base64编码后的值。blog
将上一个文件的某一项取出,好比:get
Name: assets/BookCategoryConfigit
SHA1-Digest: u5YLUiucukHRhO/xAqnzbnCb6cU=base64
加两个\r\n,保存文件,再SHA1并base64编码即可获得。
三、CERT.RSA:
包含了公钥信息和发布机构信息。它把以前生成的 CERT.SF文件, 用私钥计算出签名, 而后将签名以及包含公钥信息的数字证书一同写入 CERT.RSA 中保存。CERT.RSA是一个知足PKCS7格式的文件。
Name”属性,其值就是该文件在apk包中的路径。
2、签名过程
CERT.RSA文件生成:
它会把前面生成的 CERT.SF文件用私钥计算出签名, 而后将签名以及包含公钥信息的数字证书一同写入 CERT.RSA 中保存。CERT.RSA是一个知足PKCS7格式的文件。
3、APK安装校验过程
一、经过在CERT.RSA文件中记录的签名信息,验证了CERT.SF没有被篡改过
RSA是一种非对称加密算法。用私钥经过RSA算法对摘要信息进行加密。在安装时只能使用公钥才能解密它。解密以后,将它与未加密的摘要信息进行对比,若是相符,则代表内容没有被异常修改。
二、经过CERT.SF文件中记录的摘要值,验证了MANIFEST.MF没有被修改过
三、apk内文件的摘要值要与MANIFEST.MF文件中记录的一致
这里简单介绍下SHA1数字签名。简单地说,它就是一种安全哈希算法,相似于MD5算法。它把任意长度的输入,经过散列算法变成固定长度的输出(这里咱们称做“摘要信息”)。你不能仅经过这个摘要信息复原原来的信息。另外,它保证不一样信息的摘要信息彼此不一样。所以,若是你改变了apk包中的文件,那么在apk安装校验时,改变后的文件摘要信息与MANIFEST.MF的检验信息不一样,因而程序就不能成功安装。
一、 Android签名机制实际上是对APK包完整性和发布机构惟一性的一种校验机制。
二、 Android签名机制不能阻止APK包被修改,但修改后的再签名没法与原先的签名保持一致。(拥有私钥的状况除外)。
三、 APK包加密的公钥就打包在APK包内,且不一样的私钥对应不一样的公钥。换句话言之,不一样的私钥签名的APK公钥也必不相同。因此咱们能够根据公钥的对比,来判断私钥是否一致。