#keyboard #bootloader #isp #devices #firmware #reading #sinowealth

app sinowealth-kb-tool

通过常见的ISP引导加载程序,读取和写入基于Sinowealth 8051的HID设备的闪存内容的小工具

12个版本

0.1.1 2024年7月16日
0.0.11 2024年4月28日
0.0.10 2024年3月29日
0.0.7 2023年12月23日
0.0.2 2023年7月9日

#49 in 硬件支持

Download history 153/week @ 2024-04-28 2/week @ 2024-05-05 3/week @ 2024-05-19 1/week @ 2024-05-26 35/week @ 2024-06-30 107/week @ 2024-07-07 126/week @ 2024-07-14 17/week @ 2024-07-21 55/week @ 2024-07-28

201 每月下载

MIT 许可证

59KB
1.5K SLoC

sinowealth-kb-tool

crate ci

这是一个小工具,用于读取和写入基于Sinowealth 8051的设备(键盘和鼠标)的闪存内容,因为它们似乎都有类似的ISP引导加载程序。

免责声明

这是一个实验性工具,因此请自行承担风险使用。

用法

读取

⚠️ 如果地址 <firmware_size-5> 上尚未设置LJMP(0x02)操作码,则读取操作将设置该操作码。当设置此操作码时,引导加载程序将认为主固件已启用,并在设备开机时跳转到它。大多数设备上已设置此操作码,因此读取操作 不应 导致任何问题。

⚠️ 在读取过程中,ISP引导加载程序将把 0x0001 - 0x0002 中的值重定向到 <firmware_size-4> - <firmware_size-3>。因此,生成的负载将与MCU闪存中实际布局的内存不同。

# reads firmware excluding isp bootloader 
sinowealth-kb-tool read -p nuphy-air60 foobar.hex

# reads only isp bootloader section
sinowealth-kb-tool read -p nuphy-air60 -b bootloader.hex

# full dump including firmware and bootloader
sinowealth-kb-tool read -p nuphy-air60 --full full.hex

# custom device
sinowealth-kb-tool read \
    --vendor_id 0x05ac \
    --product_id 0x024f \
    --firmware_size 61440 \
    --bootloader_size 4096 \ # optional
    --page_size 2048 \ # optional
    --isp_iface_num 1 \ # optional
    --isp_usage_page 0xff00 \ # optional
    --isp_usage 0x0001 \ # optional
    --isp_index 0 \ # optional
    --reboot false \ # optional
    foobar.hex

写入

⚠️ 与 读取 操作相同,ISP引导加载程序将把用于地址 0x0001-0x0002 的值写入到 <firmware_size-4> - <firmware_size-3>

# overwrites firmware (does not touch the bootloader section)
sinowealth-kb-tool write -p nuphy-air60 foobar.hex

# custom device
sinowealth-kb-tool write \
    --vendor_id 0x05ac \
    --product_id 0x024f \
    --firmware_size 61440 \
    --bootloader_size 4096 \ # optional
    --page_size 2048 \ # optional
    --isp_iface_num 1 \ # optional
    --isp_usage_page 0xff00 \ # optional
    --isp_usage 0x0001 \ # optional
    --isp_index 0 \ # optional
    --reboot false \ # optional
    foobar.hex

支持的硬件

键盘

