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 硬件支持
201 每月下载
59KB
1.5K SLoC
sinowealth-kb-tool
这是一个小工具,用于读取和写入基于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规则,将xxxx
和yyyy
分别替换为您的设备厂商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