引言
從Android演進開始,APK籤名就已經成為Android的一部分,並且android要求所有Apks都必須先籤名,然後才能將其安裝在設備上。關於如何生成密鑰以及如何籤名的文章很多。一個Apk,但我們將從安全角度進行研究。在對Apk文件進行反編譯或反向工程之後,應查看哪個文件,以獲取有關最初對應用進行籤名的開發人員的更多信息。
反編譯APK文件
解壓縮文件或使用apktool後,取決於如何對文件進行反編譯,如果解壓縮文件,則文件結構將如下所示。
我們正在查看META-INF文件夾,
正在查看使用Apktool進行的反編譯Apk,它在原始文件夾中包括有關開發人員的證書詳細信息以及所使用的哈希算法的類型等,並檢查META-INF文件夾。
當您當前仍位於META-INF文件夾中時,使用keytool檢查證書。
keytool -printcert -file DROIDRDR.RSA
根據證書別名的名稱,從證書頒發之日和證書設置為過期起,您將看到所有者,國家/地區,頒發者,證書有效性的不同信息。
MD5,SHA1和SHA256中的證書指紋以及所使用的籤名算法。
之前,我們談論了生成證書,讓我們從安全角度來看它,在分析您從第三方網站下載的Android應用程式時,您可以反編譯該應用程式並查看該證書並將其與原始應用程式進行比較,在使用的哈希算法上,如果應用程式可能已被修改或篡改,則將其進行比較驗證。
生成Android證書
如果您反編譯並重新編譯android應用程式,則需要對應用程式進行籤名,如果不籤名,則該應用程式將不會安裝在用戶設備上。有多種生成證書的方法,但是,我們將介紹使用keytool生成證書的三種方法。
方法1:
打開您的終端:
keytool -genkey -v -keystore awwal -alias hafsa -keyalg RSA -keysize 2048 -validity 365
其中 awwal —是密鑰庫名稱,hafsa是證書別名,使用後將被添加到META-INF文件夾-keysize 2048中,但是您可以使用4096大小,但是設備存在與此有關的問題或者。但僅使用2048,有效期為幾天。
方法2:
使用可在此處下載的apk-signer.jar。這是用Java編寫的GUI,可生成證書並進行籤名一個APK文件。儘管Playstore中也有一個Android應用程式。
籤署Android應用程式
在您已經生成了Android應用程式之後,我們將研究如何對應用程式進行籤名,運行您的終端:
jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore awwal medium.apk hafsa
其中-sigalg是使用的籤名算法,您可以使用MD5找到一些應用程式,但是在驗證應用程式時使用SHA1,因為它將告訴您使用的哈希算法以及使用的算法的弱度。
密鑰庫— awwal是生成證書時使用的密鑰庫名稱的名稱,hafsa是證書的別名,而medium.apk是要籤名的應用程式的名稱。
注意:如果您使用MD5,則該應用程式將被視為未籤名應用程式,因為用於籤署應用程式的算法很弱。
驗證Android應用程式
使用jarsigner驗證應用程式,以查看資源籤名列表以及具有keysize的哈希算法。
打開您的終端:
jarsigner -verify -verbose medium.apk
其中僅驗證將顯示它是籤名還是未籤名,並使用詳細選項查看證書的完整詳細信息。
或者,您可以使用Apk籤名者來自動完成文件名驗證應用。
寫在最後
雖然上面我們使用的都是 java 工具鏈的東西,其實生成的 CERT.RSA 文件內,包含了公鑰鏈,也完全可以使用 openssl 工具列印出 pubkey 證書文件,並可做進一步的指紋校驗。
關鍵是生成籤名的方法,這個對於使用不同的工具復現過程很關鍵。
Happy coding :_)
我是 @程式設計師小助手 ,持續分享編程知識,歡迎關注。