安全知识

怎么判断 APK 是不是官方原版:看签名证书指纹

在网上找海外应用的安装包,最大的风险不是下载失败,而是下到一个「看起来一模一样」的改版:可能被塞了广告、被植入了窃取账号的代码,或者干脆是仿冒品。

图标、名字、版本号都可以伪造,签名证书伪造不了。这篇文章讲清楚为什么,以及怎么自己核对。

签名证书是什么

每个安卓应用在发布前,都必须由开发者用自己的私钥签名。签名信息里包含开发者的证书,证书可以算出一个唯一的「指纹」(通常用 SHA-256 表示,是一串 64 位的十六进制字符)。

关键在于:

  1. 改包必须重签。 安装包里的任何内容被修改后,原签名就失效了。改包的人手里没有开发者的私钥,只能用自己的证书重新签名,指纹就变了。
  2. 系统会拦截签名不同的更新。 安卓只允许用同一证书签名的安装包覆盖升级。所以如果你先装了改版,以后想换成官方版,系统会提示签名冲突,必须先卸载。

因此,只要指纹和开发者的官方指纹一致,就能确定安装包出自开发者本人。

在手机上查看签名

推荐使用开源工具 App Manager(可在 F-Droid 获取),它可以直接查看安装包文件或已安装应用的签名:

  1. 用 App Manager 打开 APK 文件,或在已安装应用列表里点开对应应用。
  2. 进入「签名」(Signatures)页。
  3. 查看证书的 SHA-256 值,与官方指纹逐位对照。

在电脑上查看签名

安装 Android SDK 的 build-tools 后,用自带的 apksigner:

apksigner verify --print-certs 应用名.apk

输出中 Signer #1 certificate SHA-256 digest:(新版工具显示为 V2 Signer: certificate SHA-256 digest:)后面的值就是指纹。

对于 XAPK、APKS 等分包格式,先用解压软件解开,里面每个 .apk 文件的签名都应该相同。

注意「密钥轮换」

从 Android 9 开始,开发者可以把签名证书换成新的一把,同时在安装包里保留新旧证书之间的「传承记录」。YouTube、Instagram、WhatsApp、Signal 等应用都做过这样的轮换。

这时 apksigner 会同时列出旧证书和新证书,Android 13 及以上的系统使用新证书验证,旧系统使用旧证书验证。核对时两个指纹都应该是官方的。

常见应用的官方签名指纹

以下指纹由赶海从多个互不相关的下载渠道交叉核对得出(2026 年 9 月):

应用 签名证书 SHA-256
Telegram 49C1522548EBACD46CE322B6FD47F6092BB745D0F88082145CAF35E14DCC38E1
Signal(原始证书) 29F34E5F27F211B424BC5BF9D67162C0EAFBA2DA35AF35C16416FC446276BA26
Signal(轮换后) 4BE4F6CD5BE844083E900279DC822AF65A547FECC26ABA7FF1F5203A45518CD8
Firefox A78B62A5165B4494B2FEAD9E76A280D22D937FEE6251AECE599446B2EA319B04
X 0FD9A0CFB07B65950997B4EAEBDC53931392391AA406538A3B04073BC2CE2FE9

Signal 在官网(signal.org/android/apk)公布的是轮换后的新证书指纹,与上表一致。其他应用如果开发者公布了指纹,以开发者公布的为准。

赶海是怎么做的

  • 入库时:每个应用都从多个来源下载,签名证书完全一致才记为官方证书;之后每个新版本都必须和官方证书一致才能上架。
  • 安装时:安装包下载到你的手机后,赶海会重新计算文件指纹并读取签名证书,两项都对得上才交给系统安装。

即使不用赶海,也建议养成习惯:从非官方渠道下载的安装包,装之前先看一眼签名。