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

  • 創(chuàng)作內(nèi)容快速變現(xiàn)
  • 行業(yè)影響力擴(kuò)散
  • 作品版權(quán)保護(hù)
  • 300W+ 專業(yè)用戶
  • 1.5W+ 優(yōu)質(zhì)創(chuàng)作者
  • 5000+ 長期合作伙伴
立即加入

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

2017/07/14
72
服務(wù)支持:
技術(shù)交流群

完成交易后在“購買成功”頁面掃碼入群,即可與技術(shù)大咖們分享疑惑和經(jīng)驗(yàn)、收獲成長和認(rèn)同、領(lǐng)取優(yōu)惠和紅包等。

虛擬商品不可退

當(dāng)前內(nèi)容為數(shù)字版權(quán)作品,購買后不支持退換且無法轉(zhuǎn)移使用。

加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點(diǎn)資訊討論
放大
方塊圖(2)
相關(guān)方案
  • 方案介紹
  • 相關(guān)文件
  • 相關(guān)推薦
  • 電子產(chǎn)業(yè)圖譜
申請入駐 產(chǎn)業(yè)圖譜

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

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

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

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

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

1. 通訊速率

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

3. 通訊雙方的MAC地址

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

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

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

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

參考2

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

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

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

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

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

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

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

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)推薦

電子產(chǎn)業(yè)圖譜