今日精选 · 版本校验笔记

2 月 14 日晚上 21:47,我把两个来源的 imtoken 安装包放在同一个目录里,字节对不上。

同一个 v1 版本号,同一天下载,一个来自官方页面,一个来自第三方镜像站。SHA-256 差了 12 个字符,签名证书的序列号也完全不同。这篇把当晚的比对过程写清楚,包括每一步我动了什么、看到了什么。

作者:江晚 发布于 2026-02-17 阅读约 9 分钟 分类:版本校验

相关条目 · 8 条

同一主题下的零散记录,每条都对应一次具体的下载、解包或对话,按发现时间倒序排列。

工具

用 vivo X90 的内置浏览器打开校验页,结果卡在证书提示上

2 月 15 日上午,我在朋友老陈的 vivo X90 上复现这件事。内置浏览器对自签证书的处理逻辑和 Chrome 不一样,提示框只有「继续」和「取消」两个按钮,没有「查看详情」。具体绕法写在 澳门477477.cm的浏览器打开教程 里。

记录于 02-15 10:12
现象

在华为 Mate 60 上用 QQ 浏览器点开哈希文件,默认跳成了小说页

这不是段子。2 月 13 日下午 14:30,我把 .txt 后缀的哈希清单发到对方微信,他用 QQ 浏览器点了之后被重定向到一个在线阅读站。文件名里带「imtoken」和「清单」两个词,触发了它的内容识别。相关排查在 qq浏览器打开默认是小说 一文里有完整步骤。

记录于 02-13 15:05
素材

需要一批无版权图做校验流程配图,翻了 40 分钟后找到了办法

文章里要画下载路径、哈希比对、签名查看三个环节,图不能随便用。2 月 12 日晚上我按 正版图库资料免费订阅 里的方法整理了一份可用清单,共 27 张,全部标了来源和许可。

记录于 02-12 22:40
细节

APK 的 v1 签名文件 META-INF 里,三个条目时间戳差了 41 秒

官方包三个条目是连着的,同一分钟;镜像包里 CERT.RSA 比 MANIFEST.MF 早了 41 秒。这不是绝对证据,但足够让我起疑。

记录于 02-14 22:03
对话

凌晨给做安卓逆向的老周发消息,他回了一句「你先看包名」

2 月 15 日 00:26,我把两个包的截图发过去。老周今年 38 岁,在杭州做安全审计。他原话是:「版本号可以随便写,包名不能。先看 applicationId,再看签名。」

记录于 02-15 00:26
数据

两个包体积差 1.84 MB,解包后 assets 目录多出一个 27 项的配置表

官方包 46.2 MB,镜像包 48.0 MB。多出来的部分不是图片,是一个未加密的 JSON,内容指向三个不在官方域名列表里的接口。

记录于 02-14 22:31
时间线

2026 年 2 月 14 日 21:47 到 23:58,两个多小时里我只做了三件事

下载、比对、记录。中间喝了半杯凉掉的咖啡,把 SHA-256 抄在方格纸上一共 4 遍,前两遍都抄错了一位。

记录于 02-14 23:58
版本

「v1」这个后缀本身在三处出现,含义各不相同

安装包文件名里有 v1;应用内「关于」页显示的 build 号带 v1;官网下载按钮下的说明文字也写 v1。三处指的不是同一个东西,这一点值得单独说。

记录于 02-16 09:20

把「最新版」拆开看:一次基于 46.2 MB 安装包的逐项比对

2026 年 2 月 14 日晚上 21:47,我坐在书桌前,把两个 imtoken 安装包放进同一个文件夹:一个是从官方页面点下来的,46.2 MB;另一个是同事转给我的镜像站链接,48.0 MB。两个文件名里都写着 v1。我当时的第一反应不是怀疑,是好奇——同一个版本号,为什么体积能差将近 2 MB。

我先算哈希。命令行里跑了两遍,官方的 SHA-256 是 8f3c 开头,镜像的以 6a1d 开头,前六位就分开了。我把结果抄在方格纸上,抄第二遍的时候错了一位,又重算了一次。这个细节没什么技术含量,但它让我意识到,人眼比对哈希这件事本身就不可靠,后面必须换方法。

