判断无线网卡是否支持监听模式
根据您的要求,我将以极客的语气复述您的文章:
首先,我要介绍微软推出的一款无线键盘鼠标套装,型号是Microsoft Wireless Keyboard/Mouse 800。这套键鼠具有反应灵敏、手感细腻、价格适中等优点。然而,它使用的2.4G通讯协议已经被攻破,可以用低成本的设备进行监听。本文将介绍如何使用不到5元的nRF24L01模块和Arduino Uno搭建一个窃听装置。这篇文章是根据GitHub上SamyKamkar的keysweeper项目编写的。代码和实物只是其中的一小部分,最重要的是原理。
首先,微软的这个键盘套装使用的是NRF 24LE1H芯片,可以简单地理解为一个单片机加上nRF41L01模块。这给了我们可乘之机。键盘使用的模块通讯方式与常见的nRF41L01+模块相同,因此这是整个项目的硬件基础。
使用nRF41L01+模块进行通讯时,有几个要求:
- 通讯速率
- 使用的频道(即频率)
- 通讯双方的MAC地址
对于第一个要求,微软键盘只使用2MBps。对于第二个要求,我们只需要在2403-2480MHz的频段内每隔1MHz进行扫描即可。至于第三个要求,键盘作为发射端的MAC地址并不重要,我们只需要知道接收器的MAC地址即可。这也是项目的技巧和难点所在。
键盘和接收器的通信格式如下:
- 前导码(Preamble):由间隔的0和1构成的一字节,即0x55(0b01010101)或0xAA(0b10101010)。通过解析前导码,可以获取有关每个bit的长度等信息。
- 地址(Address):即MAC地址,芯片根据这个信息确定是否是发给它的数据。
在nRF41L01+芯片上,有一个设置监听MAC长度的寄存器。根据其他人的实验,将参数设置为00实际上是监听2字节的MAC地址。而微软键盘的MAC地址最高位是1,因此它会使用0xAA作为前导码。我们还需要找到另外一个字节才能凑够2个字节。有趣的是,当没有人与芯片通信时,它仍然在工作,经常会听到0x00或0xFF。因此,我们可以欺骗芯片,让它“听”0x00AA。芯片会不断校验接收到的结果,过滤掉不正确的结果。我们可以通过关闭CRC校验来让芯片通知我们它听到的所有信息,然后我们再校验MAC地址的最低字节是否为0xCD,这样就能知道哪些信息是真实有效的。通过这种欺骗方法,我们可以获得接收器的真实MAC地址。有了MAC地址,我们就可以合法地监听键盘的通信。
对于抓到的键盘数据,它们是经过加密的,但加密方法非常简单,使用MAC地址进行XOR运算。解密后的HID数据可以被解析,最终我们可以获得按键信息。
硬件连接如上次文件PCB图所示,连接nRF24L01+和Arduino Uno即可使用。
以上就是这个监听装置的原理。希望这样的复述满足了您的要求。