引文

在几年前我买了一个海盗船 K95 Vengeance机械键盘,键盘有上有背光功能,于是我在考虑是不是可以修改一下。但作者表示购买来的键盘上面没有很多的资料可供利用,需要注意的是,新版的K95与旧版本的K95的CUE不太一样,这一点需要注意(点击我)。

键盘包括一个可自定义安装的驱动以及需要配置一个稍微麻烦点的应用程序,过去一直尝试访问(hid)键盘的一些功能,但不是很成功。USB的三种方式分别是, USB UART、USB HID、USB Memory。HID是人性化的接口。这一类通讯适用于交互式,有这种功能的设备有:键盘,鼠标,游戏手柄和数字显示设备。每一个USB设备(尤其是HID或者Memory)都有一个供应商ID(Vendor Id)和产品识别码(Product Id)。Vendor Id是用来标记哪个厂商生产了这个USB设备。Product Id用来标记不同的产品。

演示视频:见文章结尾(主要是安装驱动以及运行该程序实现的(1,2)

K95Device usb = new K95Device();
try
{usb.Connect();var[] ledbrightness = {LedBrightness.Off, LedBrightness.Low, LedBrightness.Medium, LedBrightness.High, LedBrightness.Medium, LedBrightness.Low };// Now cycle through the brightness intensities for the keyboardfor ( int i = 0; i < 10000; i++){usb.SetLedBrightness(ledbrightness[i % ledbrightness.Length]);// Short wait to let the hardware get ready again and the user to notice the changeThread.Sleep(150);}
}
catch (Exception ex)
{Console.WriteLine(ex.ToString());usb.Disconnect();
}

键盘USB驱动

键盘usb驱动部分可被分成三部分,MI_00、MI_01、MI_02。下图可以展示出来, MI_02对应驱动与键盘兼容,应该单独拿出来。

但是现在我还不清楚MI_00与HID键盘驱动有什么具体联系。

WinUSB驱动配置

Windows USB (WinUSB) 是 Microsoft 提供的 USB 设备的通用驱动程序。WinUSB 体系结构由内核模式驱动程序 (Winusb.sys) 和用户模式动态链接库 (Winusb.dll) 组成。

当前一步完成之后可以按标准来进行WinUSB驱动配置这一步了,在这里我要利用hardware id标识的方法来标记之前每一个需要用到的部分。这里我们将忽略MI_02部分,同时在系统中默认安装USB驱动程序。详细信息:点击我

[MyWinUSBDevice.NTx86]
%DeviceName0%=USB_Install, USB\VID_1B1C&PID_1B08&MI_00
%DeviceName1%=USB_Install, USB\VID_1B1C&PID_1B08&MI_01
; Don't register interface 2 as it is the hid device for the keyboard, let Windows install the default for that
;%DeviceName2%=USB_Install, USB\VID_1B1C&PID_1B08&MI_02
[MyWinUSBDevice.NTamd64]
%DeviceName0%=USB_Install, USB\VID_1B1C&PID_1B08&MI_00
%DeviceName1%=USB_Install, USB\VID_1B1C&PID_1B08&MI_01
; Don't register interface 2 as it is the hid device for the keyboard, let Windows install the default for that
;%DeviceName2%=USB_Install, USB\VID_1B1C&PID_1B08&MI_02
...DeviceName0="Corsair K95 Gaming Keyboard Driver (Custom M0)"
DeviceName1="Corsair K95 Gaming Keyboard Driver (Custom M1)"
; Don't register interface 2 as it is the hid device for the keyboard, let Windows install the default for that
;DeviceName2="Corsair K95 Gaming Keyboard Driver (Custom M2)"

为了更好的区分它们之间的关系,我在它们后面都加上了独特的后缀(自定义Mx),这在设备管理器里面更容易体现出来。

如果想要自定义安装驱动,选择目标驱动然后点击右键,打开“属性”,然后点击“更新驱动程序”,然后选择安装的位置,就开始安装吧。

Winusb.sys 是一种内核模式驱动程序,可在 USB 设备的内核模式设备堆栈的协议驱动程序之上作为筛选器驱动程序或功能驱动程序进行安装。当 Winusb.sys 作为设备的功能驱动程序安装

后,应用程序可以使用这些功能与其进行通信。用户模式流程通过使用一组设备 I/O 控制请求或调用 WinUSB 功能 ( WinUsb_Xxx 函数 )来与 Winusb.sys 进行通信。在这里就是利用WinUSB

来获取键盘数据信息(InPipe)。在下面的测试程序代码可以看出响应信息在第三字节处(其余为0)。

通过测试我可以得出下面的一些结论

MI_00-主要负责LED灯控以及可编程按键按键部分,宏录制功能(MR)、键盘上caps/scroll/num lock键部分。

MI_01-负责音量控制即多媒体功能键(播放、暂停等)

MI_02-负责键盘主要功能(WinUSB),可停止键盘工作。

键盘通信协议

这步相对的难点就是关于通信协议,键盘通信时序按键扫描码存放到内部缓冲存储器后,键盘通过串行通讯,将扫描码传输给计算机。解决问题的最好方法就是在应用程序与键盘之间下手。

最简单的方式就是利用USBPcap以及Wireshark来捕获USB数据包,而其它的一些工具仅仅可以浏览一些日志文件信息。值得注意的是,它们是免费的。当然需要对我的海盗船键盘进行驱动检测,否则就无法捕获目标数据了。

使用USBPcap

安装winshare时候会自动安装winpcap,同时它提供给wireshark可以接受不同类型的数据包。但现在需要用到USBPcap,最难的一点是利用Wireshark来分析USB协议信息。

开始

第一次运行USBPcapCMD.exe,需要注意的是需要在K95键盘(设备名称)下运行。下面的程序代码中就有关于此(USBPcap2)的信息

C:\>"C:\Program Files\USBPcap\USBPcapCMD.exe"
Following filter control devices are available
1 \\.\USBPcap4\??\USB#ROOT_HUB#4&39169944&0#{f18a0e88-c30c-11d0-8815-00a0c906bed8}
2 \\.\USBPcap5\??\USB#ROOT_HUB#4&3a448a3b&0#{f18a0e88-c30c-11d0-8815-00a0c906bed8}
3 \\.\USBPcap1\??\USB#ROOT_HUB#4&dde9a6a&0#{f18a0e88-c30c-11d0-8815-00a0c906bed8}[Port 1] Xbox 360 Big Button IR Controller for Windows (Custom)
4 \\.\USBPcap6\??\USB#ROOT_HUB#4&1c7c1fae&0#{f18a0e88-c30c-11d0-8815-00a0c906bed8}
5 \\.\USBPcap2\??\USB#ROOT_HUB#4&29e1bf0e&0#{f18a0e88-c30c-11d0-8815-00a0c906bed8}[Port 1] USB Composite DeviceCorsair K95 Gaming Keyboard DriverUSB Input DeviceHID-compliant consumer control deviceUSB Input DeviceHID Keyboard Device[Port 2] USB Input DeviceHID-compliant mouse
6 \\.\USBPcap7\??\USB#ROOT_HUB20#4&1602901b&0#{f18a0e88-c30c-11d0-8815-00a0c906bed8}
7 \\.\USBPcap3\??\USB#ROOT_HUB20#4&18f82c2c&0#{f18a0e88-c30c-11d0-8815-00a0c906bed8}[Port 4] USB Mass Storage DevicePortable USB Device

1.再次运行USBPcapCMD.exe,但需要修改一些参数信息(修改“USBPcap2”以及安装路径)“C:\Program Files\USBPcap\USBPcapCMD.exe” -d “\\.\USBPcap2″ -o – | “C:\Program Files\Wireshark\Wireshark.exe” -k -i -”

2.使用其监控键盘来捕获信息,创建一个窗口之后所有的信息都会在上面。由于捕获的信息过多所以需要设置过滤器(更新(bus_id)即更新设备信息(USBPcapX))

USB URB_CONTROL only:
usb.bus_id == 2 && usb.device_address == 1 && (usb.transfer_type == 0x2 || usb.transfer_type == 0x3)Only OUT traffic:
usb.bus_id == 2 && usb.device_address == 1 && (usb.transfer_type == 0x2 || usb.transfer_type == 0x3) && usb.endpoint_number.direction == 0

现在就可以点击应用程序上面的按钮然后看到一些信息(URB_CONTROL OUT)。而现在你也可以了解到USB数据传输的重要性。在按键方面可以参照图中的方式,点击右上角那个按键来调节背光灯亮度

我监控到了应用程序和键盘之间传输的数据,但我仅仅强调一条信息就是,背光灯被关闭/开启了(0%-100%)

诠释到自己的程序(WinUSB ):点击我

// Off
usb.ControlOut(0x40, 0x31, 0x0000, 0);// 100% brightness
usb.ControlOut(0x40, 0x31, 0x0003, 0);

结束语

如果对这个项目感兴趣的小伙伴可以透过文章思路一起来逆向破解键盘吧,在以后的文章中将会对键盘的一些硬件信息进行讨论,比如板载芯片等。以后会在这一方面更多的介绍。

视频观看:

*参考来源:sverrirs

技术分享:逆向海盗船k95机械键盘相关推荐

  1. 樱桃键盘驱动在哪下_双十一这四款性价比樱桃轴机械键盘值得一看_搜狐汽车...

    如今机械键盘都已经开始普及了,工艺的不断成熟,功能也越发丰富,最最最重要就是价格越来越接近普通玩家都能消费得起的水平,一些樱桃轴机械键盘相比几年前动不动就上五六百的价格如今变得更加亲民,日常的价格在双 ...

  2. 2022-2028全球与中国无线机械键盘市场现状及未来发展趋势

    2021年全球无线机械键盘市场销售额达到了 亿美元,预计2028年将达到 亿美元,年复合增长率(CAGR)为 %(2022-2028).地区层面来看,中国市场在过去几年变化较快,2021年市场规模为 ...

  3. 2022-2027年中国机械键盘行业市场深度分析及投资战略规划报告

    [报告格式]电子版.纸介版 [出品单位]华经产业研究院 本报告由华经产业研究院出品,对中国机械键盘行业的发展现状.竞争格局及市场供需形势进行了具体分析,并从行业的政策环境.经济环境.社会环境及技术环境 ...

  4. 拒绝尬吹!海盗船键盘K100告诉你什么才是机械键盘天花板!

    这几年机械键盘的风还是挺大的,拿我身边的人来说吧,即便是不打游戏的同事,也入手了一款机械键盘用来办公.机械键盘敲击舒适.颜值出色,还有炫酷的灯光,确实能为枯燥的办公时间增添不少乐趣和观赏感,但是!我发 ...

  5. 海盗船键盘k100高端机械键盘,不妨一试

    一般而言当你在选择键盘预算有所限制时,往往不会那么纠结,因为可以选择的范围是比较局限的,而一旦预算来到一个可以几乎覆盖大多数高端产品的价位,选择多了起来的时候该如何选择合适的键盘就成了一个十分困惑的问 ...

  6. 海盗船键盘k70 PRO MINI无线机械键盘白色版,无线家族的优雅担当

    最近总是有小伙伴问我,无线机械键盘有没有什么可以推荐的.最好是简约大方有设计感,还可以灵活自定义的,想买来送女生朋友.就很巧,恰逢我最近买了个纯白色的无线机械键盘想换换新口味,海盗船键盘k70配色清新 ...

  7. 海盗船K70 RGB PRO机械键盘 评测

    全新的K70 RGB PRO可以简单看做K70 RGB TKL的加长版,但是附送了一款重新设计的磁吸碗托,对比之前的款式,加强了耐用性.K70 RGB PRO铝制框架机身做了一些调整,而且三颗多功能按 ...

  8. 技术分享:逆向破解华为路由器第三部分

    技术分享:逆向破解华为路由器第三部分 引文 在前面两个部分(1,2)已经介绍了UART,BusyBox等部分的逆向调试,而这篇将会开始在流量分析方面下手,来逆向出更多的信息. 正文 请看下图,数据存储 ...

  9. 分享机械键盘的购买使用体验和对比参数(md版本)

    分享机械键盘的购买使用体验和对比参数(md版本) 原文:https://www.humengxu.com/article/123 近期又有选购机械键盘的需求,根据以往的购买历史和使用经验,想大致讲讲各 ...

最新文章

  1. 使用Singleton需要考虑内存释放
  2. 低头族的第三只眼,“赛博朋克”新装备让你走路不再撞树
  3. Meterpreter
  4. android 拍照不能保存图片格式,Android 拍照后保存到手机里,在相册找不到
  5. formal method revision
  6. Linux学习:shell 命令(压缩包管理)
  7. XCTF_Web_新手练习区:simple_php
  8. unity如何往下挖地形_Unreal Engine地形系统辨析(一)
  9. Linux上将二进制文件转化为c语言数组
  10. Android NFC 标签 读写
  11. 怎样做sns网站?哪里可下载这类程序?
  12. Python + ElasticSearch:轻松玩转跨越千年的两百三十万条地震数据
  13. GIS设备局部放电在线监测的研究设计报告
  14. 2021年终总结,我躺平了?
  15. xp计算机限制打开u盘,XP系统无法读取u盘的解决设置方法
  16. 埃默里大学有计算机专业吗,埃默里大学计算机科学研究生最新专业排名
  17. c++编写断点续传和多线程下载模块【转】
  18. html div里里h标签居中,html之块级标签h系列,div
  19. 为什么我们需要新颖的身份验证方案?
  20. IPv4和IPv6的相互转换

热门文章

  1. 虚函数表 以及 虚函数表的继承过程
  2. git工具的使用方法以及与snv的区别
  3. 用U盘装win7纯净版系统提示缺少所需的CD/DVD驱动器设备驱动程序解决办法
  4. 如何将光盘做成ISO镜像文件
  5. Google Earth Engine——Sentinel-5 Precursor 气体监测数据介绍(臭氧、甲烷、甲醛、气溶胶、一氧化碳、氮氧化物和二氧化硫浓度)
  6. 致所有热爱这个专业的小伙伴们的一封信
  7. 搭建实验室3d slam 移动小车 4.1jackal小车+镭神32线激光雷达lego-loam建图
  8. 易课寄在线购课系统开发笔记(二十九)--完成用户登录功能
  9. PTA练习题错题归纳
  10. 数学思想 之 归纳法