Android 签名(META-INF)

在Android的apk包中含有一个叫做META-INF的文件夹,这个里边存储的是关于签名的一些信息。


其中将apk包解压出来,进入META-INF目录,发现会有3个文件:CERT.RSA,CERT.SF,MANIFEST.MF。

用记事本打开MANIFEST.MF文件,这是个可读的文本文件,大约内容如下:

Manifest-Version: 1.0
Created-By: 1.0 (Android)

Name: res/drawable-hdpi/shop_search_bg.png
SHA1-Digest: OgQ5gmKTFoxuZWAaKBBJKl1Oy24=

Name: res/drawable/merchant_btn_selector.xml
SHA1-Digest: AkxLT25+wtnL6DCN10rcSTpz6kM=

版本号以及对每一个文件的哈希值(BASE64)。包括资源文件。这个是对每个文件的整体进行 SHA1 hash



然后是CERT.SF文件,用记事本打开,内容如下:

Signature-Version: 1.0
Created-By: 1.0 (Android)
SHA1-Digest-Manifest: I2tqVFgbG+PZh6o8SWuDePSrTcQ=

Name: res/drawable-hdpi/shop_search_bg.png
SHA1-Digest: twMIUeZAdwmMBjIDlo/5EiSFWj0=

Name: res/drawable/merchant_btn_selector.xml
SHA1-Digest: GJqtJ+iUO4Xrjgzri8nzR+GDLVU=

看到跟manifest.mf中的很类似,也是BASE64编码的哈希值,这个是对每个文件的头3行进行 SHA1 hash。

这两个文件中的内容仅仅是个摘要,也就是仅仅对文件做个hash。


最后一个文件是CERT.RSA,这个文件中放的是apk包的签名,同时还有证书的公钥。



一般来说,证书的内容是:开发者信息+开发者公钥 +CA的签名( CA对前两部分做hash值然后私钥加密之后的密文)

验证过程是:用CA公钥对括号里的内容解密,然后对前两部分hash,跟CA的签名进行对比,看是否相同。

暂时不知道Android中既然已经有了对整个文件的摘要,为什么还要弄个前3行的摘要。 

猜想:

 cert.rsa这个文件中应该存放的是开发者信息+开发者公钥+开发者签名【自己就是CA】(对前两部分的hash用自己私钥做加密),

解密过程应该是:首先提取自己公钥,然后对自己加密的那部分解密,然后对前2部分做hash进行比对,模拟跟验证证书。然后再用公钥依次验证每一个文件的摘要看是否正确。

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值