前置知识
参考USB流量取证分析_usb取证_lemonl1的博客-优快云博客
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类型,其最高位为符号位:
当这个值为正时,代表鼠标水平右移多少像素 当这个值为负时,代表鼠标水平左移多少像素。
三个字节与第二字节类似,代表垂直上下移动的偏移。
解题
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"
flag{Hello}