之前的文章给同学们介绍了利用 Windows 数字签名验证程序是否被篡改的方法。其实在 Android 平台上,也有类似的数字签名验证机制,同样可以用来鉴别APP是否为原版、是否被篡改。只是与 Windows 相比,有所不同的是安卓的签名是自签名。
在电脑上使用压缩软件打开任意一个apk安装包,可以看到其中的 META-INF 目录,这个目录下存放的就是 Android 程序的 Hash 摘要以及签名证书。其中:
以上三个文件环环相扣,不管你修改了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 ,这样就可以直接双击打开查看了,就是这么方便~
这里再附送小伙伴们一个小技巧(哎呀,看家本事都分享出来咧~),其实不用修改后缀名也能直接查看,只要关联一下文件类型,以后就能直接双击打开 .RSA 文件。
直接打开cmd命令行窗口(Win7 需要管理员权限),执行
reg add HKCR\.RSA /ve /t REG_SZ /d SPCFile /f
最后我们来验证一下窗口/命令行这两种方式查看到的证书信息是一致的!而通过 Windows 直接查看证书的话还能查看数字签名证书具体的公钥信息。
(原创文章版权所有,如需转载请注明原文链接!)