NRF24L01(nRF24LE1) 通信抓包破解

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

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

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

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

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

1. 通訊速率

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

3. 通訊雙方的MAC地址

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

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

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

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

參考2

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

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

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

解析解密之後的HID數據,最終我們就可以得到按下信息。

• 設備類型0x0A = 鍵盤,0x08 = 鼠標

• 數據包 0x78= 按鍵,0x38 = 長按

上面就是這個監聽裝置的原理,硬件連接如上次文件PCB圖爲準。

nRF24L01+

Arduino Uno

GND

GND

VCC

3.3V

CE

D9

CSN

D8

SCK

D13

MOSI

D11

MISO

D12

IRQ (空)

 

 

連接好之後即可使用

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章