破解一台被锁定/禁用的电子垃圾 Cricut Maker
Hacker News 摘要原标题:Unlocking a locked/deactivated e-waste Cricut Maker
作者在处理垃圾时发现了一台被遗弃在电子垃圾堆里的 Cricut Maker 切割机。这台机器外观品相良好,只是滚轮已经老化。作者推测这可能是机器被遗弃的原因,于是将其带回家研究。虽然作者知道 Cricut 公司在禁用或锁定机器方面非常激进,但仍觉得值得一试。
设备状况与初步尝试
经过检查,这台机器确实处于锁定状态,这在预期之内。前任用户很可能通过保修更换了新机,或者在购买新型号时获得了折扣,导致旧机器被远程停用。
作者发现更换滚轮的零件非常便宜且容易购买。在测试阶段,作者即便使用 12V 电源(而非要求的 18V)供电,机器也能通过自检并与软件通信,但在连接时会弹出极其讨厌的 Machine deactivated(设备已停用)提示。
作者最初考虑了两种破解思路:
• 硬件层面: 尝试寻找主板上的 EEPROM 芯片以重写序列号。但在拆解后,作者没有发现 EEPROM,且主控 MCU 的调试工具他手头也没有。
• 网络层面: 拦截网络连接,修改序列号或伪造成功的返回消息。然而,由于应用程序存在安全措施(如证书绑定),绕过这些限制非常繁琐。
最终破解方案:USB 代理拦截
作者将目标转向拦截切割机与计算机之间的通信。通过 Wireshark 抓取 USB 数据包,作者发现该设备使用 USB CDC 协议进行通信。
在分析过程中,作者很快定位到了发送序列号的数据包。令人惊讶的是,这些数据包既没有校验和,也没有加密。于是,作者利用一块 Raspberry Pi RP2040 开发板作为中转设备,使其同时充当 USB 主机(Host)和 USB 客户端(Client)。
技术细节与实现
作者使用了 TinyUSB Arduino 库中的示例代码,拼凑出了一个简单的代理和重写设备。实现过程中的关键点包括:
• 性能优化: 为了让 USB 主机模式正常工作,必须将 RP2040 超频至 240MHz。
• 身份伪造: 配置了与原厂机器一致的厂商 ID、产品 ID 和描述信息。
• 实时拦截: 当开发板检测到来自切割机且包含命令序列号的特定长度数据包时,会将其替换为另一个有效的序列号。
序列号似乎是按顺序生成的,用户甚至可以在 Cricut 官网上查看所有单元的状态。由于重写发生在硬件底层,官方软件完全无法察觉。作者甚至成功注册了一些在官方状态页面上查不到的序列号。这也引发了安全担忧:陌生人可能轻易锁定其他用户的序列号或将其关联到自己的账户。
最后的修复与思考
在清理机器并更换滚轮后(窍门是使用热水烫软新滚轮以便安装),作者重新组装了设备,并为 RP2040 打印了一个小外壳。现在,这台被遗弃的机器可以像新机器一样正常工作。
除了硬件拦截,作者还提出了一些其他潜在的破解方案:
• 拦截网络流量或对应用程序进行补丁处理,使其报告错误的序列号。
• 编写一个模拟 Cricut USB CDC 连接的驱动程序。
• 编写一个通过蓝牙连接机器但模拟 USB 通信的驱动程序。
• 研究固件更新流程,并在更新过程中修改序列号。
• 制作一个蓝牙代理设备或在蓝牙芯片与主控 MCU 之间增加拦截芯片。
作者表示他不会分享具体的代码,因为这可能涉及法律合规性问题。但他提到,其实现方式与 TinyUSB Arduino 库中的示例非常接近。