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 讀回來比對,兩個各自獨立的函式庫互相驗證。
離線可用¶
跟這一區其他工具一樣,程式存進裝置之後沒有網路也能用。你掃的可能正是不想外流的東西,離線也讀得出來,圖片就不必經過任何伺服器。
要把這一頁帶著走,見離線閱讀。