驗證 APK 簽名:如何確保您的應用程式安全
Android 上的側載應用程式提供了自由和靈活性,但也帶來了重大風險:被篡改的應用程式。惡意行為者經常修改流行的應用程式以包含間諜軟體或廣告軟體,然後再將它們重新分發到非官方網站上。您如何確定您剛下載的 APK 與開發者上傳到 Google Play 的 APK 完全相同?
答案歸結為APK數位簽名。下面,我們將介紹應用程式簽署的實際工作原理,並在您決定信任 APK 之前使用 線上 APK 驗證器 檢查 APK 的雜湊值和憑證。
60秒版本:
Android 使用發布者金鑰對每個 APK 進行簽署。手機拒絕簽署與現有安裝不符的「更新」;這是作業系統的主要反仿冒防禦措施。要驗證旁載入的 APK,請計算其 SHA-256 雜湊及其簽章憑證指紋,然後將兩者與您信任的值(現有的 Play 商店安裝、開發人員發布的指紋或已知良好的早期副本)進行比較。匹配意味著文件位元組相同並且由同一發布者簽署;不匹配意味著 不要安裝。
什麼是 APK 簽名?
數位簽章是身分的加密證明。當開發人員完成應用程式時,他們使用私鑰(金鑰庫)對其進行「簽署」。然後,Android 使用 APK 中嵌入的相應公鑰來確保:
- 正直: 檔案自簽名以來未曾更改。
- 真實性: 開發人員就是他們所說的。
- 更新: 只有使用相同金鑰簽署的 APK 才能更新手機上的現有應用程式。
簽名的演進:V1、V2、V3 和 V4
Google 多年來不斷提高 APK 安全性:
- V1(Jar 簽名): 簽署 ZIP 中的各個條目。緩慢且容易受到某些攻擊。
- V2(APK簽章方案): 對整個檔案區塊進行簽署。驗證速度更快且更安全。 (Android 7.0+)
- V3(密鑰輪換): 允許開發人員在維護應用程式更新的同時更改其簽署金鑰。 (Android 9.0+)
- V4(串流媒體): 針對透過 ADB 的增量安裝進行了最佳化。 (Android 11+)
如何在線驗證APK簽名
我們的APK驗證工具不只是計算哈希值;它對憑證鏈執行完整的加密審核。以下是如何使用它:
驗證步驟:
- 導航至 APK驗證器 頁面。
- 選擇您的 APK 或 XAPK 檔案。
- 我們的工具解析 META-INF/ 目錄並擷取憑證資料(.RSA、.DSA 或 .EC)。
- 等待分析完成(只需幾秒鐘)。
- 請參閱 證書資訊:開發者名稱、組織和原籍國。
- 檢查 哈希值:將我們網站上顯示的 SHA-256 與發布者在其自己的官方網站、專案發布頁面或簽名清單上發布的值進行比較。
安全警告
如果验证程序显示 《調試證書》 或 Facebook 或 WhatsApp 等主要应用程序的未知“自签名”实体,则为 不要安裝它。幾乎可以肯定它已受到損害。
了解校驗和(MD5、SHA-1、SHA-256)
校驗和是代表整個檔案的固定長度字串。如果變更應用程式圖示中的單一像素,SHA-256 雜湊值將完全變更。
| 哈希類型 | 安全等級 | 筆記 |
|---|---|---|
| MD5 | 遺產 | 容易受到碰撞。不是為了安全。 |
| SHA-1 | 緩和 | 仍然廣泛用於快速查找。 |
| SHA-256 | 出色的 | 應用程式驗證的現代標準。 |
簽名證書實際上告訴您什麼
當驗證者傳回憑證時,對側載安全重要的部分不是 X.509 元資料的彩色部分,而是一小部分欄位。實際上:
- 證書的 SHA-256 指紋。 这是最重要的一个值:唯一标识签名密钥的 64 十六进制字符散列。具有相同 SHA-256 指纹的两个 APK 由相同的私钥签名。這就是作業系統更新邏輯中「簽章連續性」的意思。
- 主題專有名稱。 通常類似於 CN=Some App, O=Example Inc., C=US。作為 暗示 很有用,而不是作為身份證明,因為攻擊者可以將他們喜歡的任何字串放入自己的自簽名憑證的 DN 中。務必交叉檢查指紋,而不是姓名。
- 有效期限。 大多數合法發布金鑰的產生有效期約為 25 年(歷史建議為 10000 天)。下個月到期的證書或其有效期已經與過去重疊的證書是一個危險信號。
- 簽名演算法。 現代應用程式使用 SHA256withRSA 或 SHA256withECDSA。 MD5 壞了;SHA1withRSA 已棄用。僅使用 v1 / SHA-1 簽署的 APK 在 2026 年是可疑的。
哈希與簽名:大多數教程都會跳過的區別
人們經常將“哈希”和“簽名”混為一談。它們的用途截然不同,安全驗證需要:
- 散列(整個 APK 的 SHA-256)告訴您檔案的位元組是否與參考副本相同。如果您的雜湊值與發布者發布的雜湊值匹配,則自他們計算該雜湊值以來,該檔案尚未更改。僅哈希檢查並不能說明誰創建了位元組。
- 簽名 證明誰創建了這些字節,特別是與簽署憑證配對的私鑰的持有者產生了該檔案。僅簽章檢查並不能說明檔案在簽章後是否已被竄改(作業系統會偵測到並拒絕它,但憑證本身並不「知道」檔案內容)。
對於旁加載 APK,最強有力的保證將兩者結合起來:證書指紋與發布者的已知指紋 和 相匹配,文件的 SHA-256 與發布者為該確切版本發布的值相匹配。
哪裡可以獲得值得信賴的參考指紋
驗證最困難的部分是知道要比較的正確值。一些可靠的方法,按可信度大致順序排列:
- 發布者自己的網站或發布頁面。 許多開源專案和具有安全意識的供應商在下載時發布其簽名證書的 SHA-256 指紋。這是黃金標準。
- 現有的 Play 商店安裝。 如果應用程式已安裝在 Play 管理的裝置上,則根據定義,其憑證指紋是發布者的指紋。將側載 APK 的指紋與其進行比較。 Apk 分析器(在 Android Studio 中)或 apksigner verify --print-certs 等工具直接從已安裝的 APK 中讀取它。
- 您安裝的此應用程式的第一個 APK。 如果您已經使用該應用程式一段時間並且從未出現過「簽名不符」提示,則可以使用任何舊版本作為參考。來自同一發布者的後續更新必須使用相同的金鑰(或透過 v3 進行輪換,在這種情況下鏈仍會進行驗證)。
- 存檔的公共快照。 網路檔案館和類似服務有時會保留舊的 APK 發布頁面及其聲明的雜湊。對於原始發布者頁面已消失的非常舊的版本非常有用。
常見驗證錯誤
- 比較錯誤的字段。「APK檔案的MD5」與「證書的MD5」不同。對候選文件和參考使用相同的欄位。
- 信任文件自己的元資料。 APK 可以在其清單中包含任何版本字串、任何套件標籤、任何作者標籤。這些都不是加密的。簽名區塊是作業系統實際驗證的唯一內容。
- 由於文件是由朋友發送的,因此跳過驗證。 說「這是官方APK」的朋友跟你一樣沒有驗證過。堅持使用發布您可以檢查的指紋的來源。
- 處理一個符合欄位就足夠了。 匹配檔案的 SHA-256 和憑證的 SHA-256 指紋;符合一個而不匹配另一個是位元組被更改或來源冒充發布者的標誌。
- 為了「方便」而停用 Play Protect。 Play Protect 是一種第二意見掃描器,不能取代簽章驗證,但它可以擷取簽章驗證無法擷取的實際惡意軟體,因為 Protect 透過內容(而不是透過簽章金鑰)來了解已知的不良軟體包。保持開啟狀態。
常見問題 (FAQ)
為什麼 Android 阻止我安裝修改過的 APK?
因為新 APK 的簽章與已安裝的簽章不符。這可以防止駭客用假銀行應用程式「覆蓋」您真正的銀行應用程式。
APK修改後可以重新簽章嗎?
是的,但您將使用 不同的鑰匙。該應用程式仍將安裝在「乾淨」的手機上,但它將不再接收來自原始開發人員的更新。
什麼是證書固定?
這是一項高級安全功能,應用程式在與其伺服器通訊之前明確檢查特定證書,從而使被篡改的應用程式即使安裝正確也毫無用處。
讓簽名驗證成為每個旁加載的一部分
簽名在現代 Android 安全性中承擔著許多繁重的工作。花額外的幾秒鐘透過 APK驗證器 運行檔案是一種廉價的方法,可以在安裝被篡改的應用程式之前使其遠離您的裝置。