USB(键盘)流量分析

本文介绍了如何分析USB流量,特别是键盘和鼠标的数据。在HIDData域中,键盘流量数据长度为8个字节,鼠标流量为4个字节。文章详细讲解了鼠标流量中各字节的含义,并提供了键盘流量的解析方法,包括正常按键和Shift键组合的映射。此外,还分享了一个脚本示例,用于从流量数据中提取有用信息。
摘要由CSDN通过智能技术生成


hws2023的一道misc,没接触过,写一份博客,稍微带一点鼠标流量,自己做题收获,可能在某些情况仅适用本题

找到有用的usb流量

网上大部分讲USB协议数据在Leftover Capture Data域中,就这道题,以及目前已知少量博客显示,HID Data域中也具有价值(USB URB里找有没有数据就行)。鼠标流量数据长度为四个字节,键盘流量数据长度为八个字节,就这个题而言,若鼠标流量数据长度不满足,格式也不太对

鼠标流量

第一个字节:代表按键(00时,代表没有按键;01时,代表按左键;02时,代表当前按键为右键)
第二个字节:值为正时,代表鼠标右移像素位;
值为负时,代表鼠标左移像素位
第三个字节:代表垂直上下移动的偏移(当值为正时,代表鼠标上移像素位;值为负时,代表鼠标下移像素位)
上述引用和进一步了解后续鼠标流量具体流程可参考这篇文章:https://blog.csdn.net/qq_46150940/article/details/115431953

在这里插入图片描述

键盘流量(自己做题收获,可能仅适用本题)

本题就在HID Data域

第一个字节:代表按键(00时,代表没有按键;不论02或者20做题时统一当shift键)
第三个字节:代表键盘敲击时具体字母(hid键盘报告格式

在这里插入图片描述

脚本或者自己对照

找出相应信息后,脚本直接还原信息比较快速方便,但是如果刚刚接触,一下子拿一个现成的脚本去改,不理解,修改难度比较大,就可以先找一个差不多脚本运行一下(得出结果不全,但是可以给手动对照一点参考,自己理解对照的对不对),然后自己手动对照hid键盘报告格式,了解原理,改着也方便
取一小段:

02:00:00:00:00:00:00:00   // 第三个字节没有数据不看
02:00:04:00:00:00:00:00   // 第一个字节为02,键盘操作shift键和第三个字节代表的键
//由上边可得第三个字节没有数据的可以直接忽略,即第一个字节为02或者20,shift键只作用于本行
20:00:26:00:00:00:00:00   // 第一个字节为20,shift键和第三个字节代表的键

20:00:00:00:00:00:00:00
00:00:00:00:00:00:00:00
00:00:10:00:00:00:00:00   // 直接第三个字节代表的键
00:00:00:00:00:00:00:00

USB(键盘)流量分析具体流程

流量包直接导入即可,寻找有用信息的IP,过滤导出

usb.src =="2.3.1"

在这里插入图片描述
拖kali里面(python运行方便,也不咋出错),拖不进去的配一下tools。python脚本在那块,就在哪块,右键打开终端!!!不容易出错
在这里插入图片描述
使用tshark 命令把pcap的数据提取并去除空行到usbdata.txt

# sed '/^\s*$/d' 剔除空行,减少不必要麻烦特别鼠标流量
tshark -r usb.pcapng -T fields -e usb.capdata | sed '/^\s*$/d' > usbdata.txt

对!没错,我改包名了,不太会tshark命令,就和找到教程里面的包名保持一致,还是要了解一下的。可以看这个!

注意大小写
-r: 读取本地文件,可以先抓包存下来之后再进行分析;
-T 设置解码结果输出的格式,包括text,ps,psml和pdml,默认为text。
-t 设置解码结果的时间格式。“ad”表示带日期的绝对时间,“a”表示不带日期的绝对时间,“r”表示从第一个包到现在的相对时间,“d”表示两个相邻包之间的增量时间(delta)。
-E: 当-T字段指定时,设置输出选项,header=y意思是头部要打印;
-e: 当-T字段指定时,设置输出哪些字段

# 字节和字节间加冒号的脚本
f=open('usbdata.txt','r')
fi=open('out.txt','w')
while 1:
    a=f.readline().strip()
    if a:
        if len(a)==16: # 鼠标流量的话len改为8
            out=''
            for i in range(0,len(a),2):
                if i+2 != len(a):
                    out+=a[i]+a[i+1]+":"
                else:
                    out+=a[i]+a[i+1]
            fi.write(out)
            fi.write('\n')
    else:
        break

fi.close()

还原信息(有冒号时提取数据的[6:8],无冒号时数据在[4:6])

# x
normalKeys = {
   
    "04":"a", "05":"b", "06":"c", "07":"d", "08":"e",
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值