通过PC一键提取查看验证安卓数字签名证书

发表于 2016-9-11 18:16 | 浏览 4185

之前的文章给同学们介绍了利用 Windows 数字签名验证程序是否被篡改的方法。其实在 Android 平台上,也有类似的数字签名验证机制,同样可以用来鉴别APP是否为原版、是否被篡改。只是与 Windows 相比,有所不同的是安卓的签名是自签名。

在电脑上使用压缩软件打开任意一个apk安装包,可以看到其中的 META-INF 目录,这个目录下存放的就是 Android 程序的 Hash 摘要以及签名证书。其中:

  • MANIFEST.MF -- 存放apk包内所有文件的 SHA1-Base64 校验值(摘要)
  • CERT.SF   -- 遍历MANIFEST.MF文件,对每项进行二次 SHA1-Base64 摘要
  • CERT.RSA  -- 此为数字签名二进制文件,存放所有者的证书、对 CERT.SF 文件的签名

以上三个文件环环相扣,不管你修改了apk内的文件,还是篡改了这三个文件的任何内容,都会导致在安装apk时,系统验证签名不通过,进而无法成功安装该应用。

而另一种情况,当你对apk进行了重新打包签名,这时就可以成功安装了(需要实现卸载已经安装的原版apk)。但是重签名会导致签名证书中的公钥也同时变化(与原版公钥不符),这样就可以用来判断apk是否被篡改或重打包了。

也就是说,验证apk安装包是否被篡改,是不是官方原版,实质上就是通过比对 CERT.RSA 内的签名证书信息来实现的。如果apk安装包内的数字证书和官方版本一致,则证明此apk为官方原版,可以放心下载安装。

那么最终的问题就来了,如何查看 Android 的签名证书信息呢?

对于搞开发的童鞋来讲,自然相当简单,直接使用 JDK(Java 开发工具包) 自带的 keytool 命令行工具就可以直接查看了,直接比对证书指纹就可以了。命令如下:

keytool -printcert -v -file XXX.RSA

而对于大多数普通用户,菲菲君觉得很多人是不喜欢命令行的(虽然个人感觉命令要方便的多),而且又要下载安装配置 JDK 工具包什么的,繁琐一大堆,浪费时间不便于操作。

为了解决这个问题,本人 Google/Baidu 了大量资料也查无所获,直到偶然擦出那么一丁点小灵感,还真的发现了一个可以直接在 Windows 上查看apk签名信息的小妙招!

太简单了,简单到自己都佩服自个儿,这么隐蔽都被发现了。。哈哈~ -_-*

1、使用PC压缩软件打开apk包,将 META-INF 目录下的 .RSA 后缀文件解压出来

2、将此文件的后缀扩展名修改为 .p7b ,这样就可以直接双击打开查看了,就是这么方便~

Windows自带查看PKCS#7证书的方法

这里再附送小伙伴们一个小技巧(哎呀,看家本事都分享出来咧~),其实不用修改后缀名也能直接查看,只要关联一下文件类型,以后就能直接双击打开 .RSA 文件。

直接打开cmd命令行窗口(Win7 需要管理员权限),执行

reg add HKCR\.RSA /ve /t REG_SZ /d SPCFile /f

最后我们来验证一下窗口/命令行这两种方式查看到的证书信息是一致的!而通过 Windows 直接查看证书的话还能查看数字签名证书具体的公钥信息。

Windows 上直接查看 .RSA 签名证书的详细信息

使用 keytool 命令查看安卓 .RSA 证书的指纹信息

(原创文章版权所有,如需转载请注明原文链接!)