技术分享:逆向海盗船k95机械键盘

引文

在几年前我买了一个海盗船 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用来标记不同的产品。

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

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 keyboard
    for ( 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 change
        Thread.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 Device
      Corsair K95 Gaming Keyboard Driver
      USB Input Device
        HID-compliant consumer control device
      USB Input Device
        HID Keyboard Device
    [Port 2] USB Input Device
      HID-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 Device
      Portable 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

时间: 2024-10-10 04:21:46

技术分享:逆向海盗船k95机械键盘的相关文章

机械键盘什么牌子好

  按照键盘的结构来分,我们可以将键盘分为薄膜键盘和机械键盘.我们平常家里或者办公室使用的基本上都是普通薄膜键盘.但在网吧等一些公共场所,机械键盘就比较常见了.那么,机械键盘和普通薄膜键盘有什么区别呢?机械键盘什么牌子好?请看下文. 什么是机械键盘: 机械键盘是键盘的一种,从结构来说,机械键盘键帽下面由塑料做的轴承和弹簧制作而成,每一个按键都有一个单独的开关来控制闭合,这个开关被称为"轴",每一个键下面是一个单独的信号,因此机械键盘不会有键位冲突.机械键盘曾在2010年末的键盘界引起过

萦绕于指尖的节奏:今天,我们来聊聊机械键盘

机械键盘一直是PC外设领域不可或缺的主角之一,对IT人来说,机械键盘清脆的"咔哒"声永远是他们工作或生活中不可或缺的一部分,机械键盘的魅力到底在哪儿?它和常见的其他键盘又有什么区别?在今天,我们就来聊聊这个话题:   什么是机械键盘? 我们日常使用的键盘通常以薄膜键盘为主,薄膜键盘内部分有三层线路板,上下两层印有导电线路,中隔用来绝缘,键盘按下后,中间的硅胶碗触及底层完成触发.由于键盘内部的核心线路均设计在薄膜材料上,所以称之为薄膜键盘. 而机械键盘(英文:Mechanical Key

机械键盘串键该怎么解决?

  机械键盘串键该怎么解决?           1.串键:即相同信号线上的按键相互影响,导致自动输入或者无法输入的问题;它与连击不同(连击为单个按键重复或者失灵),串键大多为进入液体导致不良. 例:ZXCVM,.Ctrl /*,其中任意一个按键导致线路不良均会无法正常使用.如使用键盘测试软件检测,会发现这些按键会自动输入. 注:可在下面经验链接中下载测试软件. 2.在生活中普通的薄膜键盘一般情况下不容易导致串键,而机械键盘却有较高的不良率;这是因为机械键盘使用了单独的开关/轴,内部是金属弹片构

机械键盘使用的时候有哪些注意事项?

  机械键盘使用的时候有哪些注意事项?         一 .购买及使用 1.个人购买机械键盘可先到相关的论坛,贴吧或者QQ群进行了解,看哪一款类型的键盘更适合自己.如:办公可使用棕.红.青轴体的机械键盘;游戏适合使用黑.棕两款; 2.机械键盘理论上,按键/轴可以达到几千万次的寿命;但平时使用时要注意减少烟灰/灰尘,以及液体的侵入.而且,机械键盘使用一段时间后,要清理后再进行放置;否则,机械轴体内的弹片会因为使用.空气接触.受潮等多重因素导致氧化而出现连击或失灵等问题. 3.因此,机械键盘其实比

机械键盘选购全攻略

  机械键盘选购全攻略 一.机械键盘的好处 首先我们要知道为什么要选择机械键盘,原因有三: 第一,相比薄膜键盘机械键盘的手感可以让你很容易确定自己按键是否正确,可以减少出错的几率; 第二,机械键盘每个键都是独立的,那个坏了可以直接换轴,不用整个报废,提高了键盘的使用寿命; 第三,打字输入按键的手感更好,而且最早的键盘大多是机械键盘,可以让你有怀旧的感觉. 二.机械键盘轴的分类 因为机械键盘按键下方都是单个的轴,而且大部分机械键盘都是使用Cherry生产的MX轴,所以根据MX轴的不同机械键盘也大体

什么是机械键盘

  对于一般人来说,所谓的机械式键盘,就是打起来会嗒嗒作响,有click声音感受的键盘,事实上这样的说法并不全是对的,因为,打起字来,声音会很大的键盘,并不见得是机械式键盘.手感如何,声音大小,其实不完全由键盘的原理来决定,是取决于厂商要做什么样的机构与设定,正如下压克数要轻要重,也是一样的道理,只是以目前来说,机械式键盘的确有极大的比例是有声音的. 机械键盘,并不能从手感.声音等主观感受来确定,还是要从结构来定义机械键盘,机械键盘的每一颗按键都有一个单独的Switch(也就是开关)来控制闭合,

机械键盘什么轴好

  作为机械键盘的核心组件(轴),若不特意提及轴体种类,通常都是指Cherry MX机械轴,因为Cherry MX轴已经被广泛地认可,Cherry MX机械轴仅仅是作为机械轴的代表,除此之外,还包括Cherry ML机械轴.Cherry MY机械轴.ALPS机械轴.台湾白轴(非常罕见)等种类.MX系列机械轴应用在键盘上的主要有4种,通过轴帽颜色可以辨别,分别是青.茶.黑.红.白(市面已很少见),手感相差很大,可以满足不同用户各种需求. 手感的区别在三个方面可以感觉道不同,分别是:段落感.触发键程

怎么选择一款适合你的机械键盘?

  现在随着生活品质的提高,很多高端发烧友已经不满足薄膜键盘的手感了,机械键盘又重新回到了大家的视野里来了,对于很多人来说,机械键盘是什么,又应该如何挑选呢?今天简单为大家介绍一个挑选机械键盘的方法和应该注意的事项. 1.首先,我们要知道自己为什么要选择机械键盘,第一,相比薄膜键盘机械键盘的手感可以让你很容易确定自己按键是否正确,可以减少出错的几率;第二,机械键盘每个键都是独立的,那个坏了可以直接换轴,不用整个报废,提高了键盘的使用寿命;第三,打字输入按键的手感更好,而且最早的键盘大多是机械键盘

机械键盘入门购买攻略

  机械键盘这个曾经很多人眼里"傻大黑.贵粗笨"的PC输入设备随着国内游戏市场的蓬勃发展重返人们的视野,这次卷土重来后机械键盘市场上的产品变得丰富多彩,让人眼花缭乱.很多人在购买机械键盘之前都会很困惑,那么机械键盘到底该如何选择?此次笔者就为大家解答一些关于机械键盘的小知识,帮大家了解.挑选.使用机械键盘. 一.什么是机械键盘?机械键盘好在哪? 机械键盘是以机械式开关作为触发机构的键盘类型,与常见薄膜键盘最大的区别在于按键下面那个结构,薄膜键盘是个"橡胶碗",而机械