版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、获取apk文件的签名信息1 RSA非对称加密体系1.1 PKCS7 /html/rfc23151.1.1 signedData结构SignedData := SEQUENCE version INTEGER, digestAlgorithms DigestAlgorithmIdentifiers, contentInfo ContentInfo, certificates 0 IMPLICIT Certificates OPTIONAL, crls 1 IMPLICIT CertificateRevocationLists OPTIONAL, sign
2、erInfos SignerInfosSignerInfos := SET OF SignerInfoSignerInfo := SEQUENCE version INTEGER, sid CertIdentifier, digestAlgorithm DigestAlgorithmIdentifier, authenticatedAttributes 0 IMPLICIT Attributes OPTIONAL, digestEncryptionAlgorithm DigestEncryptionAlgId, encryptedDigest EncryptedDigest, unauthen
3、ticatedAttributes 1 IMPLICIT AttributesAttributes := SET OF AttributeAttribute := SEQUENCE type EncodedObjectID, values AttributeSetValue SignedData := SEQUENCE version CMSVersion, digestAlgorithms DigestAlgorithmIdentifiers, encapContentInfo EncapsulatedContentInfo, certificates 0 IMPLICIT Certific
4、ateSet OPTIONAL, crls 1 IMPLICIT RevocationInfoChoices OPTIONAL, signerInfos SignerInfos DigestAlgorithmIdentifiers := SET OF DigestAlgorithmIdentifier SignerInfos := SET OF SignerInfo2 APK签名介绍/reference/jdk-1.2.2-docs/tooldocs/win32/jarsigner.html#签名后的JAR包,会在META-INF 文件夹下面多产生两个文
5、件,一个是.SF文件,一个是.DSA或者.RSA或者.PGP.RSA (PKCS7 signature, MD5 + RSA).DSA (PKCS7 signature, DSA).PGP (Pretty Good Privacy Signature)2.1 MANIFEST.MF file包含每个文件,摘要算法,摘要值(base64编码)· the file name,· the name of the digest algorithm used (SHA), and· a SHA digest value.摘要值计算的是文件的二进制内容。2.2 The Sig
6、nature (.SF) File包含每个文件,摘要算法,摘要值(base64编码)· the file name,· the name of the digest algorithm used (SHA), and· a SHA digest value.这里的摘要值计算的不是文件本身,而是MANIFEST.MF中对应文件的3行字符串。2.3 The Signature Block (.RSA) File签名是对.SF文件签名,对应的数字签名本身,以及证书链全部放在.RSA文件里。3 JAR包完整性验证3.1 校验.SF文件的签名签名过程是对SF文件的内容做了摘
7、要计算,又对摘要值做了私钥加密;验证过程是使用公钥解密,把解密出来的摘要和重新从SF文件计算出来的摘要做对比。公钥是包含在证书里面,证书又包含在PKCS7 SignedData数据块里面,这个数据块就是RSA文件。同时这个PKCS7 SignedData数据里包含加密后的密文,即signature部分。3.2 比较SF文件里面的条目和manifest文件中的条目;SF文件头部有一个摘要是对整个manifest文件的,如果通过了匹配,则直接到下一步,不用匹配每个文件条目;如果整个manifest文件摘要匹配不成功,则需要挨个匹配每个SF文件里面的条目。这种情况一般发生在,做完数字签名后,又向ja
8、r包里新加了其它文件,这个时候,manifest文件的内容会变化,但是SF文件不会,所以SF文件的条目可能会比manifest的条目少。如果是这种情况,那么校验也算是通过。3.3 按照.SF文件的条目,挨个读取文件,计算摘要,和manifest对比;3.4 多个签名多人可以对同一个JAR包签名,如: jarsigner myBundle.jar susan jarsigner myBundle.jar kevin那么会出现: SUSAN.SF SUSAN.DSA KEVIN.SF KEVIN.DSA可以分别对不同人的签名做验证。4 不同任务 4.1 校验JAR包的完整性:需要整个JAR包, 验
9、证签名 + 验证文件的SHA1摘要值jarsigner -verify -verbose -certs myTest.jar4.2 验证签名:需要SF文件,和RSA文件openssl cms -verify -content 123/META-INF/IHOKIIX.SF -in 123/META-INF/IHOKIIX.RSA -inform DER -noverify4.3 提取证书:需要RSA文件keytool -printcert -jarfile 123123-1458199590.apkopenssl pkcs7 -in pkcs7.der -inform DER -print_c
10、erts > cert.pem4.4 提取证书指纹:需要RSA文件openssl x509 -in pkcs7/cert.der -inform der -fingerprint -nooutSHA1 Fingerprint=42:96:E2:0A:2E:06:2E:6A:7F:EE:50:80:8D:41:16:C2:93:43:BF:10证书指纹,其实就是DER编码的证书文件的摘要值:4.5 提取公钥:openssl x509 -inform pem -in cert.pem -noout -pubkey > pubkey.pem5 工具jarsigner keytool需要安
11、装SUN JDK,注意不要安装openJDKopenssl需要安装openssl5.1 keytool使用APK文件或者JAR文件作为输入:rootlocalhost apksig# keytool -printcert -jarfile 123123-1458199590.apkSigner #1:Signature:Owner: CN=pktool, OU=maizi, O=maizi, L=sc, ST=sc, C=CNIssuer: CN=pktool, OU=maizi, O=maizi, L=sc, ST=sc, C=CNSerial number: 424fd4aaValid f
12、rom: Thu Mar 17 15:26:30 CST 2016 until: Mon Aug 03 15:26:30 CST 2043Certificate fingerprints: MD5: C2:0E:1E:8B:F0:21:00:7E:92:44:72:0B:5F:05:74:4F SHA1: 42:96:E2:0A:2E:06:2E:6A:7F:EE:50:80:8D:41:16:C2:93:43:BF:10 SHA256: 5E:E2:D0:C2:EA:57:A5:2A:F7:2E:62:F5:BA:2A:44:2D:F5:07:92:26:AF:2A:DF:81:30:92:
13、D9:27:2D:80:CE:28 Signature algorithm name: SHA256withRSA Version: 3Extensions:#1: ObjectId: 4 Criticality=falseSubjectKeyIdentifier KeyIdentifier 0000: 39 E3 42 C6 BD 05 5F D3 A2 FA 9F EB 0B 61 85 1B 9.B._.a.0010: 0D 40 B4 E5 .使用解压后的证书文件,作为输入:rootlocalhost apksig# keytool -printcert -file 1
14、23/META-INF/IHOKIIX.RSAOwner: CN=pktool, OU=maizi, O=maizi, L=sc, ST=sc, C=CNIssuer: CN=pktool, OU=maizi, O=maizi, L=sc, ST=sc, C=CNSerial number: 424fd4aaValid from: Thu Mar 17 15:26:30 CST 2016 until: Mon Aug 03 15:26:30 CST 2043Certificate fingerprints: MD5: C2:0E:1E:8B:F0:21:00:7E:92:44:72:0B:5F
15、:05:74:4F SHA1: 42:96:E2:0A:2E:06:2E:6A:7F:EE:50:80:8D:41:16:C2:93:43:BF:10 SHA256: 5E:E2:D0:C2:EA:57:A5:2A:F7:2E:62:F5:BA:2A:44:2D:F5:07:92:26:AF:2A:DF:81:30:92:D9:27:2D:80:CE:28 Signature algorithm name: SHA256withRSA Version: 3Extensions:#1: ObjectId: 4 Criticality=falseSubjectKeyIdentifi
16、er KeyIdentifier 0000: 39 E3 42 C6 BD 05 5F D3 A2 FA 9F EB 0B 61 85 1B 9.B._.a.0010: 0D 40 B4 E5 .5.2 jarsignerjarsigner -verify -verbose -certs myTest.jar5.3 opensslopenssl cms -verify -content 123/META-INF/IHOKIIX.SF -in 123/META-INF/IHOKIIX.RSA -inform DER -noverify6 手动校验签名6.1 计算.SF文件的MD5值,得到加密前明
17、文内容rootlocalhost pkcs7# md5sum ./123/META-INF/IHOKIIX.SFc7c03c1369cf6d7733912abe4409ee08 ./123/META-INF/IHOKIIX.SF6.2 解密数字签名,和明文做对比整个的.RSA文件是一个符合PKCS7 SignedData规范的数据块,里面包含证书,数字签名。下面提到的pkcs7.der文件,就是APK或者JAR包里面的.RSA文件。6.2.1 从PKCS7中提取X509证书# Extract x509 certificateopenssl pkcs7 -in pkcs7.der -inform
18、 DER -print_certs > cert.pem6.2.2 提取签名部分签名过程为,首先计算.SF文件的摘要,一般是MD5,然后对.SF文件的摘要值进行私钥加密,加密后的内容为1024或者2048位,取决于位数。加密后的内容一般在pkcs7数据块的最后面,使用asn1parse工具的话,输出在最后一行。# Look for signed signature offsetoffset=$(openssl asn1parse -inform der -in pkcs7.der | python -c "import sys; l = sys.stdin.readlines(
19、)-1; print int(l.split(':')0) + int(l.split('hl=')1.split()0)")count=$(openssl asn1parse -inform der -in pkcs7.der | python -c "import sys; l = sys.stdin.readlines()-1; print int(l.split('hl=')1.split('l=')1.split()0)")# Copy signed signaturedd if=pkcs7
20、.der of=signed_signature.bin bs=1 skip=$ $offset count=$count 2>/dev/null6.2.3 从X509证书提取公钥# Extract public key from certificateopenssl x509 -inform pem -in cert.pem -noout -pubkey > pubkey.pem6.2.4 对签名部分进行解密(使用公钥)# Decrypt signed signatureopenssl rsautl -verify -pubin -inkey pubkey.pem < si
21、gned_signature.bin > signature_decrypt.bin或者是: rootlocalhost pkcs7# openssl rsautl -verify -pubin -inkey pubkey.pem < signed_signature.bin -asn1parse 0:d=0 hl=2 l= 32 cons: SEQUENCE 2:d=1 hl=2 l= 12 cons: SEQUENCE 4:d=2 hl=2 l= 8 prim: OBJECT :md5 14:d=2 hl=2 l= 0 prim: NULL 16:d=1 hl=2 l= 16 prim: OCTET STRING 0000 - c7
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年大连汽车职业技术学院单招职业适应性考试备考题库及答案解析
- 2026年海南职业技术学院单招职业适应性考试备考试题及答案解析
- 2026年济南工程职业技术学院单招职业适应性测试备考题库及答案解析
- 期末考试动员的演讲稿13篇
- 2026年河南工业职业技术学院单招职业适应性考试模拟试题及答案解析
- 期末质量总结(13篇)
- 2026年永州师范高等专科学校单招职业适应性测试模拟试题及答案解析
- 校长演讲稿13篇
- 2026年阜阳幼儿师范高等专科学校单招职业适应性考试模拟试题及答案解析
- 2026年泉州信息工程学院单招职业适应性测试模拟试题及答案解析
- 餐厅前厅经理合同范本
- (2025年)(完整版)医疗器械基础知识培训考试试题及答案
- 口腔科手术安全核查制度
- 山东鲁商集团招聘笔试2025
- 2025至2030中国电磁无损检测设备行业产业运行态势及投资规划深度研究报告
- 智慧树知道网课《算法大视界(中国海洋大学)》课后章节测试答案
- 高考《数学大合集》专题突破强化训练682期【圆锥】细说高考卷里圆锥同构式的妙用
- 《天边有颗闪亮的星》 课件 2025-2026学年人音版(简谱)(2024)初中音乐八年级上册
- 牲畜家禽屠宰场建设与布局设计方案
- 竞彩培训基础知识课件
- 大学计算机基础考试题库含答案
评论
0/150
提交评论