流量抓取
本文主要依赖WireShark抓包工具来抓取USB流量。
关于WireShark的安装包如何下载,以及详细的步骤,这里就不再叙述,前往WireShark的官网去下载即可:Wireshark • Go Deep | Download
关键步骤:要想通过WireShark抓取键盘流量,则需要安装USBPcap软件,该软件在安装WireShark时会提示你是否安装。

(由于我这里安装过了,所以是灰色的无法勾选。)
安装完成后,进入WireShark的主界面,就可以看到USBPacp选项:

我这边有三个可选项,第二个才是鼠标和键盘的流量,实际情况由自己而定。双击进入抓包界面后即可捕获鼠标与键盘流量,但本文主要讲解键盘流量。
流量分析
抓取的键盘流量在WireShark中一般长这样:

关于数据字段的显示,有的流量可能显示的是HID Data(我自己抓的),有的则可能是Leftover Capture Data(题目给的流量)。但实际上规则都是一样的可能只是版本不同。
而我们可以看到,数据本身一共有16个数字,每2个数字表示一个字节,而这8个字节(显示为十六进制),就表示一组键盘数据,其8个字节的含义,如下表所示:
| byte1 | byte2 | byte3 | byte4 | byte5 | byte6 | byte7 | byte8 |
| 20 | 00 | 04 | 00 | 00 | 00 | 00 | 00 |
| 功能键(组合键) 如:shift、ctrl 20表示右shift | 保留 通常是0 | 键码1 04表示a键 | 键码2 | 键码3 | 键码4 | 键码5 | 键码6 |
| 键码就是表示一个普通的键,如A、B… | |||||||
到此,我们得知,一组键盘流量可以表示一个功能键,和六个普通键(只按下一个键则只会用到一个byte,其余为0x00,如果同时按下两个键就会用到两个byte)。
但是,为什么byte1为0x20表示右shift?为什么byte3为0x04表示键盘的a键?
其功能键与键码的对照规则如下:
首先功能键,要想判断功能键的ID实际对应哪个键,可以看下表:
| 功能键 | 二进制 | 十六进制 |
| 左 Ctrl | 00000001 | 0x01 |
| 左 Shift | 00000010 | 0x02 |
| 左 Alt | 00000100 | 0x04 |
| 左 GUI | 00001000 | 0x08 |
| 右 Ctrl | 00010000 | 0x10 |
| 右 Shift | 00100000 | 0x20 |
| 右 Alt | 01000000 | 0x40 |
| 右 GUI | 10000000 | 0x80 |
(GUI表示Win、Command键)
也就是说,一个字节共8个bit位,当某个bit位为1时,就表示对应的一个功能键,一共可以表示8个功能键。这张表其实还挺好记的,只要记住顺序为:Ctrl、Shift、Alt、GUI就行,bit位从右往左,依次移位。
接下来,是普通键的ID对应表,参考下图:

至此,我们已经知道USB键盘流量数据的格式了。
流量导出
当我们得到一个键盘流量pacp包时,想要在WireShark一点点算出来每个数据包按下了哪个键是不现实的。这是我们可以通过导出键盘流量,以便我们通过脚本自动分析。
这时,就需要使用到工具tshark,一般是WireShark安装时就默认安装的工具,存放在与WireShark同一目录下。
使用命令如下:tshark -r wire0078.pcap -T fields -e usb.capdata > result.txt
参数分析:
-r(read file):表示要处理的文件。
-T(format of text output):表示文本输出格式,默认是text,可选pdml|ps|psml|json|jsonraw|ek|tabs|text|fields|?,我们使用的是fields,表示导出的是字段。
-e:表示指定一个字段,当-T被指定为fields时,这个usb.capdata根据自己数据包里的字段名而定,注意不是显示的名字,而是内部名字。

这时导出的数据就如下图所示:

然后就可以根据这些数据编写脚本,去快速处理了!
&spm=1001.2101.3001.5002&articleId=150560804&d=1&t=3&u=49117ed05f8346e4a3b4197d2b3041f1)
2万+

被折叠的 条评论
为什么被折叠?



