這次,我們將使用一個示波器來分析電信號,看看USB鍵盤是如何工作的。首先,連接USB鍵盤之前的示波器顯示兩條信號線,“D+(黃色)”和“D-(綠色)”。
當將戴爾USB鍵盤插入示波器時,D +保持相對較低,但D-移動到更高的位置。
低 D + 和高 D- 表示 USB 鍵盤在“低速”下處于空閑狀態。
換句話說,這種信號變化表明USB鍵盤已連接到設備,并且連接處于低速狀態。
當嘗試連接另一個USB鍵盤時,這似乎是“高速(最大傳輸速度為480 Mbps)”,D +移動到高位置,D-移動到低位置。
按下一個鍵不會改變示波器波形,因為USB鍵盤通信可以從PC端開始。但這一次,將它連接到一根特殊的電纜上,以便示波器可以反射來自USB鍵盤的信號。
然后在示波器上產生信號。
縮放時看起來像這樣。
將縮放后的波形記錄為屏幕截圖,以詳細分析波形...
在Photoshop中合并。
當把它打印在紙上時,它看起來像這樣。
大多數部件的波形向相反方向移動,例如“D +高,D-低”或“D +低,D-高”,但在某些地方“D +低,D-也低”。有一個部分在狀態中。
這是一個稱為單端零 (SE0) 的條件。
當SE0顯示在波形中時,它看起來像這樣。
據說SE0繼續2位的事實表明“數據包結束”......
可以看到此波形包含三個主要數據包。
此外,D+為低且D-為高的狀態稱為“J狀態”,D +為高且D-為低的狀態稱為“K狀態”...
如果為每個位輸入 J 狀態和 K 狀態,則如下所示。
J 狀態在數據包結束后持續一段時間,K 狀態是數據包的起點。起初,它總是以模式“KJKJKJKK”開頭,但由于這顯示了信號的同步部分,稱為“同步數據包”,因此實際數據包含在后續部分中。
數據包中的數據由重復的“0”和“1”表示,但此波形并不意味著“K”或“J”對應于“0”或“1”。在此波形中,“與前一個狀態不同 = 0”和“與前一個狀態相同 = 1”,并且第一個“KJKJKJ”旁邊的“K”...KK“ 是 ”1”。'.您可以將 0 和 1 分配給下一個“J”作為“0”,將下一個“K”指定為“0”,將下一個“K”指定為“1”,依此類推。
當手動解密數據包時,發現第一個數據包表示設備ID輸入命令“IN”,USB鍵盤設備ID“24”和確認命令。
下一個數據包看起來像這樣很長一段時間。它是一個數據輸入命令“DATA0”,8位數據“00”“00”“00”“00”“00”“00”“00”“00”“00”“00”和一個確認命令。
最后一個數據包是要發送的數據的確認數據包。
這里重要的是第二個數據包“00”“00”“00”“00”“00”“00”“00”“00”“00”“00”,這意味著“沒有密鑰”。沒有按它。'
現在,將 USB 鍵盤連接到更復雜的示波器,并在按下某個鍵時查看數據包。
連接并調整后,手動解碼的數據包現在直接顯示在示波器上。未按下鍵時的數據包仍然是'00''00''00''00''00''00''00''00''00''00'...10>100''00''00''00''00''00''00''00''00''00''00''00''00''00''00''00''00''00'0
當您按“windows鍵”,“Shift鍵”,“Ctrl鍵”等時,第一個位將更改為對應于每個鍵的值。例如,“Ctrl 鍵”顯示為“01”,“Alt 鍵”顯示為“04”。
當同時按下多個鍵時,將顯示與每個鍵對應的值的總和,并且可以確定同時按下哪個鍵。這一次,由于同時按下了“Ctrl鍵”和“Alt鍵”,因此顯示“05”,即“01”和“04”的總和。
開頭的第二位不用于任何事情,并且始終處于“00”狀態,其他鍵(如“A”和“B”)顯示為其余6位的組合。
當按下多個鍵時,6位中的每一個都采用不同的值,并且可以識別出最多6個鍵“同時按下”。Eater表示,這種輸入鍵的識別能力因USB鍵盤的性能而異,因此根據對象的不同,可以通過同時按更多鍵來識別。