1. 准备工作

必需工具
关键限制
  • Windows 无原生 USB 监控支持:必须依赖 USBPcap 驱动。

  • 仅能捕获原始数据:需手动解析 HID 协议。


2. 安装与配置 USBPcap

步骤 1:安装 USBPcap
  1. 下载 USBPcap 安装包

  2. 安装时勾选 "Install USBPcap Filter Driver" 和 "Add USBPcap interfaces to Wireshark"

  3. 安装Wireshark

  4. 完成安装后重启电脑。

步骤 2:验证驱动
  1. 打开设备管理器(devmgmt.msc)。

  2. 展开 "Universal Serial Bus devices"

  3. 确认键盘设备旁有 USBPcap 标记(如 USBPcap Capturing Device)。


3. 捕获键盘 USB 数据

步骤 3:启动 Wireshark
  1. 以 管理员身份 运行 Wireshark。

  2. 在接口列表中选择 USBPcap1(对应 USB 根集线器)。

    • 如果有多条 USBPcap 接口,通过拔插键盘确认正确接口。

步骤 4:设置捕获过滤器
  • 在捕获过滤栏输入(替换 X 为键盘的 bus_id 和 device_address):

    usb.device_address == X && usb.bus_id == X
  • 如何获取 bus_id 和 device_address:在 PowerShell 运行

    Get-PnpDevice -Class USB | Select-Object Name, InstanceId
  • 从输出中找到键盘的 InstanceId,格式如 USB\VID_046D&PID_C31C\XXXX,其中 bus_id 和 device_address 对应最后一段。

步骤 5:开始捕获
  1. 点击 Start 按钮开始抓包。

  2. 在记事本或终端中按下按键(如 ABEnter)。

  3. 停止捕获(Ctrl+E)。


4. 解析 HID 键盘数据

步骤 6:过滤 HID 数据包
  1. 在 Wireshark 显示过滤器中输入:

    usb.transfer_type == 0x01 && usb.endpoint_number.direction == IN
    • 0x01:中断传输类型。

    • IN:键盘到主机的数据传输方向。

  2. 找到 URB_INTERRUPT in 数据包,展开 USBHID 层查看 HID Data

步骤 7:解码按键
  • HID 数据格式(8 字节):

    Byte 0: 修饰键(Shift/Ctrl/Alt)
    Byte 1: 保留
    Byte 2-7: 按键键码(最多 6 个按键)
  • 示例:按下 A 键:

    00 00 04 00 00 00 00 00
步骤 8:处理修饰键
  • 若 Byte 0 非零:

    • 0x02:Left Shift → 大写 A

    • 0x20:Right Alt → Alt+A。


5. 自动化解析(可选)

使用 Python 提取按键
def decode_hid(data):
    keymap = {
        0x04: 'A', 0x05: 'B', 0x06: 'C',
        0x07: 'D', 0x08: 'E', 0x09: 'F'
        # 完整键位映射参考HID使用表
    }
    return keymap.get(data[2], '[UNKNOWN]')

with open('keydata.txt') as f:
    for line in f:
        if line.strip():
            bytes = [int(x,16) for x in line.strip().split(':')]
            print(decode_hid(bytes))

6. 常见问题解决

Q: Wireshark列表页中找不到USBPcap

  • 将 C:\Program Files\USBPcap\USBPcapCMD.exe 复制到 C:\Program Files\Wireshark\extcap\ 和 C:\Program Files\Wireshark\extcap\wireshark子目录中(wireshark文件夹若不存在则新建) 。

Q: 捕获不到数据?
  • 确认键盘连接到 USB 2.0 端口(USBPcap 对 USB 3.0 支持有限)。

  • 检查 Wireshark 是否以管理员运行。

Q: 数据包不完整?
  • 调整 Wireshark 捕获缓冲区大小:

    • Capture → Options → Output → 增加 File size

Q: 如何区分多个键盘?
  • 在设备管理器中禁用其他 USB HID 设备。


总结

  1. 安装 USBPcap → 解锁 Windows USB 抓包能力。

  2. 过滤键盘设备 → 精确捕获目标数据。

  3. 解析 HID 协议 → 提取键码并映射字符。

  4. 注意权限 → 全程需管理员权限。

此方法适用于安全研究、键盘固件调试等场景,但请注意隐私和合规性

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