題:
如何驗證我下載的APK文件的真實性?
Nathan Fellman
2011-05-14 18:57:40 UTC
view on stackexchange narkive permalink

我的國家/地區不提供Google Maps的最新更新,因此我通過谷歌搜索“ Google Maps 5.4.0 apk”下載了一個版本。我確實找到了它,但是現在我不知道如何分辨它是否實際上與市場上的版本相同。

我如何確定它沒有被篡改?應用是否以任何方式簽名?有什麼辦法可以檢查簽名?

如果您從手機訪問以下頁面:m.google.com/maps,它是否提供下載鏈接或類似內容?
@Nicolás:它與市場鏈接,因此無法下載。
由於您的問題最近已被編輯,因此您從何處下載它。我使用http://gappsandroid.blogspot.com/,我已經交叉引用了某些應用程序,並且所有這些應用程序都將MD5金額與Play商店中的官方發布的應用程序進行了匹配。
相關https://stackoverflow.com/questions/12785001/verify-android-apk-has-not-been-repackaged
如果您有另一個來自同一供應商的“真實”應用程序,則可以比較兩個應用程序是否使用相同的密鑰/身份進行簽名:https://android.stackexchange.com/a/208326/2241
五 答案:
Chris Stratton
2011-05-15 07:46:18 UTC
view on stackexchange narkive permalink

避開關於在手機上安裝該應用程序的合法性的辯論,驗證問題是我一直想理解的一個問題,您已經促使我嘗試找出一種可行的方法

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標誌以告訴您已使用了哪些證書對每個文件進行簽名,因此您可以確保它是您驗證的證書)

@Chris Stratton是否可以從設備上複製Google Maps apk?然後,您可以按照您所說的檢查證書。
此外,您可以使用以下應用程序從設備中提取APK: https://play.google.com/store/apps/details?id=com.ext.ui&hl=zh_CN最佳, 保羅[由主持人Firelord編輯]
kahbou
2017-01-13 13:15:48 UTC
view on stackexchange narkive permalink

(現在) build-tools 中有一個 apksigner 工具可以滿足您的需求。從 docs

檢查是否希望在APK支持的所有Android平台上確認APK簽名是否有效:

  apksigner驗證[選項] app-name.apk  
Robert
2019-11-01 21:45:20 UTC
view on stackexchange narkive permalink

驗證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文件。

這是最有幫助的答案,謝謝!我使用了“ apksigner”來比較來自我從Google App Store獲得的同一位開發人員的應用程序和從ApkMirror獲得的應用程序的證書。
raddevus
2019-02-11 21:17:17 UTC
view on stackexchange narkive permalink

您還可以嘗試將APK上傳到免費的 VirusTotal.com病毒檢查器。它將為APK生成一個唯一的哈希,如果其他人已經(非常可能)已經將其上傳以對其進行測試,則您將更加了解APK是有效的。

該服務還將掃描具有60多種病毒掃描程序的APK,如果您認為它具有與已經發現的病毒相似的簽名,就會告訴您。

我不信任病毒檢查,因為這些防病毒程序只關注曾經分發的每個Android APK。另外,除了之前已上傳相同文件外,MD5不會告訴您太多信息。
@Stan-它將掃描文件中的字節以查找惡意軟件字節。它不必知道曾經分發的每個APK。另外,它不是MD5,而是SHA256,還有一些其他信息,如果這是第一次上傳APK,那麼可能是未知的,更可能是惡意的。另外,大多數有效的APK可能都在那裡。為什麼不將其作為其他使用工具作為分析的一部分呢?它可以提供對程序包的另一種置信度或不置信度。您不必將其視為最終的詞彙,而應將其視為更多數據
好的,我同意它作為附加資源很有用,不僅是唯一的資源。
Nozalys
2016-11-08 16:11:54 UTC
view on stackexchange narkive permalink

要比較可疑apk文件中的證書,也許一個主意是將其版本下載到手機的官方Play商店中,在計算機上進行備份並進入備份目錄,選擇相關的apk文件並執行同樣的檢查。您也可以通過在設備默認應用程序(如com.google.android。* apk)上進行檢查來查看Google證書



該問答將自動從英語翻譯而來。原始內容可在stackexchange上找到,我們感謝它分發的cc by-sa 3.0許可。
Loading...