解決方案
Daan Tech 的 Bob 是一款時尚的桌上型洗碗機,無需接水管,而其主打便利性來自 Bob Cassette:一款內含清潔劑與亮碟劑、可供 30 次洗滌的即插即用卡匣。Daan 販售的補充品在計入運費與增值稅後,為 90 次洗滌要價 43 英鎊(60 美元)——每次洗滌 48 便士(67 美分),若每天使用,一年約 174 英鎊。顯而易見的替代方案,是要麼支付訂閱費,要麼手動倒入清潔劑,但製造商警告不要這麼做,因為劑量控制與多階段沖洗難以複製。
dekuNukem 把這個卡匣當成一套待稽核的系統,而不是一筆待付的帳單。接座上的四條線暗示這是 I2C EEPROM,於是他用烙鐵把外殼熔開,發現了一顆 24C02 晶片——256 位元組的記憶體,帶有上拉電阻與二極體。他透過一個 USB-A 插座、用一塊剩餘的電路板將其傾印出來,跑了一次洗滌,再傾印一次,發現位址 0xa1 處恰好有一個位元組改變。解碼該序列後顯示,它是剩餘洗滌次數 XOR 0x50;寫入 0x4e 便能把卡匣重設為 30 次洗滌。設定一個無意義的值會產生「111 次洗滌」,證明沒有其他機制驗證這個計數。
重設計數器只是工作的一半——卡匣仍然需要液體。稱量機器的廢水後,得出了實際劑量:每次洗滌 4.33 毫升清潔劑與 1.17 毫升亮碟劑。這把 Daan 含糊的「秘方」變成了兩種可測量的濃度,而法規完成了其餘部分:在英國販售的每種化學品都附有安全資料表(Safety Data Sheet),而比對 UFI 編號後來辨識出了 Daan 的確切清潔劑。從餐飲供應商購買的兩桶 5 公升裝約需 17 英鎊,把每次洗滌的運行成本降到 0.80 便士——大約便宜 60 倍,省下 98%——而碗盤洗得一樣乾淨。
接著他把這個修正方案產品化:一塊名為 Bob Rewinder 的小型手工焊接電路板,可插入卡匣,按一個按鈕就能重設 EEPROM,透過 Tindie 販售,整個調查過程、使用手冊與清潔劑都記錄在 GitHub 上。這篇報導在 2021 年 5 月發布後數週內,於 Hacker News 獲得 1,260 點與 404 則留言,而箇中諷刺作者並未漏看:Daan 行銷一種環保的「正向循環」,卻以其中大量化學品成本 60 倍的價格,販售一次性塑膠與電子卡匣。
達成了什麼
直接攻擊鎖本身:讀取卡匣的 256 位元組晶片,解碼那個單位元組的洗滌計數器,並透過受規範的安全資料表比對化學成分。
為何奏效
這道鎖存在於一顆通用的 24C02 晶片中,只有一個經 XOR 混淆的位元組,且沒有邊界檢查,因此便宜的工具加上一次洗滌前後的差異比對,就揭露了整個計數機制。
測量機器實際的用水量,把「專利清潔劑」變成兩種確切的稀釋比例,使任何等效的化學成分都能互相比較。
公開的安全資料表與 UFI 識別碼讓他能依成分而非猜測來驗證替代品,因此這次補充是有憑有據,而非一廂情願。
這個修正方案保留了設定後即可不管的便利性——用針筒補充、按一個按鈕就能更新——這就是為什麼他之後更常使用這台機器,而非更少。
將方法開源,讓這個修正方案能擴及不只一個廚房:1.5k 個 GitHub 星號、74 次提交、一份使用手冊,以及一塊任何人都能購買的 Tindie 電路板。
可借鏡之處
把一種通用消耗品鎖在單位元組計數器之後,只會招來自行補充:如果化學成分並非真正專利,就把護城河建立在配方、服務或便利性上——而不是 DRM。
後續發展
dekuNukem 開始在 Tindie 上販售 Bob Rewinder 電路板,並附上安全補充的使用手冊。到了 2021 年 5 月,這篇報導已在 Hacker News 獲得 1,260 點;5 月下旬的更新透過 UFI 編號辨識出看似確切的清潔劑,而 2022 年 3 月的更新又增添了更多成分發現。一旦 DRM 成本消失,作者便不再節省洗滌次數,每天運行機器好幾次;訂閱經濟學與那個微不足道的計數晶片仍公開記錄在案,供任何擁有者重現。
追溯依據
參考來源
- Bob Cassette Rewinder: Hacking Detergent DRM for 98% Cost Saving GitHub — dekuNukem · github.com
- Bob Cassette Rewinder: Hacking Detergent DRM Hacker News · news.ycombinator.com ·