日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發(fā)布時間:2024/3/26 编程问答 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 技术分享:逆向海盗船k95机械键盘 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

引文

在幾年前我買了一個海盜船 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用來標記不同的產品。

演示視頻:見文章結尾(主要是安裝驅動以及運行該程序實現(xiàn)的(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對應驅動與鍵盤兼容,應該單獨拿出來。

但是現(xiàn)在我還不清楚MI_00與HID鍵盤驅動有什么具體聯(lián)系。

WinUSB驅動配置

Windows USB (WinUSB) 是 Microsoft 提供的 USB 設備的通用驅動程序。WinUSB 體系結構由內核模式驅動程序 (Winusb.sys) 和用戶模式動態(tài)鏈接庫 (Winusb.dll) 組成。

當前一步完成之后可以按標準來進行WinUSB驅動配置這一步了,在這里我要利用hardware id標識的方法來標記之前每一個需要用到的部分。這里我們將忽略MI_02部分,同時在系統(tǒng)中默認安裝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)"

為了更好的區(qū)分它們之間的關系,我在它們后面都加上了獨特的后綴(自定義Mx),這在設備管理器里面更容易體現(xiàn)出來。

如果想要自定義安裝驅動,選擇目標驅動然后點擊右鍵,打開“屬性”,然后點擊“更新驅動程序”,然后選擇安裝的位置,就開始安裝吧。

Winusb.sys 是一種內核模式驅動程序,可在 USB 設備的內核模式設備堆棧的協(xié)議驅動程序之上作為篩選器驅動程序或功能驅動程序進行安裝。當 Winusb.sys 作為設備的功能驅動程序安裝

后,應用程序可以使用這些功能與其進行通信。用戶模式流程通過使用一組設備 I/O 控制請求或調用 WinUSB 功能 ( WinUsb_Xxx 函數 )來與 Winusb.sys 進行通信。在這里就是利用WinUSB

來獲取鍵盤數據信息(InPipe)。在下面的測試程序代碼可以看出響應信息在第三字節(jié)處(其余為0)。

通過測試我可以得出下面的一些結論

MI_00-主要負責LED燈控以及可編程按鍵按鍵部分,宏錄制功能(MR)、鍵盤上caps/scroll/num lock鍵部分。

MI_01-負責音量控制即多媒體功能鍵(播放、暫停等)

MI_02-負責鍵盤主要功能(WinUSB),可停止鍵盤工作。

鍵盤通信協(xié)議

這步相對的難點就是關于通信協(xié)議,鍵盤通信時序按鍵掃描碼存放到內部緩沖存儲器后,鍵盤通過串行通訊,將掃描碼傳輸給計算機。解決問題的最好方法就是在應用程序與鍵盤之間下手。

最簡單的方式就是利用USBPcap以及Wireshark來捕獲USB數據包,而其它的一些工具僅僅可以瀏覽一些日志文件信息。值得注意的是,它們是免費的。當然需要對我的海盜船鍵盤進行驅動檢測,否則就無法捕獲目標數據了。

使用USBPcap

安裝winshare時候會自動安裝winpcap,同時它提供給wireshark可以接受不同類型的數據包。但現(xiàn)在需要用到USBPcap,最難的一點是利用Wireshark來分析USB協(xié)議信息。

開始

第一次運行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.使用其監(jiān)控鍵盤來捕獲信息,創(chuàng)建一個窗口之后所有的信息都會在上面。由于捕獲的信息過多所以需要設置過濾器(更新(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

現(xiàn)在就可以點擊應用程序上面的按鈕然后看到一些信息(URB_CONTROL OUT)。而現(xiàn)在你也可以了解到USB數據傳輸的重要性。在按鍵方面可以參照圖中的方式,點擊右上角那個按鍵來調節(jié)背光燈亮度

我監(jiān)控到了應用程序和鍵盤之間傳輸的數據,但我僅僅強調一條信息就是,背光燈被關閉/開啟了(0%-100%)

詮釋到自己的程序(WinUSB ):點擊我

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

結束語

如果對這個項目感興趣的小伙伴可以透過文章思路一起來逆向破解鍵盤吧,在以后的文章中將會對鍵盤的一些硬件信息進行討論,比如板載芯片等。以后會在這一方面更多的介紹。

視頻觀看:

*參考來源:sverrirs

總結

以上是生活随笔為你收集整理的技术分享:逆向海盗船k95机械键盘的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。