buuctf [第九章][9.4.1 鼠标流量分析]鼠标流量分析writeup

前置知识

参考USB流量取证分析_usb取证_lemonl1的博客-CSDN博客

 

tshark -r usb.pcap -T fields -e usb.capdata > usbdata.txt
如果提取出来的数据有空行,可以将命令改为如下形式:
tshark -r usb2.pcap -T fields -e usb.capdata | sed '/^\s*$/d' > usbdata.txt

一般的鼠标流量都是四个字节

第一个字节代表按键:

当取0x00时,代表没有按键,当取0x01时,代表按左键,当取0x02时,代表当前按键为右键。

第二个字节可以看成是一个signed byte类型,其最高位为符号位:

当这个值为正时,代表鼠标水平右移多少像素 当这个值为负时,代表鼠标水平左移多少像素。

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

4222a7ac652947198245a9ecdc5e7424.png

 

解题

1.得到usbdata.txt

tshark -r atta3.pcapng -T fields -e usb.capdata | sed '/^\s*$/d' > usbdata3.txt

2.得到out.txt

f=open('usbdata.txt','r')
fi=open('out.txt','w')
while 1:
    a=f.readline().strip()
    if a:
        if len(a)==16: # 键盘流量len=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()

3.转换为xy坐标

nums = []
keys = open('out.txt','r')
f = open('xy.txt','w')
posx = 0
posy = 0
for line in keys:
    if len(line) != 12 :
        continue
    x = int(line[3:5],16)
    y = int(line[6:8],16)
    if x > 127 :
        x -= 256
    if y > 127 :
        y -= 256
    posx += x
    posy += y
    btn_flag = int(line[0:2],16)  # 1 for left , 2 for right , 0 for nothing
    if btn_flag == 2 : # 1 代表左键
        f.write(str(posx))
        f.write(' ')
        f.write(str(posy))
        f.write('\n')

f.close()

4.用gnuplot工具绘图

plot "xy.txt"

f1d9ef5142be451db89b82ea65bda13a.png

flag{Hello}

9e8b037ad2f24736a226d78d8873e3fc.png

 

 

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值