Android簽名與認證詳細分析之二(CERT.RSA剖析)

大搜車-自娛發表於2014-10-08

一、Android證照的格式

Android簽名中證照的格式採用X.509標準的版本三,不過省略了一些內容。

X.509證照格式如下圖所示:

二、證照的格式示例

從Chrome瀏覽器中匯出一個證照,開啟之後的樣子如下圖所示:

說明:由上圖可以看出,在證照中,開發者的公鑰是顯式存在的。

三、對CERT.RSA進行詳細解析

重要說明:編寫Java程式和編寫Android應用App解析Apk的CERT.RSA檔案,得到的結果是不一樣的。按道理,都是解析的同一個檔案,為什麼結果不一樣呢?經過我們分析,發現不一樣的地方是開發者公鑰,但是這是由於二者的顯示格式不同導致的。App解析得到的檔案時十六進位制顯示的,而Java解析得到的結果卻是十進位制顯示的。我們利用Java的BigInteger編寫程式,將十六進位制轉換為十進位制,驗證了我們的猜想。

明確了上面的問題之後,對CERT.RSA 檔案進行詳細解析,得到下圖:

說明:

(1)首先,我們的通常所說的證照的簽名,是生成證照的時候CA對整個證照的所有域簽名的得到的,而不是對某一部分簽名得到的。整個簽名就是上圖中部分一的最下面的一段十六進位制的內容;

(2)程式設計中的獲取到的內容實質上是就是上圖中的部分二,這是一個證照的所有內容;

(3)部分一種的公鑰等資訊就是從部分二中得來的,可以直接在部分二中找到。

(4)可以猜測,部分一中的其他資訊也是從部分二中得來,只不過編碼方式不一樣,所以顯示不同而已。

相關文章