按名字搜一个客户端,结果第一页里总有几个不是项目本身的站点。有的只是无害的转载,有的给你的安装包里多塞了东西。而这类程序又不是普通应用,它按设计就要挡在你的网络流量前面,被动过手脚的版本什么都看得见。这个不对等,就是这五分钟值得花的全部理由。
先看来源,这一条压过下面所有步骤
- 认什么:项目自己的代码仓库和它的 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 的时候:先导入发布者的公钥,再验证。这里要对自己诚实。签名只能证明文件和你导入的那把公钥对得上;如果这把公钥是从一个假页面上拿的,那整条链条没有任何东西锚定它。公钥要从另一个独立渠道取,否则就得承认这一步没看上去那么硬。签名和代码签名都属于有比没有强,但都不是证明。
还有一样东西,往哪个方向都不能当证据:你的杀毒软件。要改网络设置、要装虚拟网卡的工具,触发启发式检测是家常便饭,所以一个正经版本被报一下毫不稀奇。反过来,扫描干净也说明不了什么,一个刚做出来的改包还没有特征可匹配。判断依据是来源和哈希。别让扫描器替你做决定。