小任班长的博客 - keytool -printcert -file
type: channel
link: https://cnxiaocheng.top/tag/keytool--printcert--file/
items: android查看apk签名指纹信息的方法

android查看apk签名指纹信息的方法
type: item
date: 2019-09-18T09:00:00+08:00
description: 1.修改apk扩展名 .zip2.解压，找到META-INF目录3.java环境下执行如下命令：命令：keytool -printcert -file xxx/META-INF/CERT.RSA //xxx文件所在路径 例如：keytool -printcert -file F:\Test\META-INF/CERT.RSA 如果证书指纹跟官方一致，则说明apk没有经过二次封装，安全可用。各文件介绍（1）MANIFEST.MF：这是摘要文件。程序遍历Apk包中的所有文件(entry)，对非文件夹非签名文件的文件，逐个用SHA1生成摘要信息，再用Base64进行编码。如果你改变了apk包中的文件，那么在apk安装校验时，改变后的文件摘要信息与MANIFEST.MF的检验信息不同，于是程序就不能成功安装。说明：这是Android签名验证过程的第一步，保证每个APK包内的每个文件与MANIFEST.MF中的摘要值一一对应，修改某个文件内容，必须修改MANFEST.MF文件中的摘要值，使他们对应起来。（2）CERT.SF：这是对摘要的签名文件。对前一步生成的MANIFEST.MF，对MANIFEST.MF中的每一条内容分别进行SHA1计算，然后再用Base64编码转换。此外，把MANIFEST.MF的内容也进行SHA1计算，并且计算BASE64编码。将上述内容写入CERT.SF文件中。说明：这是签名认证过程的第二步，这一步做的是多第一步得到的签名文件的摘要，比如第一步中对文件和MANIFEST.MF摘要都改了，这一步中MANIFEST.MF的摘要值也要修改，否则就对应不起来。所以，前面这两步，做的都是摘要，是为第三步骤做准备的，第三步骤才是最重要的。（3）CERT.RSA文件中保存了公钥、所采用的加密算法等信息，此外重要的，还包括对CERT.SF中的内容的用私钥进行加密之后的值。说明：在这一步，即使开发者修改了程序内容，并生成了新的摘要文件，MANIFEST.MF能与内容对应起来，CERT.SF也能与内容对应起来，但是攻击者没有开发者的私钥，所以不能生成正确的签名文件（CERT.RSA）。系统在对程序进行验证的时候，用开发者公钥对不正确的签名文件进行解密，得到的结果对应不起来，所以不能通过检验，不能成功安装文件。结论：从上面的总结可以看出，META-INFO里面的说那些文件环环相扣，从而保证Android程序的安全性。（只是防止开发者的程序不被攻击者修改，如果开发者的公私钥对对攻击者得到或者开发者开发出攻击程序，Android系统都无法检测出来。）