本文档仅供学习和研究使用,请勿使用文中的技术源码用于非法用途,任何人造成的任何负面影响,与本人无关.
相关文章
相关工具
- 鼠标键盘流量包取证
tshark
提取出来的数据可能会带冒号,也可能不带,但是一般键盘映射的脚本都会按照有冒号的数据来识别,有冒号时提取数据的 [6:8],无冒号时数据在 [4:6],可以用如下脚本来加上冒号
CTF writup
USB 使用的三种方式
USB UART : 这种方式下,设备只是简单的将 USB 用于接受和发射数据,除此之外就再没有, 其他通讯功能了。
USB HID : 这一类通讯适用于交互式,有这种功能的设备有:键盘,鼠标,游戏手柄和数字显示设备。
USB Memory : 数据存储
USB 协议版本有 USB1.0, USB1.1, USB2.0, USB3.1 等, 目前 USB2.0 比较常用。
每一个 USB 设备(尤其是 HID 或者 Memory )都有一个供应商 ID(Vendor ID) 和产品识别码(Product Id) 。 Vendor ID 是用来标记哪个厂商生产了这个 USB 设备。 Product ID 则用来标记不同的产品.
lsusb 命令用于显示本机的USB设备列表,以及USB设备的详细信息。
Bus 002: 指明设备连接到哪条总线
Device 002: 表明这是连接到总线上的第二台设备
ID : 设备的 ID
VMware, Inc. Virtual Mouse: 生产商名字和设备名
USB 流量的捕获可以使用 wireshark 或 usbpcap 来进行,在 ctf 中通常会给出已经捕获好的流量包,而我们需要做的便是从流量包中还原捕获的数据。
用 wireshark 打开流量包, USB 协议的数据部分在 Leftover Capture Data 块中
在蓝色部分可以看到这个区域,右键→应用为列,即可在上面显示出来这一列
键盘流量的数据长度为 8 个字节, 鼠标流量的数据长度为 4 个字节
键盘数据包的数据长度为 8 个字节,击键信息集中在第 3 个字节,每次击键都会产生一个数据包。所以如果看到给出的数据包中的信息都是 8 个字节,并且只有第 3 个字节不为 0000,那么几乎可以肯定是一个键盘流量了。
字节下标
0 : 修改键(组合键)
1 : OEM 保留
2~7 : 按键码
BYTE1
bit0: Left Control 是否按下,按下为 1
bit1: Left Shift 是否按下,按下为 1
bit2: Left Alt 是否按下,按下为 1
bit3: Left WIN/GUI 是否按下,按下为 1
bit4: Right Control 是否按下,按下为 1
bit5: Right Shift 是否按下,按下为 1
bit6: Right Alt 是否按下,按下为 1
bit7: Right WIN/GUI 是否按下,按下为 1
BYTE2 - 暂不清楚,有的地方说是保留位
BYTE3-BYTE8 - 这六个为普通按键
例如: 键盘发送 02 00 0e 00 00 00 00 00,表示同时按下了 Left Shift + 'k',即大写 K。
还原 tshark 提取数据到键盘映射的脚本
相关工具
鼠标移动时表现为连续性,与键盘击键的离散性不一样,不过实际上鼠标动作所产生的数据包也是离散的
鼠标数据包的数据长度为4个字节
第一个字节代表按键,当取 0x00
时,代表没有按键、为 0x01
时,代表按左键,为 0x02
时,代表当前按键为右键。
第二个字节可以看成是一个 signed byte 类型,其最高位为符号位,当这个值为正(小于127)时,代表鼠标水平右移多少像素,为负(补码负数,大于127小于255)时,代表水平左移多少像素。
第三个字节与第二字节类似,代表垂直上下移动的偏移。
第四个是扩展字节
0 - 没有滚轮运动
1 - 垂直向上滚动一下
0xFF - 垂直向下滚动一下
2 - 水平滚动右键一下
0xFE - 水平滚动左键单击一下
例如: 鼠标发送 00 01 fc 00,表示鼠标右移 01 像素,垂直向下移动 124 像素.
还原 tshark 提取数据到鼠标偏移的脚本
配合 gnuplot 将坐标轴转换为图像
gnuplot学习笔记 读取文件部分
相关工具
具体键位对应 53页~59页
- USB键盘流量包取证工具 , 用于恢复用户的击键信息
- USB鼠标流量包取证工具 , 主要用于绘制鼠标移动以及拖动轨迹