1.滑鼠流量分析
1.常用命令
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
如果提取出來的資料沒有冒號,可以用腳本來加上冒號(因為一般的腳本都會按照有冒號的資料來識別,有冒號時提取資料的[6:8],“無冒號時資料在[5:7]”—但是我在另一篇博客{見USB流量取證分析}上看的是無冒號時資料在[4:6],我用的[5:7])
引數:
-r:設定tshark分析的輸入檔案
-T:設定解碼結果輸出的格式,包括fileds,text,ps,psml和pdml,默認為text
對于滑鼠流量的位元組分析
基礎知識
滑鼠移動時表現為連續性,與鍵盤擊鍵的離散性不一樣,但實際上滑鼠動作所產生的資料包也是離散的,不同的滑鼠抓到的流量不一樣,一般的滑鼠流量都是四個位元組
每一個資料包的資料區有四個位元組,
第一個位元組代表按鍵:
當取0x00時,代表沒有按鍵,當取0x01時,代表按左鍵,當取0x02時,代表當前按鍵為右鍵,
第二個位元組可以看成是一個signed byte型別,其最高位為符號位:
當這個值為正時,代表滑鼠水平右移多少像素
當這個值為負時,代表滑鼠水平左移多少像素,
第三個位元組與第二位元組類似,代表垂直上下移動的偏移,

這個代表的意思便是滑鼠右移01像素,垂直向上移動ff.
題目實解
使用tshark命令將資料提取出來
tshark -r usbx.pcap -T fields -e usb.capdata > usbdata.txt
分離出usbdata.txt檔案 如圖:
這個.txt是我整理過的,本來在0001fe00前面還有大量的空行,我把它刪掉了
匯出后由于不知道操作者是用左鍵還是右鍵進行滑鼠移動以及拖動軌跡,所以需要自己嘗試一下,這道題經過測驗發現是用左鍵畫的,將通用腳本中的btn_flag改為1即可
#sniffer.py
nums = []
keys = open('usbdata.txt','r')
result=open('result.txt','w')
posx = 0
posy = 0
for line in keys:
x = int(line[2:4],16)
y = int(line[5:7],16)
if x > 127 :
x -= 256
if y >115 :
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 == 1 : # 1 代表左鍵,2代表右鍵
result.write(str(posx)+' '+str(-posy)+'\n')
keys.close()
result.close()
運行sniffer.py腳本
python3 sniffer.py
得到result.txt坐標內容

接下來用gnuplot軟體來畫出滑鼠生成的影像
gnuplot -e "plot 'result.txt' " -p
得到最終flag

注:我這里的usbdata.txt檔案中的資料沒有冒號,如果需要加上 : 則使用下面的腳本(因為一般的腳本都會按照有冒號的資料來識別,有冒號時提取資料的[6:8],無冒號時資料在[5:7])
f=open('usbdata.txt','r')
fi=open('out.txt','w')
while 1:
a=f.readline().strip()
if a:
if len(a)==8: # 鍵盤流量的話len改為16
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()
轉換后如圖:

usbdata.txt資料中有 : 后,使用新的sniffer.py腳本來運行
#sniffer.py
nums = []
keys = open('usbdata.txt','r')
result=open('result.txt','w')
posx = 0
posy = 0
for line in keys:
x = int(line[2:4],16)
y = int(line[5:7],16)
if x > 127 :
x -= 256
if y >115 :
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 == 1 : # 1 代表左鍵,2代表右鍵
result.write(str(posx)+' '+str(-posy)+'\n')
keys.close()
result.close()
得到result.txt最后使用
gnuplot -e "plot 'result.txt' " -p
得到結果萬事大吉
文章參考:USB流量取證分析
記一道USB流量分析CTF題
記一次USB流量分析CTF題
第一次寫博客 內容格式有所不足,請各位多多指正!如博客內容有誤或者有不明白的地方,請在下方評論
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/159725.html
標籤:其他
上一篇:分享一款電影下載實用工具