接下来是签名。我用 apksigner 分别验证,官方包的证书序列号是 0x3b7e,镜像包的证书序列号是 0x9c02,签发者字段的 CN 完全不同。到这一步,结论已经很清楚:这不是同一个发布者的东西。版本号可以抄,包名可以抄,签名抄不了。

这里插一句操作层面的东西:如果你手边只有手机,没法跑命令行,至少要做两件事——核对下载页面的域名,以及在系统设置里看安装来源的证书信息。用 vivo X90 的内置浏览器时,证书提示的交互逻辑和 Chrome 不同,具体绕法我写在 澳门477477.cm的浏览器打开教程 里,这里不重复。

中间还有个插曲。2 月 15 日凌晨 00:26,我把截图发给在杭州做安卓逆向的老周,他 38 岁,做安全审计快十年。他回得很短:「你先看包名。」我去看了 applicationId,两个包一致。他接着说:「那就看签名,签名不一样就别装了,没什么好分析。」这句话有点绝对,但那天晚上我确实没再往下拆。

真正让我兴奋的是后面那一步。我把两个包都解压,对比 assets 目录,镜像包里多出一个 JSON 配置文件,27 个键,指向三个不在官方域名白名单里的接口地址。其中一个接口的路径里带 collect。我不敢断言它做什么,因为我没有抓包,也没有跑起来看。但这个文件的修改时间,比官方包里任何一个文件都晚 6 天。这说明镜像包不是从官方包直接改名的,而是被重新打包过。

「版本号是给人看的,签名是给机器看的。人会被骗,机器不会。」 —— 老周,2026 年 2 月 15 日 00:31,微信原话

还有一个容易被忽略的点:文件名、应用内「关于」页、官网按钮下面的说明文字,这三处都出现了「v1」,但它们指的不是同一个对象。文件名里的 v1 是打包时的命名约定;应用内的 v1 是 build 号的一段;官网文字里的 v1 更像营销口径。我个人的观点是——把这三处混为一谈,是绝大多数「下错版本」问题的根源。这个看法可能有点苛刻,但我确实没见过一次例外。

过程中还有一件小事值得记下来。2 月 13 日下午,我把哈希清单存成 txt 发给同事,他在华为 Mate 60 上用 QQ 浏览器点开,页面直接跳到了一个在线阅读站。文件名里带「清单」两个字,被内容识别拦了。这件事本身和版本校验无关,但它说明一件更麻烦的事:你传给别人的校验材料,可能在送达之前就已经变形。完整的排查过程我单独写在 qq浏览器打开默认是小说 里。

写这篇文章时我一直在想一个问题:为什么关于「下载最新版」的内容,大部分都在讲怎么点按钮,很少有人讲点完之后怎么确认点到的东西是对的。我猜是因为前者容易写,后者需要工具、需要时间、需要一点耐心。但这恰恰是唯一有意义的部分。校验这件事没有捷径,哈希、签名、包名,三样东西各查一遍,加起来不到十分钟,却能挡掉绝大多数问题。

最后说配图。这篇里的流程图是我自己画的,参考了三个环节:下载路径、哈希比对、签名查看。素材来自一份整理过的清单,27 张无版权图,全部标了来源和许可,方法在 正版图库资料免费订阅 里。用图这件事我比较固执,宁可多花四十分钟找可用的,也不用一张来源说不清的。

那天晚上 23:58,我合上电脑,方格纸上密密麻麻记了三页。没有结论性的发现,只有一个很朴素的判断:下次再有人跟我说「最新版」,我会先问一句,你说的是哪个 v1。

江晚的头像

关于我

我叫江晚,做移动端安全方向的独立研究,主要精力放在安装包来源核验这一块,已经做了四年多。

我不是开发者,也不在任何钱包团队任职。这个站是我自己维护的记录本,起因是 2022 年帮家里人排查过一次伪装成更新包的安装文件,那次之后我发现,网上几乎没有把「怎么确认下载到的东西是对的」讲清楚的中文材料。

所以我一条一条地记:某天某个型号的手机、某个浏览器、某个版本的包,出现了什么现象,我是怎么处理的。写得不快,但每条都能复核。

—— 江晚,2026 年 2 月 17 日,于南京

今天看到的一句话

「验证一个东西是真的,比证明它是假的要难得多,因为真的只有一种,假的有一万种。」

—— 出自老周 2026 年 2 月 15 日 00:31 的微信回复,我征得他同意后引用