Igor-Shpetnyi/womier-sk80-screen

GitHub: Igor-Shpetnyi/womier-sk80-screen

逆向工程 Womier SK80 键盘内置屏幕的 HID 协议,并提供绕过官方驱动的 GUI 应用,用于实时显示时钟、Claude 用量等动态内容。

Stars: 0 | Forks: 0

# Womier SK80 — 自定义内置屏幕内容 [![License: MIT](https://img.shields.io/github/license/Igor-Shpetnyi/womier-sk80-screen)](LICENSE) ![Python](https://img.shields.io/badge/python-3.10%2B-blue) ![Platform](https://img.shields.io/badge/platform-Windows-lightgrey) ![Status](https://img.shields.io/badge/status-reverse--engineered-orange) 对机械键盘 **Womier SK80** 内置 TFT 屏幕的 HID 协议进行逆向工程 (并且可能适用于使用相同 SONiX 芯片 `VID_05AC&PID_024F` 的其他键盘)—— 以及一个小巧的 GUI 应用程序,它绕过了原厂 Windows 驱动程序,直接在该屏幕上实时显示动态内容。 而官方驱动只能推送静态 GIF。 ![GUI 应用程序](https://static.pigsec.cn/wp-content/uploads/repos/cas/54/54c5d86d67929fd9f8cde1931691bbd084f0ba43bc67b90cad80d436c2f04aa4.png) *GUI 运行的真实截图 —— “Claude 额度”预设,包含实时数据和事件日志。* | | | |--------------------------------------------|----------------------------------------------------| | ![时钟](https://static.pigsec.cn/wp-content/uploads/repos/cas/ef/ef53246f4b687770f652ac49a36b746b21b98ba08fdf4300facf12896c5def6c.png) | ![Claude 额度](https://static.pigsec.cn/wp-content/uploads/repos/cas/92/923b6339f3106568b85dfe2217ebefe92c3ef45b745361c59528076f5825cc91.png) | | “时钟”预设 | “Claude 额度”预设(带动画吉祥物) | *(设备上的真实渲染效果 —— 160×90,此处放大了 6 倍以便展示)* ## 为什么开发此项目 官方驱动只能通过其 UI 推送静态 GIF。通过分析 USB 流量 (Wireshark + USBPcap)并解析帧格式和命令握手过程,现在可以在屏幕上绘制 **任何内容** —— 实时时钟、来自任意 API 的数据等 —— 完全不需要驱动程序。 完整的研究过程和所有发现都在 [docs/PROTOCOL.md](docs/PROTOCOL.md) 中。 ## 功能 - **时钟** —— 与每分钟开始同步(测量精度:比 `:00` 晚 +0.03…+0.05 秒), 可选择颜色(5 种预设选项 + 自定义颜色)。 - **Claude 额度** —— Claude.ai/Code 的 5 小时和每周使用额度,带有奔跑的动画矢量吉祥物(10 帧循环)。数据读取自本地的 Claude Code OAuth token —— 这 **不是** Anthropic API 的额度。智能更新:每 5 分钟进行一次后台检查,仅在数值确实发生变化时才发送到屏幕(以避免对屏幕造成不必要的干扰,并防止无谓地关闭背光)+ 还提供手动检查按钮。 - 打开应用程序时立即自动启动上次活动的预设,并在显示前强制刷新数据。 - 预设 = 一个 `render(epoch_time, scale) -> PIL.Image` 函数;添加新预设用不了 10 行代码(参见 [presets.py](presets.py))。 - 关闭窗口 (×) 会将应用程序最小化到系统托盘,而不是退出 —— 活动的预设会继续更新屏幕。完全退出(向屏幕发送待机画面)需通过系统托盘右键菜单中的“退出”选项。 关于每项决策的详细说明,请参见 [docs/DECISIONS.md](docs/DECISIONS.md)。 ## 安装 要求: - Windows(协议和 `driver_process_running()` 检查是 Windows 特有的)。 - Python 3.10+。 - 通过 USB 连接的 Womier SK80 键盘 (`VID_05AC&PID_024F`)。 - 官方的 **“Womier-SK80 Driver” 必须完全关闭** —— 包括窗口和系统托盘(否则 HID 设备将被占用,并且 `hid.open_path()` 会抛出错误)。 - **Consolas** 字体(Windows 标准) —— 用于渲染文本。 ``` pip install -r requirements.txt python womier_gui.py ``` 无 GUI 的最简示例 —— [examples/minimal_clock.py](examples/minimal_clock.py)。 ### 构建 standalone .exe (PyInstaller) ``` pip install pyinstaller pyinstaller --onefile --windowed --name WomierSK80 ^ --icon "assets/app_icon.ico" ^ --add-data "assets;assets" ^ --collect-data customtkinter ^ womier_gui.py ``` `--collect-data customtkinter` 是必需的 —— 没有它,构建将无法包含 customtkinter 的内部主题/字体,应用程序在启动时会崩溃。生成的 `.exe` 将出现在 `dist/` 中。 状态文件 `gui_state.json`(上次活动的预设)保存在 `%APPDATA%\WomierSK80\` 中,而不是 `.exe` 旁边,也不在 onefile 构建的临时解压目录中(该目录在退出后会被删除)。辅助调用(`powershell`/`claude` CLI)在运行时没有控制台窗口(`CREATE_NO_WINDOW`),因此在运行 `.exe` 时不会出现任何闪烁。 ## 项目结构 ``` protocol.py низькорівневий HID-протокол (RGB565, кадри, chunking, безпечні шаблони) presets.py реєстр пресетів + рендер кожного (годинник, ліміти Claude, маскот, заставка) claude_limits.py читання лімітів Claude.ai/Code з локального OAuth-токена womier_gui.py GUI-застосунок (customtkinter): вибір пресету, прев'ю, старт/стоп, журнал examples/ мінімальні приклади використання protocol.py без GUI docs/ деталі протоколу та журнал архітектурних рішень ``` ## 安全性与已知限制 - **仅支持 3 帧和 10 帧模板。** 在手动构造的数据包中,即使字节看起来正确,1 帧模式也曾三次导致键盘出现莫名的死机 —— 原因尚未完全查明,因此 `protocol.py` 故意不允许其他帧数 (`ValueError`)。详情见:[docs/PROTOCOL.md](docs/PROTOCOL.md#небезпечні-знахідки-та-чому-вимкнено-1-кадровий-режим)。 - 如果按键卡死 —— 只需重新拔插 USB 线即可恢复工作;在整个研究过程中,这没有造成任何硬件或固件损坏。 - 每次更新屏幕期间,键盘的 RGB 背光会关闭约 3.5 秒(这是固件限制,未找到绕过的方法)。 - 该协议没有官方文档,并且可能因固件版本或使用相同芯片的其他型号而异。使用风险自负。 ## 免责声明 本项目与 Womier 无关,也不附属于 Womier。额度预设中的吉祥物 "Clawd" 是基于广为人知的 Claude Code 吉祥物原型,从零开始绘制的原创矢量同人作品(并非任何 Anthropic 文件的副本)。Claude Code / Claude.ai 是 Anthropic 的商标,此处提及仅用于表示额度预设功能的兼容性。读取额度的方法基于非官方、未公开的 endpoint(参见 [docs/DECISIONS.md, 第 8 条](docs/DECISIONS.md#8-джерело-лімітів-claude--локальний-oauth-токен-не-публічний-api)) 并且可能随时失效,恕不另行通知。 ## 许可证 MIT —— 参见 [LICENSE](LICENSE)。
标签:GUI应用, HID协议, Python, 云资产清单, 外设驱动, 嵌入式屏幕, 无后门, 漏洞挖掘, 逆向工具, 逆向工程