按名字搜一個用戶端,結果第一頁裡總有幾個不是專案本身的網站。有的只是無害的轉載,有的給你的安裝檔裡多塞了東西。而這類程式又不是普通應用,它按設計就要擋在你的網路流量前面,被動過手腳的版本什麼都看得見。這個不對等,就是這五分鐘值得花的全部理由。

先看來源,這一條壓過下面所有步驟

  • 認什麼:專案自己的程式碼儲存庫和它的 releases 頁面,檔案掛在某個版本標籤底下的附件清單裡。
  • 不認什麼:下載站、雲端硬碟轉載、論壇附件,以及壓在真結果上面的那條搜尋廣告。
  • 本站只是一個資訊站,僅此而已。這裡列出的下載入口最終都指回專案自己的發布頁,以那一頁為準,不是以這一頁為準。
  • 凡是自稱官方鏡像、加速版、免設定版的,那是離開的理由,不是省事的理由。

落到正確的頁面,靠的是網址裡的帳號名稱和儲存庫名稱,不是頁面長得像不像——版面複製起來毫不費力。第一次造訪時花幾秒確認一下擁有者和儲存庫,然後加書籤,以後都從書籤進去。這個習慣把搜尋引擎整個從鏈路裡摘掉了,而風險大半就住在那裡。

合作推薦訂閱連結從哪來?本站合作機場註冊即送 1GB 香港高速體驗流量,可直接一鍵匯入。取得高速節點

在算雜湊之前,先核對檔案

  • 架構。Windows 和 Linux 上是 x64 還是 arm64,macOS 上是 Intel 還是 Apple Silicon。拿錯了要麼打不開,要麼在轉譯層裡將就跑。
  • 副檔名。Windows 是 .exe.msi,macOS 是 .dmg.pkg,Linux 是 .AppImage 或發行版自己的套件,Android 是 .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 的時候:先匯入發布者的公鑰,再驗證。這裡要對自己誠實。簽章只能證明檔案跟你匯入的那把公鑰對得上;如果這把公鑰是從一個假頁面上拿的,那整條鏈沒有任何東西錨定它。公鑰要從另一個獨立管道取得,否則就得承認這一步沒看起來那麼硬。簽章和程式碼簽章都屬於有比沒有好,但都不是證明。

還有一樣東西,往哪個方向都不能當證據:你的防毒軟體。要改網路設定、要裝虛擬網卡的工具,觸發啟發式偵測是家常便飯,所以一個正經版本被報一下毫不稀奇。反過來,掃描乾淨也說明不了什麼,一個剛做出來的改包還沒有特徵可比對。判斷依據是來源和雜湊。別讓掃描器替你做決定。

把裝的是哪個版本記下來。以後新版本弄壞了你要用的功能,回退的前提是知道自己原本在哪一版——而半年後再打開發布頁,那一長串標籤看起來全都差不多。