加入星計劃,您可以享受以下權(quán)益:

  • 創(chuàng)作內(nèi)容快速變現(xiàn)
  • 行業(yè)影響力擴散
  • 作品版權(quán)保護
  • 300W+ 專業(yè)用戶
  • 1.5W+ 優(yōu)質(zhì)創(chuàng)作者
  • 5000+ 長期合作伙伴
立即加入
  • 方案介紹
  • 附件下載
  • 相關(guān)推薦
申請入駐 產(chǎn)業(yè)圖譜

厲害了我的哥!微軟無線鍵盤監(jiān)聽設(shè)計分享

2017/07/14
71
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點資訊討論

無線監(jiān)聽PCB截圖.png

共2個文件

微軟推出過一款無線鍵盤鼠標套裝,型號是;Microsoft Wireless Keyboard/Mouse 800。這套鍵鼠具有反應靈敏,手感細膩,價格適中等等優(yōu)點,美中不足的是它使用2.4G進行通訊,協(xié)議已經(jīng)被人攻破,可以使用很低的成本搭建一套監(jiān)聽的設(shè)備。本文就將介紹如何使用不到5元的 nRF24L01模塊加一塊ArduinoUno搭建一竊聽裝置。

本文是根據(jù)github 上SamyKamkar 的keysweeper項目寫成。代碼和實物只是很小的一部分,最重要的是原理。

首先,微軟的這個套裝鍵盤使用的是NRF 24LE1H芯片,簡單的可以理解成一個單片機加上nRF41L01模塊,這就給我們以可乘之機;

鍵盤使用的模塊通訊方式和最常見的nRF41L01+模塊相同,因此這就是整個項目的硬件基礎(chǔ)。

使用nRF41L01+模塊通訊,有下面幾個要求:

1. 通訊速率

2. 使用的頻道(也就是頻率)

3. 通訊雙方的MAC地址

對于1來說,微軟鍵盤只使用2MBps;對于2來說,是通過掃描頻率范圍來確定的。鍵盤標簽上給出來它在FCC申請注冊過的頻段是2403-2480Mhz,我們只需要在這個范圍內(nèi)每隔1MHz掃描即可。因為我們的目標只是監(jiān)聽,鍵盤作為發(fā)射端的MAC不重要,我們只需要知道接收器的MAC即可。當然,這里也是這個項目的技巧和難點所在。

首先說說鍵盤和接收器的通信格式:

最開始的Preamble,翻譯成中文就是“前導碼”,是由間隔的0 1構(gòu)成的一字節(jié),也就是說只能是0x55(0b01010101)或者0xAA(0b10101010),通訊時通過解析這個可以知道每個bit的長度之類等等信息;前導碼后面的Address就是MAC,芯片根據(jù)這個信息可以確定是否是發(fā)給它的。比如,每一個PC上使用的網(wǎng)卡都會有世界唯一的MAC,當有數(shù)據(jù)包送到網(wǎng)口,網(wǎng)卡本身通過解析數(shù)據(jù)包中的MAC得知是否是發(fā)送給自己的數(shù)據(jù)。更通俗的理解,在嘈雜的空間兩個人對話,最好的辦法是這樣喊“老張,XXX”。需要聽老張講話的人聽到“老張”,即可留心下面的內(nèi)容,“老張”就是接收端的MAC。

在nRF41L01+芯片上,有這樣的限制:只能監(jiān)聽特定的MAC地址。意思是:你需要設(shè)定芯片“聽”的具體MAC,它才能把對應的數(shù)據(jù)傳出來。如果你不告訴它接收器的MAC,它是不會對鍵盤發(fā)出來的數(shù)據(jù)包有響應;經(jīng)過研究,SamyKamkar發(fā)現(xiàn)了一個有意思的事情,在設(shè)置nRF41L01+監(jiān)聽MAC的寄存器中,有一個設(shè)置監(jiān)聽MAC長度的寄存器(為了靈活,nRF41L01+可以設(shè)置不同長度的MAC):

參考2

從上面可以看出,這個芯片能相應的最短的MAC是 3 字節(jié) 。但是,根據(jù)其他人的實驗,如果這里參數(shù)設(shè)置為00 實際上是在監(jiān)聽2字節(jié)的MAC地址。換句話說,如果知道鍵盤發(fā)送的數(shù)據(jù)包上出現(xiàn)的2個字節(jié)的數(shù)據(jù),我們就有機會把完整的數(shù)據(jù)監(jiān)聽下來。其他人繼續(xù)研究(他們有監(jiān)聽2.4G無線抓包的設(shè)備),又發(fā)現(xiàn)微軟這個鍵盤MAC最高位是 1 。這樣鍵盤一定會使用0xAA作為前導碼(因為如果使用0x55有可能和MAC最高的1“粘”在一起,所以只能使用0xAA)。這樣,我們知道發(fā)送的數(shù)據(jù)肯定還有一個0xAA了。還差一個才能湊夠2個字節(jié)。這時候就有很有意思的事情了:當實際上沒有人對芯片“講話”的時候,芯片還是在工作的,很多時候它會聽到0x00或者0xFF。于是,我們可以欺騙IC,讓他“聽”0x00AA。芯片一直在接受,它會不斷校驗“聽到”的結(jié)果,過濾掉不正確的結(jié)果。判斷正確與否的方法是CRC,我們關(guān)掉這個校驗,芯片就會通知我們所有的它聽到的信息,我們再校驗聽到的MAC最低Byte是否為 0xCD(研究發(fā)現(xiàn)這個系列的鍵盤MAC最低Byte位0xCD),也就能知道告訴我們的那些信息是真實有效的。

使用這樣欺騙的方法,能夠獲得真實的接收器的MAC。有了MAC就可以光明正大的監(jiān)聽鍵盤的通訊了。

對于抓到的鍵盤數(shù)據(jù)是有加密的,只是方法非常簡單,使用MAC進行XOR運算。

解析解密之后的HID數(shù)據(jù),最終我們就可以得到按下信息。

? 設(shè)備類型0x0A = 鍵盤,0x08 = 鼠標

? 數(shù)據(jù)包 0x78= 按鍵,0x38 = 長按

上面就是這個監(jiān)聽裝置的原理,硬件連接如上次文件PCB圖為準。

nRF24L01+

Arduino Uno

GND

GND

VCC

3.3V

CE

D9

CSN

D8

SCK

D13

MOSI

D11

MISO

D12

IRQ (空)

連接好之后即可使用

  • 無線監(jiān)聽PCB截圖.png
    下載
    描述:PCB截圖
  • 無線監(jiān)聽源代碼.zip
    下載
    描述:完整代碼和庫

相關(guān)推薦