按名字搜一个客户端,结果第一页里总有几个不是项目本身的站点。有的只是无害的转载,有的给你的安装包里多塞了东西。而这类程序又不是普通应用,它按设计就要挡在你的网络流量前面,被动过手脚的版本什么都看得见。这个不对等,就是这五分钟值得花的全部理由。

先看来源,这一条压过下面所有步骤

  • 认什么:项目自己的代码仓库和它的 releases 页面,文件挂在某个版本标签下面的附件列表里。
  • 不认什么:下载站、网盘转载、论坛附件,以及压在真结果上面的那条搜索广告。
  • 本站只是一个信息站,仅此而已。这里列出的下载入口最终都指回项目自己的发布页,以那一页为准,不是以这一页为准。
  • 凡是自称官方镜像、加速版、免配置版的,那是离开的理由,不是省事的理由。

落到正确的页面,靠的是地址里的账号名和仓库名,不是页面长得像不像——版式复制起来毫不费力。第一次访问时花几秒确认一下所有者和仓库,然后加书签,以后都从书签进。这个习惯把搜索引擎整个从链路里摘掉了,而风险大半就住在那儿。

合作推荐订阅链接从哪来?本站合作机场注册即送 1GB 香港高速体验流量,可直接一键导入。获取高速节点

在算哈希之前,先核对文件

  • 架构。Windows 和 Linux 上是 x64 还是 arm64,macOS 上是 Intel 还是 Apple Silicon。拿错了要么打不开,要么在转译层里凑合跑。
  • 扩展名。Windows 是 .exe.msi,macOS 是 .dmg.pkg,Linux 是 .AppImage 或者发行版自己的包,安卓是 .apk。选哪种封装形式是另一个话题,这里只是确认你下到的确实是你想下的那个。
  • 大小。和发布页上那个附件旁边标的数字比一下。差几 KB 不算什么,差几 MB 就值得停下来。

算一遍哈希

certutil -hashfile installer.exe SHA256
Get-FileHash .\installer.exe -Algorithm SHA256
shasum -a 256 app.dmg
sha256sum app.AppImage

前两条都是 Windows,二选一即可——certutil 每台机器上都有,Get-FileHash 是 PowerShell 的写法。第三条给 macOS,第四条给 Linux。把输出和发布页上的值对一下。整串都要读,别只扫开头和结尾几位:有能力换掉安装包的人,同样有能力弄出一个开头几位看着眼熟的哈希。大小写不影响,输出是小写、页面上是大写,没问题。

发布页压根没给哈希

这很常见,还有退一步的办法。Windows 上右键文件、打开属性,看有没有「数字签名」这个标签页。有的话点进去看签名者,然后自己判断这个名字是不是你预期的那个主体。完全没有这个标签页,说明这个版本没签名——小型开源项目不签名很正常,本身算不上警讯,只是这一项检查在这儿帮不上你。macOS 上对应的是一条命令。

codesign -dv --verbose=4 /Applications/YourApp.app
gpg --import publisher-key.asc
gpg --verify app.AppImage.asc app.AppImage

第一行打印的是已安装应用的签名身份。后两行用在发布页除了二进制之外还放了 .asc.sig 的时候:先导入发布者的公钥,再验证。这里要对自己诚实。签名只能证明文件和你导入的那把公钥对得上;如果这把公钥是从一个假页面上拿的,那整条链条没有任何东西锚定它。公钥要从另一个独立渠道取,否则就得承认这一步没看上去那么硬。签名和代码签名都属于有比没有强,但都不是证明。

还有一样东西,往哪个方向都不能当证据:你的杀毒软件。要改网络设置、要装虚拟网卡的工具,触发启发式检测是家常便饭,所以一个正经版本被报一下毫不稀奇。反过来,扫描干净也说明不了什么,一个刚做出来的改包还没有特征可匹配。判断依据是来源和哈希。别让扫描器替你做决定。

把装的是哪个版本记下来。以后新版本弄坏了你要用的功能,回滚的前提是知道自己原来在哪一版——而半年后再打开发布页,那一长串标签看起来全都差不多。