日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android APK 签名文件MANIFEST.MF、CERT.SF、CERT.RSA分析

發布時間:2023/12/19 Android 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android APK 签名文件MANIFEST.MF、CERT.SF、CERT.RSA分析 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

首先我們找一個已經簽名的apk文件,修改后綴名為zip,然后解壓。可以看到里面有一個META-INF文件夾,里面就是簽名驗證的文件。有三個文件MANIFEST.MF、CERT.SF、CERT.RSA分別保存著不同的簽名信息,下面一個一個來分析:

首先是MANIFEST.MF文件,打開MANIFEST.MF文件如下:

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

Name: res/layout/main.xml
SHA1-Digest: TKJzyMwELyakLZYM83o10LERyPQ=

Name: AndroidManifest.xml
SHA1-Digest: vf51A+/qPTUhmRyQmU6GS83eO9Y=

Name: res/drawable/keys.png
SHA1-Digest: 3nPhCCVKGHdAha70YYcNvESbv5g=

Name: resources.arsc
SHA1-Digest: uh4vliR9xNyjDpU3d+WmfzTIumE=

Name: classes.dex
SHA1-Digest: S83QHv3CvsRo3e4gWNpZpvifWzg=

可以看到每一個對應的文件下面都有一個SHA1-Digest的值。這個值為該文件SHA-1值進行base64編碼后的結果。

來驗證一下:

首先獲取文件的SHA-1值如下為:4CA273C8CC042F26A42D960CF37A35D0B111C8F4

復制該值到winhex中,如下:

另存為文件sha1,然后使用base64工具對該文件進行base64編碼:

查看base64文件的內容為:TKJzyMwELyakLZYM83o10LERyPQ=

和上面值完全吻合。

還可以通過查看源碼進行驗證:http://androidxref.com/4.4_r1/xref/build/tools/signapk/SignApk.java

也可以看出MANIFEST.MF中保存了所有其他文件的SHA-1并base64編碼后的值。

MANIFEST.MF文件分析完了,我們繼續來分析CERT.SF這個文件,查看文件內容如下:

Signature-Version: 1.0
Created-By: 1.0 (Android)
SHA1-Digest-Manifest: Uin+pH/oQLOt1Esnw9TTJpf8URc=

Name: res/layout/main.xml
SHA1-Digest: +zm+W/d5nXnQRHhQq1BeXsj4sWU=

Name: res/drawable/keys.png
SHA1-Digest: 9CMNr6u3Zg/XymrpDC4NH/Qb+GE=

Name: AndroidManifest.xml
SHA1-Digest: q4qz8AP4LsfMh0TWEgTcSif6eqg=

Name: resources.arsc
SHA1-Digest: U1T+Km9u0pHDYncmJTz+Fae35iU=

Name: classes.dex
SHA1-Digest: iOqu/znF0ISqd6UtTmA4d5isoQs=

從上面可以看到多了一項SHA1-Digest-Manifest的值,這個值就是MANIFEST.MF文件的SHA-1并base64編碼后的值。

源碼中也可以看出:

而后面幾項的值是對MANIFEST.MF文件中的每項再次SHA1并base64編碼后的值。

把MANIFEST.MF文件的第一項拿出來,加兩個\r\n:

Name: res/layout/main.xml
SHA1-Digest: +zm+W/d5nXnQRHhQq1BeXsj4sWU=

保存為文件,查看文件的SHA1值為:FB39BE5BF7799D79D0447850AB505E5EC8F8B165

復制到windex,然后使用base64進行編碼,結果為:+zm+W/d5nXnQRHhQq1BeXsj4sWU=

也就是上面CERT.SF文件中的第一項(SHA-1 + Base64)(MANIFEST.MF文件及各子項) ==? CERT.SF中各值)。

?###############################################################

最后一個文件CERT.RSA包含了公鑰信息和發布機構信息。

首先我們使用自己的公鑰對apk進行簽名然后再來查看該文件的信息。

下載openssl:http://openssl-for-windows.googlecode.com/files/openssl-0.9.8k_WIN32.zip

解壓進入bin目錄,執行:

openssl genrsa -3 -out testkey.pem 2048

成功生成:testkey.pem

openssl req -new -x509 -key testkey.pem -out testkey.x509.pem -days 10000

如有錯誤:Unable to load config info from?c:/openssl/ssl/openssl.cnf,把文件復制到這個目錄即可。

最后得到新簽名的new.apk文件,找到里面的CERT.RSA文件,使用下面的程序得到里面的信息:

package getCerFromCERTRSA;

import java.io.FileInputStream;
import java.security.cert.X509Certificate;

import sun.security.pkcs.PKCS7;

public class Test {
public static void main(String[] args) throws Exception {
FileInputStream fis = new FileInputStream(“F:\\CERT.RSA”);
PKCS7 pkcs7 = new PKCS7(fis);
X509Certificate publicKey = pkcs7.getCertificates()[0];

System.out.println(“issuer1:” + publicKey.getIssuerDN());
System.out.println(“subject2:” + publicKey.getSubjectDN());
System.out.println(publicKey.getPublicKey());
}
}

輸出結果如下:

issuer1:EMAILADDRESS=AloneMonkey@163.com, CN=AloneMonkey, OU=Coder, O=Coder, L=changsha, ST=hunan, C=cn
subject2:EMAILADDRESS=AloneMonkey@163.com, CN=AloneMonkey, OU=Coder, O=Coder, L=changsha, ST=hunan, C=cn
Sun RSA public key, 2048 bits
modulus: 27930608814223381116057921387749214219559488459834487651049472010943787998241917988099072185267085555323069515811092018497891216669481600034343393035843203267770583265755751519703070241992378137769943338514083146152811868483298881047691082051273026613334389423463323096799738980315739301150294781233689740925257750884810644704745529309986744250843593240651888438182488344317720617399108875832748401930758903852667930580643990438517537220738513412902358548274823884382164690517621920930706694824579819829817712366306758824210255361732602763101633753447049235308644785379979711318126409377911209205177369163520192093063
public exponent: 3

就是剛剛我們輸入的信息。

PS:如果代碼出現找不到sun.security.pkcs.PKCS7時,解決方法是:右鍵工程屬性。

然后點擊Add:

總結:不同的程序公鑰不同。

簽名校驗:

1.程序自校驗,可以把原本的公鑰信息(或者.RSA文件)存放到某一文件處,運行時計算當前的公鑰信息(或者.RSA文件)與存放的信息是否一致。

2.聯網校驗,運行時的公鑰信息和服務器端存儲的公鑰信息進行比對。

本文鏈接:http://www.blogfshare.com/android-apk-sign.html

總結

以上是生活随笔為你收集整理的Android APK 签名文件MANIFEST.MF、CERT.SF、CERT.RSA分析的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。