加入星计划,您可以享受以下权益:

  • 创作内容快速变现
  • 行业影响力扩散
  • 作品版权保护
  • 300W+ 专业用户
  • 1.5W+ 优质创作者
  • 5000+ 长期合作伙伴
立即加入

厉害了我的哥!微软无线键盘监听设计分享

2017/07/14
137
服务支持:
技术交流群

完成交易后在“购买成功”页面扫码入群,即可与技术大咖们分享疑惑和经验、收获成长和认同、领取优惠和红包等。

虚拟商品不可退

当前内容为数字版权作品,购买后不支持退换且无法转移使用。

加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论
放大
方块图(2)
  • 方案介绍
  • 相关文件
  • 推荐器件
  • 相关推荐
  • 电子产业图谱
申请入驻 产业图谱

微软推出过一款无线键盘鼠标套装,型号是;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 (空)

连接好之后即可使用

  • 无线监听PCB截图.png
    描述:PCB截图
  • 无线监听源代码.zip
    描述:完整代码和库

推荐器件

更多器件
器件型号 数量 器件厂商 器件描述 数据手册 ECAD模型 风险等级 参考价格 更多信息
PD0922J5050S2HF 1 Anaren Microwave Splitter, 950MHz Min, 2150MHz Max, 0.7dB Insertion Loss-Max, HALOGEN FREE AND ROHS COMPLIANT, SURFACE MOUNT PACKAGE-6

ECAD模型

下载ECAD模型
$0.94 查看
HMC639ST89ETR 1 Analog Devices Inc High IP3, Low Noise Amplifier, 0.2 - 4.0 GHz
$5.1 查看
HMC435AMS8GE 1 Analog Devices Inc SPDT Non-Reflective Switch, DC - 4 GHz

ECAD模型

下载ECAD模型
$4.8 查看

相关推荐

电子产业图谱