2016-10-17 133 views
2

假設我們有一個APK文件,在文件系統中的Android設備上訪問,怎能從其他Android應用:該APK文件還沒有被篡改(即其數字簽名我們如何檢查尚未安裝的APK的簽名?

  • 確認匹配其內容)?

  • 獲取公鑰信息(具體來說,keytool -list -printcert -jarfile test.apk將在開發機器上發出的SHA256哈希相同)?

請注意,此APK尚未安裝在這一點上,所以我們不能用PackageManager檢索已安裝的應用程序的「簽名」,也不是我們可以依靠的Android已經驗證了APK簽名給我們。

+0

可能是在這裏的答案可以幫助你:http://stackoverflow.com/q/7104624/4350275 –

+0

@Prera​​kSola:該代碼是運行在開發人員的機器上。這不是在Android本身上運行,這就是這個問題關注的問題。不過謝謝! – CommonsWare

+1

你應該可以使用[PackageParser.java](https://github.com/android/platform_frameworks_base/blob/master/core/java/android/content/pm/PackageParser.java)code ... fx:你可以閱讀[this](https://gist.github.com/SelvinPL/fe855fb4d12f08a8d6b3becffdc7c458)等證書,然後將其與META-INF/CERT.SF – Selvin

回答

0

我對此完全嗤之以鼻。 PackageManager有一個getPackageArchiveInfo()方法,從API級別1開始可用。

因此,您可以調用該方法,將路徑傳遞到APK以及PackageManager.GET_SIGNATURES。如果您收到null,APK已被篡改,並且沒有有效的數字簽名。如果您收到PackageInfo,它將會有「簽名」,您可以將其用於比較目的。