跳轉到

QR code 讀取器

什麼時候用得上

對方傳給你一張 QR code 的截圖,或你在現場拍了牆上的一張。你想知道裡面是什麼,但不想用一個會把圖片上傳的 App,也不想直接拿相機掃了就跳轉。

兩個實際會遇到的:

  • 停車繳費機上貼著一張 QR code,看起來跟原本的繳費碼沒兩樣。掃之前先確認裡面是不是真的付款頁面,主機名跟官方網域對不上,就知道那張貼紙有問題。假的付款頁通常會直接要你輸入卡號,那筆錢就進了別人的帳戶。
  • 剛認識的人遞來印著 QR code 的名片,說掃這個加我。先看一眼裡面到底是聯絡方式還是別的東西,確認過再自己決定要不要加。

不會幫你開啟連結

QR code 是釣魚常用的載體。貼紙覆蓋原本的付款碼、海報上換一張圖,內容看起來像官網、主機卻是別的。相機 App 掃到就跳轉,你根本來不及看。

所以解出來是網址時,主機名會獨立標出來,並且刻意不提供開啟按鈕,確認過主機再自己貼進瀏覽器。

主機名裡有非拉丁字母的話會顯示成 xn-- 開頭的形式,多半是用長得像的字母冒充別的網域,跟隱形字元偵測提到的同形字是同一種手法。

認得的格式,跟拆出來的欄位

QR code 裡放得進的不只網址。掃到之後直接動作的 App 不會先讓你看到裡面有什麼,下面的欄位表會。

內容 拆出來會標的
Wi-Fi 設定 網路名稱、加密方式、密碼、是不是隱藏網路
兩步驟驗證綁定(otpauth: 發行者、帳號、驗證方式
預先寫好的信(mailto: 收件人、主旨、內文
預先寫好的簡訊(sms: 號碼、內文
電話號碼(tel: 號碼
地理座標(geo: 經緯度、精度換算成公尺
電子名片(vCard、MECARD) 姓名、單位、號碼、電子郵件
網址 主機、追蹤參數的數量

幾個會另外提醒的組合:

  • Wi-Fi 寫的是 nopass:代表沒有密碼,連上去之後同一個網路裡的人有辦法看到你連了哪些主機。寫 WEP 的話密碼形同虛設,WEP 加密早就被破解了。
  • otpauth: 裡有 secret:那一串字元就是兩步驟驗證的密鑰本身,取得的人可以自己算出驗證碼,第二道關卡等於沒有。綁定驗證器 App 時掃的就是這種帶密鑰的碼,把截圖留在相簿裡,跟把密碼寫在便條紙上沒有兩樣。
  • 信或簡訊的內容已經填好:按下去只差一個送出。有些付費服務靠的就是一則你沒細看的簡訊開通。
  • 短網址:目的地要連上去才知道,工具不會自動替你連。
  • javascript:data: 開頭:一按就在瀏覽器裡執行,QR code 裡出現它沒有正當理由。

密碼預設遮起來,原始內容不遮

欄位表裡的密碼顯示成 ••••••••,要看得按一下「顯示」。掃碼的場合旁邊常常有人,預設攤開來不合理。

「原始內容」欄位不遮,一字不差,目的是讓你能確認解出來的到底是什麼。截圖給別人之前,先看清楚原始內容欄裡有沒有密碼。otpauth: 的密鑰是唯一的例外,欄位表完全不列它。

解出來的東西還可以往下處理

如果是網址,追蹤參數的數量會一併顯示,網址清理器可以拿掉這些參數再分享。

如果是一段文字,隱形字元偵測可以看看裡面有沒有藏東西。

座標精度欄位是換算出來的:小數點後每多一位,指到的範圍就縮小十倍,小數第四位在緯度方向大約是 11 公尺,指得到一棟建築。QR code 裡的座標,跟你的瀏覽器透露了什麼提到的定位,是同一種風險的兩個來源。

用 Tor Browser 掃可疑的碼

Tor Browser 的安全等級調到 Safest 會關掉 JavaScript,掃碼功能就會停擺,而收到來路不明的 QR code 正是那篇文章建議把等級調高的場合。

先把圖片存下來,切回 Standard 再讀,讀完調回去。解碼不連外,圖片全程留在裝置上。

讀不出來的時候

讀不到的時候,解碼不會只執行一次,會自動換幾種方式重試:先用縮小的版本,接著裁掉外圍把中間放大,再用原始尺寸,最後拉開黑白對比。多數照片在第一種就解完了,只有解不出來的才會往下走。

還是讀不到的話,以下幾件事按效果排序:

  • 裁掉 QR code 以外的部分,效果最好。手機拍的照片動輒四千像素寬,牆上的碼在畫面裡可能只佔一小塊,裁過之後它就佔滿整張圖
  • 靠近一點重拍,讓碼佔畫面一半以上
  • 避開反光,光斑蓋住定位圖樣就沒得救
  • 拍正一點。有點斜沒關係,斜到快看不出方形就會失敗
  • 留白也是碼的一部分,四周要留一圈空白,緊貼邊緣裁掉會讀不到

螢幕上的碼直接截圖,不要拍螢幕,拍出來的摩爾紋很難處理。

解碼用的是誰的程式

解碼交給 jsQR(Apache-2.0 授權,授權全文),原封不動放在 utils/vendor/ 底下。這一區用到的第三方元件都列在小工具首頁

解碼要抓出 QR code 在畫面裡的位置、把歪斜的角度校正回來,還要還原被遮住或髒污的部分,比編碼大得多。測試用產生器頁面的 qrcode-generator 產生已知內容的碼,再交給 jsQR 讀回來比對,兩個各自獨立的函式庫互相驗證。

離線可用

跟這一區其他工具一樣,程式存進裝置之後沒有網路也能用。你掃的可能正是不想外流的東西,離線也讀得出來,圖片就不必經過任何伺服器。

要把這一頁帶著走,見離線閱讀