型号 ISP MD5 MCU MCU 标签 测试读取 测试写入
Aula F87 3e0ebd0c440af5236d7ff8872343f85d SH68F90A BYK916
德尔塔科游戏WK95R 2d169670eae0d36eae8188562c1f66e8 SH68F90A BYK916
数字联盟Meca战士X 2d169670eae0d36eae8188562c1f66e8 SH68F90 SH68F90S
E-Yooso Z11 3e0ebd0c440af5236d7ff8872343f85d SH68F90? BYK901
创世纪托尔300 RGB 2d169670eae0d36eae8188562c1f66e8 SH68F90 SH68F90S
创世纪托尔300 e57490acebcaabfcff84a0ff013955d9 SH68F881 SH68F881W
Kzzi K68Pro 3e0ebd0c440af5236d7ff8872343f85d SH68F90A
Hykker X Range 2017 (RE-K70-BYK800) 13df4ce2933f9654ffef80d6a3c27199 SH68F881 BYK801
Leobog Hi75 3e0ebd0c440af5236d7ff8872343f85d SH68F90A BYK916
Machenike K500-B61 2d169670eae0d36eae8188562c1f66e8 SH68F90? BYK916
NuPhy Air60 3e0ebd0c440af5236d7ff8872343f85d SH68F90A BYK916
NuPhy Air75 3e0ebd0c440af5236d7ff8872343f85d SH68F90A BYK916
NuPhy Air96 3e0ebd0c440af5236d7ff8872343f85d SH68F90A BYK916
NuPhy Halo65 3e0ebd0c440af5236d7ff8872343f85d SH68F90A BYK916
Redragon K530 Draconic PRO cfc8661da8c9d7e351b36c0a763426aa SH68F90A BYK916
Redragon K614 Anivia 60% 2d169670eae0d36eae8188562c1f66e8 SH68F90A BYK916
Redragon K617 FIZZ 60% 2d169670eae0d36eae8188562c1f66e8 SH68F90A BYK916
Redragon K641 SHACO PRO 3e0ebd0c440af5236d7ff8872343f85d SH68F90A BYK916
Redragon K658 PRO SE 3e0ebd0c440af5236d7ff8872343f85d SH68F90A BYK916
Royal Kludge RK100 cfc8661da8c9d7e351b36c0a763426aa SH68F90? BYK916
Royal Kludge RK61 3e0ebd0c440af5236d7ff8872343f85d SH68F90? BYK916
Royal Kludge RK68 BT Dual cfc8661da8c9d7e351b36c0a763426aa SH68F90? BYK901
Royal Kludge RK68 ISO Return SH68F90? BYK916
Royal Kludge RK71 cfc8661da8c9d7e351b36c0a763426aa SH68F90?
Royal Kludge RK84 cfc8661da8c9d7e351b36c0a763426aa SH68F90? BYK916
Royal Kludge RKG68 cfc8661da8c9d7e351b36c0a763426aa SH68F90A SH68F90AS
Terport TR95 2d169670eae0d36eae8188562c1f66e8 SH68F90A BYK916
Weikav Sugar65 2d169670eae0d36eae8188562c1f66e8 SH68F90 SH68F90S
新盟K916 cfc8661da8c9d7e351b36c0a763426aa SH68F90
新盟M71 2d169670eae0d36eae8188562c1f66e8 SH68F90A SH68F90AS
新盟XM-RF68 2d169670eae0d36eae8188562c1f66e8 SH68F90 SH68F90U
云姿AL71 2d169670eae0d36eae8188562c1f66e8 SH68F90A SH68F90AS

鼠标

型号 ISP MD5 MCU MCU 标签 测试读取 测试写入
光荣模型O 46459c31e58194fa076b8ce8fb1f3eaa BY8948
Trust GXT 960 620f0b67a91f7f74151bc5be745b7110 BY8801

引导加载程序支持

平台

ISP MD5 Windows macOS Linux
13df4ce2933f9654ffef80d6a3c27199 ? ? ok
2d169670eae0d36eae8188562c1f66e8 ok ? ok
3e0ebd0c440af5236d7ff8872343f85d ok ok ok
46459c31e58194fa076b8ce8fb1f3eaa ? ? ok
620f0b67a91f7f74151bc5be745b7110 ? fail[^1] ok
cfc8661da8c9d7e351b36c0a763426aa ok fail[^1] ok
e57490acebcaabfcff84a0ff013955d9 ok fail[^1] ok

[^1]: macOS不识别复合设备为HID设备

先决条件

Linux

要启用无超级用户权限运行此工具,请使用以下udev规则,将xxxxyyyy分别替换为您的设备厂商ID和产品ID。

# /etc/udev/rules.d/plugdev.rule
SUBSYSTEMS=="usb", ATTRS{idVendor}=="xxxx", ATTRS{idProduct}=="yyyy", MODE="0660", GROUP="plugdev"
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0603", ATTRS{idProduct}=="1020", MODE="0660", GROUP="plugdev"

确保您的用户是plugdev组的成员。

macOS

如果您遇到以下错误

hid_open_path: failed to open IOHIDDevice from mach entry...

请确保您的终端应用程序具有输入监控访问

致谢

感谢@gashtaan分析并解释ISP引导加载程序的内部工作原理。没有他的帮助,这个工具就不会存在!

依赖项

~2-13MB
~103K SLoC