版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、獲取apk文件的簽名信息1 RSA非對(duì)稱加密體系1.1 PKCS7 /html/rfc23151.1.1 signedData結(jié)構(gòu)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包,會(huì)在META-INF 文件夾下面多產(chǎn)生兩個(gè)文
5、件,一個(gè)是.SF文件,一個(gè)是.DSA或者.RSA或者.PGP.RSA (PKCS7 signature, MD5 + RSA).DSA (PKCS7 signature, DSA).PGP (Pretty Good Privacy Signature)2.1 MANIFEST.MF file包含每個(gè)文件,摘要算法,摘要值(base64編碼)· the file name,· the name of the digest algorithm used (SHA), and· a SHA digest value.摘要值計(jì)算的是文件的二進(jìn)制內(nèi)容。2.2 The Sig
6、nature (.SF) File包含每個(gè)文件,摘要算法,摘要值(base64編碼)· the file name,· the name of the digest algorithm used (SHA), and· a SHA digest value.這里的摘要值計(jì)算的不是文件本身,而是MANIFEST.MF中對(duì)應(yīng)文件的3行字符串。2.3 The Signature Block (.RSA) File簽名是對(duì).SF文件簽名,對(duì)應(yīng)的數(shù)字簽名本身,以及證書鏈全部放在.RSA文件里。3 JAR包完整性驗(yàn)證3.1 校驗(yàn).SF文件的簽名簽名過程是對(duì)SF文件的內(nèi)容做了摘
7、要計(jì)算,又對(duì)摘要值做了私鑰加密;驗(yàn)證過程是使用公鑰解密,把解密出來(lái)的摘要和重新從SF文件計(jì)算出來(lái)的摘要做對(duì)比。公鑰是包含在證書里面,證書又包含在PKCS7 SignedData數(shù)據(jù)塊里面,這個(gè)數(shù)據(jù)塊就是RSA文件。同時(shí)這個(gè)PKCS7 SignedData數(shù)據(jù)里包含加密后的密文,即signature部分。3.2 比較SF文件里面的條目和manifest文件中的條目;SF文件頭部有一個(gè)摘要是對(duì)整個(gè)manifest文件的,如果通過了匹配,則直接到下一步,不用匹配每個(gè)文件條目;如果整個(gè)manifest文件摘要匹配不成功,則需要挨個(gè)匹配每個(gè)SF文件里面的條目。這種情況一般發(fā)生在,做完數(shù)字簽名后,又向ja
8、r包里新加了其它文件,這個(gè)時(shí)候,manifest文件的內(nèi)容會(huì)變化,但是SF文件不會(huì),所以SF文件的條目可能會(huì)比manifest的條目少。如果是這種情況,那么校驗(yàn)也算是通過。3.3 按照.SF文件的條目,挨個(gè)讀取文件,計(jì)算摘要,和manifest對(duì)比;3.4 多個(gè)簽名多人可以對(duì)同一個(gè)JAR包簽名,如: jarsigner myBundle.jar susan jarsigner myBundle.jar kevin那么會(huì)出現(xiàn): SUSAN.SF SUSAN.DSA KEVIN.SF KEVIN.DSA可以分別對(duì)不同人的簽名做驗(yàn)證。4 不同任務(wù) 4.1 校驗(yàn)JAR包的完整性:需要整個(gè)JAR包, 驗(yàn)
9、證簽名 + 驗(yàn)證文件的SHA1摘要值jarsigner -verify -verbose -certs myTest.jar4.2 驗(yàn)證簽名:需要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證書指紋,其實(shí)就是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 手動(dòng)校驗(yàn)簽名6.1 計(jì)算.SF文件的MD5值,得到加密前明
17、文內(nèi)容rootlocalhost pkcs7# md5sum ./123/META-INF/IHOKIIX.SFc7c03c1369cf6d7733912abe4409ee08 ./123/META-INF/IHOKIIX.SF6.2 解密數(shù)字簽名,和明文做對(duì)比整個(gè)的.RSA文件是一個(gè)符合PKCS7 SignedData規(guī)范的數(shù)據(jù)塊,里面包含證書,數(shù)字簽名。下面提到的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 提取簽名部分簽名過程為,首先計(jì)算.SF文件的摘要,一般是MD5,然后對(duì).SF文件的摘要值進(jìn)行私鑰加密,加密后的內(nèi)容為1024或者2048位,取決于位數(shù)。加密后的內(nèi)容一般在pkcs7數(shù)據(jù)塊的最后面,使用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 對(duì)簽名部分進(jìn)行解密(使用公鑰)# 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. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 南京工業(yè)大學(xué)《公共部門人力資源管理》2021-2022學(xué)年第一學(xué)期期末試卷
- 卡車掛靠協(xié)議合同范例
- 古墓修復(fù)施工合同范例
- 公司借法人款合同范例
- 產(chǎn)業(yè)合作協(xié)議合同范例
- 04版專利實(shí)施許可合同:新能源技術(shù)創(chuàng)新專利應(yīng)用許可
- 2024年廣告投放合同協(xié)議書(效果營(yíng)銷)
- 2024城市智能交通信號(hào)控制系統(tǒng)合同
- 2024國(guó)有企業(yè)物資采購(gòu)與運(yùn)輸協(xié)議
- 2024國(guó)際市場(chǎng)營(yíng)銷合作合同
- 2022年中國(guó)出版業(yè)總體狀況分析
- BIM大賽題庫(kù)含答案
- (完整版)譯林版四年級(jí)上冊(cè)Unit7單元測(cè)試
- 吊索具檢查記錄表
- 商務(wù)接待申請(qǐng)表
- 最新少先隊(duì)基礎(chǔ)知識(shí)競(jìng)賽題庫(kù)(含答案)
- 衛(wèi)生院在全院實(shí)行工作日午間禁酒的規(guī)定
- XX鎮(zhèn) 2022年度溫室大棚項(xiàng)目可研報(bào)告范本
- 各種能源排放因子
- 船體結(jié)構(gòu)介紹課件
- 鼻腔沖洗專業(yè)知識(shí)講座課件
評(píng)論
0/150
提交評(píng)論