USB键盘流量分析,抓取流量与格式详解(CTF)

流量抓取

        本文主要依赖WireShark抓包工具来抓取USB流量。

        关于WireShark的安装包如何下载,以及详细的步骤,这里就不再叙述,前往WireShark的官网去下载即可:Wireshark • Go Deep | Download

        关键步骤:要想通过WireShark抓取键盘流量,则需要安装USBPcap软件,该软件在安装WireShark时会提示你是否安装。

        

        (由于我这里安装过了,所以是灰色的无法勾选。)

        安装完成后,进入WireShark的主界面,就可以看到USBPacp选项:

     

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


流量分析

        抓取的键盘流量在WireShark中一般长这样:

               

        关于数据字段的显示,有的流量可能显示的是HID Data(我自己抓的),有的则可能是Leftover Capture Data(题目给的流量)。但实际上规则都是一样的可能只是版本不同。

        而我们可以看到,数据本身一共有16个数字,每2个数字表示一个字节,而这8个字节(显示为十六进制),就表示一组键盘数据,其8个字节的含义,如下表所示:

byte1byte2byte3byte4byte5byte6byte7byte8
2000040000000000
功能键(组合键)
如: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实际对应哪个键,可以看下表:

功能键二进制十六进制
左 Ctrl000000010x01
左 Shift000000100x02
左 Alt000001000x04
左 GUI000010000x08
右 Ctrl000100000x10
右 Shift001000000x20
右 Alt010000000x40
右 GUI100000000x80

       (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根据自己数据包里的字段名而定,注意不是显示的名字,而是内部名字。

        

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

        

        然后就可以根据这些数据编写脚本,去快速处理了!

                                ​​​

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值