我的國家/地區不提供Google Maps的最新更新,因此我通過谷歌搜索“ Google Maps 5.4.0 apk”下載了一個版本。我確實找到了它,但是現在我不知道如何分辨它是否實際上與市場上的版本相同。
我如何確定它沒有被篡改?應用是否以任何方式簽名?有什麼辦法可以檢查簽名?
我的國家/地區不提供Google Maps的最新更新,因此我通過谷歌搜索“ Google Maps 5.4.0 apk”下載了一個版本。我確實找到了它,但是現在我不知道如何分辨它是否實際上與市場上的版本相同。
我如何確定它沒有被篡改?應用是否以任何方式簽名?有什麼辦法可以檢查簽名?
避開關於在手機上安裝該應用程序的合法性的辯論,驗證問題是我一直想理解的一個問題,您已經促使我嘗試找出一種可行的方法
Android應用程序是以.jar文件的常規方式簽名的。(。apk實際上只是一個特殊的.jar,而這只是一個特殊的.zip),但對於 trace 證書的真實性,除非您知道有什麼可比較的好東西。這基本上就是電話本身的功能-驗證聲稱與電話中已經存在的東西來自同一方的東西-電話不會拒絕安裝具有未知簽名者的東西,它只能(反對/清除應用程序)當新的東西與聲稱的舊東西不匹配時,就會出現明顯的偽造數據。我相信這些來自JDK,它是android SDK的先決條件,而不是SDK本身。
首先,您要嘗試驗證.apk中包含的公鑰。通常這在META-INF / CERTS.RSA中,但可以在另一個文件中-解壓縮-l會告訴您。您想查看有關它的內容:
unzip -p懷疑.apk META-INF / CERT.RSA keytool -printcert
這將轉出很多有關簽名者聲稱是誰的信息。有些證書顯然是由已知方自己簽名的,但是如果不弄清楚該如何跟踪,我懷疑您可以這樣做:
unzip -p believe.apk META-INF / CERT。 RSA | keytool -printcert | grep MD5unzip -pknowngood.apk META-INF / CERT.RSA | keytool -printcert | grep MD5
如果您有使用相同證書的同一作者的已知受信任apk。我假設具有相同MD5總和的證書就足夠了。
假設您已決定信任證書,那麼可以查看該證書是否已用於對.apk中的每個文件進行簽名
jarsigner -verbose -verify懷疑.apk
(如果存檔中有多個.RSA文件,則應添加-certs標誌以告訴您已使用了哪些證書對每個文件進行簽名,因此您可以確保它是您驗證的證書)
(現在) build-tools
中有一個 apksigner
工具可以滿足您的需求。從 docs:
檢查是否希望在APK支持的所有Android平台上確認APK簽名是否有效:
apksigner驗證[選項] app-name.apk
驗證APK文件的正確方法是使用 apksigner
。
apksigner
是Android構建工具的一部分,因此您可能會發現安裝了多個版本,安裝的每個構建工具版本都包含一個版本。
一個示例路徑在Android SDK中 apksigner
是:
android-sdk / build-tools / 29.0.2 / apksigner
執行這樣的apksigner:
apksigner verify --verbose --print-certs“ Signal-website-universal-release-4.49.13.apk” VerifyVerified using v1 scheme(JAR signing):true v2方案(APK簽名方案v2):true已使用v3方案(APK簽名方案v3)進行驗證:簽名者數量:1簽名者#1證書DN:CN =耳語系統,OU =研究與開發,O =耳語系統,L =匹茲堡ST = PA,C = USSigner#1證書SHA-256摘要:29f34e5f27f211b424bc5bf9d67162c0eafba2da35af35c16416fc446276ba26Signer#1證書SHA-1摘要:45989dc9ad8728c2aa9a82fa55503e34a8879374Signer#1證書MD5b3db: lgorithm:RSASigner#1密鑰大小(比特):1024Signer#1的公開密鑰SHA-256消化:75336a3cc9edb64202cd77cd4caa6396a9b5fc3c78c58660313c7098ea248a55Signer#1的公開密鑰的SHA-1摘要:b46cbed18d6fbbe42045fdb93f5032c943d80266Signer#1的公開密鑰MD5摘要:0f9c33bbd45db0218c86ac378067538d<skipped很多warnings>的代碼>
現在您已經驗證了APK,但您仍然不知道是否可以信任簽署APK文件的個人/組織。這是因為在Android APK簽名中使用自定義證書。因此,如果您可以信任證書,將是一個難題。唯一的方法是檢查使用相同證書籤名的其他應用程序。
我知道的唯一方法是使用PlayStore抓取服務androidobservatory.org。它具有一個API,用於使用證書SHA-1摘要檢查由同一證書籤名的應用程序:
編輯:apkmirror.com還允許搜索證書摘要。只需在搜索字段中輸入普通的SHA-1或SHA-256證書摘要(不帶冒號或空格):
在此頁面上,您可以看到Google Play商店上所有其他使用相同證書籤名的APK文件。
您還可以嘗試將APK上傳到免費的 VirusTotal.com病毒檢查器。它將為APK生成一個唯一的哈希,如果其他人已經(非常可能)已經將其上傳以對其進行測試,則您將更加了解APK是有效的。
該服務還將掃描具有60多種病毒掃描程序的APK,如果您認為它具有與已經發現的病毒相似的簽名,就會告訴您。
要比較可疑apk文件中的證書,也許一個主意是將其版本下載到手機的官方Play商店中,在計算機上進行備份並進入備份目錄,選擇相關的apk文件並執行同樣的檢查。您也可以通過在設備默認應用程序(如com.google.android。* apk)上進行檢查來查看Google證書