檢查app的證書和簽名
對Android簽名
驗證app的簽名
命令行代碼:
<pre>
[進入文件目錄]
cd [文件目錄]
[復制文件并重命名]
cp [apk文件名] [zip文件名]
[解壓文件]
upzip [zip文件名]
[查看文件]
cat [文件名]
[查看證書內容]
keytool -printcert -file META-INF/CERT.RSA
[生成簽名文件]
keytool -genkey -v -keystore storename -alias keyname -keyalg RSA -keysize 2048 -validity [有效天數]
[apk重簽名]
jarsigner -verbose -sigalg MD5withRSA -digestalg SHA1 -keystore storename [.apk文件] [密鑰別名alias]
[驗證apk]
jarsigner -verify -verbose [apk路徑]
</pre>
<h3>1. 檢查app的證書和簽名</h3>
app的證書是在唄推送到app市場的app中,表示開發者身份的。它是以把開發者的id和他們的app以密碼學的方式關聯起來的方式實現的。通過提供一個簡單又有效的確認和強制保證Android app完整性的機制,app的簽名確保了沒有哪個app會被其它app所冒充。所有的app在被安裝之前,都必須通過簽名。
Andorid app的簽名實際上是對JAR簽名的重新利用,它的工作原理是用一個密碼學意義上的hash的。這個hash隨后會與一張表示開發者身份的證書綁定在一起并發布出來,即把它與開發者的公鑰,實際上也就是和他的私鑰(因為他們語意上是相關的)聯系在一起。證書通常是由開發者私鑰加密的,這也就意味著,他是自簽名的證書,沒有可信的第三方(例如數字證書認證機構,簡稱CA)開發者確實擁有給定的公鑰這一事實,這一個過程產生了一個簽名,并隨著這個公鑰一起被發布或公開出來。
每一個app的簽名都是唯一的,找出app的證書和簽名是一個重要的技能,你可能會需要在一個設備上找出惡意app的簽名,或者你也有可能需要把使用同一個公鑰簽名的app全部列出來。
下面就是檢查app證書和簽名的步驟和命令
我們需要的工具:jdk,adk,winzip
首先進入命令行,進入到我們需要處理的apk文件目錄,將apk轉成zip并解壓縮出來
cd [文件目錄]
cp [apk文件名] [zip文件名]
upzip [zip文件名]
找到META-INF文件夾,你會發現里面有一個CERT.RSA文件,這個就是證書的自簽名,我們可以使用jdk 自帶的keytool工具來查看其中的內容
keytool -printcert -file META-INF/CERT.RSA
CERT.SF文件存儲著資源文件的hash值
在使用jarsigner工具驗證app的內容時,它會計算CERT.SF文件中列出來的hash,并將其與列在每個資源文件的數字進行比較。
META-INF文件夾分析
MANIFEST.ME:這個文件聲明了資源,與CERT.SF文件相似
CERT.SF:包含app中所有資源文件的簽名,負責對app進行簽名,其中含有JAR指定密碼學意義的簽名
CERT.RSA:這個文件是公鑰證書,內容包括五個區域:owner(擁有者),issuer(頒發者),Serial number(序列號), Valid fromm ...util(有效期),Certificate fingerprints(證書校驗)
數字簽名的計算方法是用可信第三方的私鑰加密證書,在大多數Android app中,這個"可信第三方"就是開發者,這也就意味著這個簽名是用它的私鑰加密證書而生成的,這樣使用數字簽名可能從功能上是正確的,但并不像依賴于數字證書認證機構那樣的強壯。
<h3>2. 對App簽名</h3>
所有的Android app在唄安裝到Android設備上之前,都必須通過簽名。我們可以利用android的IDE很方便地進行簽名。有時候我們也可以裝逼一下,用命令行來實現應用簽名。
Android app中的簽名,使用的實際上是JAR的簽名機制,主要用于驗證java class文件的開發者。Android項目相對與Java項目來說,還用很多的元數據和資源,所以Android把這些額外的內容也添加到了簽名和驗證的過程。
對APP的簽名步驟
- 獲取一個還沒簽名版本的apk(如果已經簽名了,那么就刪除該簽名)
1.1 解壓apk解壓出來后刪除META-INF文件夾
1.2 重新壓縮生成apk文件 - 使用命令行創建一個自己的簽名文件
keytool -genkey -v -keystore storename -alias keyname -keyalg RSA -keysize 2048 -validity [有效天數]

- 對應用通過jarsign進行重簽名
jarsigner -verbose -sigalg MD5withRSA -digestalg SHA1 -keystore storename [.apk文件] [密鑰別名alias]
<h3>3. 驗證app簽名</h3>
jd里面有一個jarsigner的工具,我們需要做的就是執行一下的命令
jarsigner -verify -verbose [apk路徑]