对war包进行签名以及外部验签的学习资料

http://www.apkbus.com/thread-589086-1-1.html

一、首先,科普一下apk包下的meta-inf目录

    我们已经知道的是:android对每一个apk文件都会进行签名,在apk文件安装时,系统会对其签名信息进行比对,判断程序的完整性,从而决定该apk文件是否可以安装,在一定程度上达到安全的目的。

    给定一个apk文件,解压,可以看到一个meta-info文件夹,在该文件夹下有三个文件:分别为manifest.mf、cert.sf和cert.rsa。这三个文件分别表征以下含义:

    (1)manifest.mf:这是摘要文件。程序遍历apk包中的所有文件(entry),对非文件夹非签名文件的文件,逐个用sha1生成摘要信息,再用base64进行编码。如果你改变了apk包中的文件,那么在apk安装校验时,改变后的文件摘要信息与manifest.mf的检验信息不同,于是程序就不能成功安装。

    说明:如果攻击者修改了程序的内容,有重新生成了新的摘要,那么就可以通过验证,所以这是一个非常简单的验证。

    (2)cert.sf:这是对摘要的签名文件。对前一步生成的manifest.mf,使用sha1-rsa算法,用开发者的私钥进行签名。在安装时只能使用公钥才能解密它。解密之后,将它与未加密的摘要信息(即,manifest.mf文件)进行对比,如果相符,则表明内容没有被异常修改。

    说明:在这一步,即使开发者修改了程序内容,并生成了新的摘要文件,但是攻击者没有开发者的私钥,所以不能生成正确的签名文件(cert.sf)。系统在对程序进行验证的时候,用开发者公钥对不正确的签名文件进行解密,得到的结果和摘要文件(manifest.mf)对应不起来,所以不能通过检验,不能成功安装文件。

    (3)cert.rsa文件中保存了公钥、所采用的加密算法等信息。

    说明:系统对签名文件进行解密,所需要的公钥就是从这个文件里取出来的。

    结论:从上面的总结可以看出,meta-info里面的说那个文件环环相扣,从而保证android程序的安全性。(只是防止开发者的程序不被攻击者修改,如果开发者的公私钥对对攻击者得到或者开发者开发出攻击程序,android系统都无法检测出来。)

    我们将apk包解包,然后使用命令 keytool -printcert -file cert.rsa 查看cert.rsa,如图所示:


    答案很明显,cert.rsa文件中存放了关于签名的信息。

    当我们使用如下代码获取证书信息的时候:

当使用jarsigner 对war包进行签名的时候:

首先是 MANIFEST.MF 文件中多了几行,它为 jar 包中的每一个文件都生成了一个数据摘要,这个摘要是从 jar 包中包含的文件本身计算出来的;其次,多了一个 XXX.SF 文件,其中的内容也是 jar 包中每个文件对应的摘要,但是这个摘要是从 MANIFEST.MF 中的数据项计算出来的,它同时包含有针对整个 MANIFEST.MF 文件计算出的摘要;最后,就是一个无法直接阅读的文件 XXX.DSA,从图中可以看出这个文件显示为乱码,其中的内容就是 XXX 的公钥以及使用 XXX 的私钥对该 jar 文件进行签名后的结果。

有了这里的直观的印象,我们就对签名和验证有了更深入的了解。签名和验证是建立在信息摘要算法和非对称加密解密算法的基础上的。数据摘要算法是不可逆的,它只能从数据生成摘要,不能从摘要解密出数据。非对称加密解密算法需要公钥私钥对,使用私钥加密的数据只能使用公钥解密,因此使用私钥对上一步生成的摘要进行加密,就相当于是签名了,因为只能通过相应的公钥进行解密。一般情况下公钥是通过证书发布出去的,而在上面的例子中,签名者的公钥直接放在了 YOUXIA.DSA 文件中,方便验证者使用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值