文章

流量分析 - USB流量分析基础篇 (带一把梭工具)

流量分析 - USB流量分析基础篇 (带一把梭工具)

原创 xiaoliao1

信安一把索

2025年03月12日 20:36 湖南

图片

鼠标流量基础知识

USB协议鼠标数据部分在Leftover Capture Data域中,数据长度为四个字节

图片

第一个字节,代表按键

当取00时,代表没有按键
当取01时,代表按左键
当取02时,代表当前按键为右键

第二个字节,可看作为signed byte类型,其最高位为符号位,

当值为正时,代表鼠标右移像素位;
值为负时,代表鼠标左移像素位。
```
计算步骤
**(1) 将十六进制转换为二进制**
示例:
0x02 → 00000010,
0xFE → 11111110。

**(2) 判断符号位**
最高位(第7位)为符号位:
0 → 正数(直接转换)。
1 → 负数(需计算补码)。

**(3) 正数直接转换**
示例:
0x02(二进制 00000010)→ **+2**。

**(4) 负数补码转换**
取反:所有二进制位翻转(0→1,1→0)。
加1:结果加1。
添加负号:最终值为负数。
示例:
0xFE(二进制 11111110)符号位为 1 → 负数。
取反 → 
00000001。加1 → 00000010(即十进制为2)。最终值 → **-2**。

3. 物理移动方向
正值:向右移动(例如 +2 → 右移2个单位)。
负值:向左移动(例如 -2 → 左移2个单位)。

常见值示例

| 十六进制值 | 二进制值 | 十进制值 | 实际方向 |
| :——–: | :——–: | :——: | :————–: |
| 0x00 | 00000000 | 0 | 无移动 |
| 0x7F | 01111111 | +127 | 最大右移 |
| 0x80 | 10000000 | -128* | 无效(协议保留) |
| 0xFE | 11111110 | -2 | 左移2个单位 |
| 0xFF | 11111111 | -1 | 左移1个单位 |

第三个字节,代表垂直上下移动的偏移。

当值为正时,代表鼠标上移像素位;
值为负时,代表鼠标下移像素位。

和第二个计算的方式一样的,只不过左右变成了上下

键盘流量

基本知识

USB协议数据部分在Leftover Capture Data域中,数据长度为八个字节。

图片

标准8字节键盘数据格式

| 字节位置 | 名称 | 描述 |
| :———: | :—————–: | :———————————————————-: |
| 字节1 | 修饰键(Modifiers) | 表示功能键(Ctrl、Shift、Alt等)的按下状态,每个二进制位对应一个按键。 |
| 字节2 | 保留字段 | 通常为 0x00,部分设备可能用于扩展功能(如多媒体键)。 |
| 字节3-8 | 普通按键码 | 最多6个同时按下的普通按键的键码(每个按键占1字节)。 |

字节1:Modifier Keys(功能键位掩码)

| 位(Bit) | 对应按键 | HID Usage ID | 描述 |
| :——-: | :————: | :———-: | :————–: |
| Bit 0 | 左Ctrl | 0xE0 | 按下时值为 1。 |
| Bit 1 | 左Shift | 0xE1 | |
| Bit 2 | 左Alt | 0xE2 | |
| Bit 3 | 左GUI(Win键) | 0xE3 | |
| Bit 4 | 右Ctrl | 0xE4 | |
| Bit 5 | 右Shift | 0xE5 | |
| Bit 6 | 右Alt | 0xE6 | |
| Bit 7 | 右GUI(Win键) | 0xE7 | |

字节3-8:普通按键码(HID Usage ID)

| HID键码(Hex) | 对应按键 | 字符/功能 |
| :————: | :——-: | :——–: |
| 0x00 | 无按键 | - |
| 0x04 | A | A/a |
| 0x05 | B | B/b |
| 0x06 | C | C/c |
| 0x07 | D | D/d |
| 0x08 | E | E/e |
| 0x09 | F | F/f |
| 0x0A | G | G/g |
| 0x0B | H | H/h |
| 0x0C | I | I/i |
| 0x0D | J | J/j |
| 0x0E | K | K/k |
| 0x0F | L | L/l |
| 0x10 | M | M/m |
| 0x11 | N | N/n |
| 0x12 | O | O/o |
| 0x13 | P | P/p |
| 0x14 | Q | Q/q |
| 0x15 | R | R/r |
| 0x16 | S | S/s |
| 0x17 | T | T/t |
| 0x18 | U | U/u |
| 0x19 | V | V/v |
| 0x1A | W | W/w |
| 0x1B | X | X/x |
| 0x1C | Y | Y/y |
| 0x1D | Z | Z/z |
| 0x1E | 1 | 1/! |
| 0x1F | 2 | 2/@ |
| 0x20 | 3 | 3/# |
| 0x21 | 4 | 4/$ |
| 0x22 | 5 | 5/% |
| 0x23 | 6 | 6/^ |
| 0x24 | 7 | 7/& |
| 0x25 | 8 | 8/ |
|
0x26 | 9 | 9/( |
|
0x27 | 0 | 0/) |
|
0x28 | Enter | 回车键 |
|
0x29 | Esc | Esc键 |
|
0x2A | Backspace | 退格键 |
|
0x2B | Tab | Tab键 |
|
0x2C | Space | 空格键 |
|
0x2D | - | -/_ |
|
0x2E | = | =/+ |
|
0x2F | [ | [/{ |
|
0x30 | ] | ]/} |
|
0x31 | \ | /\| |
|
0x33 | ; | ;/: |
|
0x34 | ' | '/” |
|
0x35 | |/~ |
|
0x36 | , | ,/< |
|
0x37 | . | ./> |
|
0x38 | / | /? |
|
0x39 | Caps Lock | 大写锁定键 |
|
0x3A | F1 | F1功能键 |
|
0x3B | F2 | F2功能键 |
| … | … | … |
|
0x52 | ↑ | 方向键上 |
|
0x51 | ↓ | 方向键下 |
|
0x50 | ← | 方向键左 |
|
0x4F* | → | 方向键右 |

分析

图片

这里看到第三位是09,和上面的表对应一下就是F

图片

USB的流量分析基础就是这些,下面是自动化 (大人时代变了(举枪))

一把梭工具

一把梭工具使用前请保证环境配置

首先要将wireshark里面的tshark.exe所在的文件夹添加到环境变量path下

图片

添加到环境变量(path)里面

图片

查看是否添加成功

图片

能成功执行看到版本号就说明添加成功了

实战

请还原鼠标流量找到flag

打开usb2的流量包先看capture Data是几位的,分析出来是什么流量

图片

这里看到4位的USB流量,直接打开一把梭工具,打开命令行

图片

打开工具

python run_GUI.py

图片

浏览文件选择需要分析的流量包

图片

看所有的按键流量

图片

太乱了看不出来,一个一个看(左键)

图片

右键

图片

XNUCA{USBPCAPCETEVERYHING}

请还原键盘流量找到flag

直接导入执行

图片

秒了 flag{pr355_0nwards_a2fee6e0}

数据包和工具放资源包里了,需要的可以去拿。

工具免费提供禁止倒卖盈利!!!!!!!

License:  CC BY 4.0