SkyMirror_WP_USB流量分析
Charmersix

(RoarCTF2019)davinci_cipher_数位板流量分析

这是我目前做的比较难的一个流量分析,这题干扰项超级多,但是根据提示能知道是个usb流量分析,如果没有这个提示,做这个题绝对是超级艰难;题目在这儿

首先flag.txt:通过百度,可以得出是一串emoji的Unicode的编码,可以来这里解码一下

然后经过初步的流量分析(或者说是看提示),可以看出有一串非常可疑的USB流量tshark分离一下

tshark -r k3y.pcapng -T fields -e usbhid.data > usbdata.txt

看别的大佬的博客,学到了一种处理空白数据的方法

tshark -r ‘k3y.pcapng’ -T fields -e usbhid.data |sed ‘/^$/d’ > usbdata.txt

再看流量,看到了wacom是一块数位板

wacom是有压感的绘图板,详细说明在USB协议文档里的Figure 19

一般都是x坐标2个字节,Y坐标也是2个字节,又因为X,Y坐标均以小端方式存储,因此画图坐标个位数字变化会大一些。猜测坐标如图所示(深紫X,浅蓝Y,红色压感)。

开始处理一下有用数据

1
2
3
4
5
6
7
a = open("coor.txt",'a+')

for line in open("usbdata.txt",'r'):
if(len(line)==55):
a.write(line)
#把没必要的数据过滤掉,依据长度
a.close()

剃掉压感为0的数据,把坐标提取出来还原成10进制。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
a = open("finish.txt",'a+')
x1 = []
y1 = []
x2 = []
y2 = []
for line in open("coor.txt",'r'):
if(line[16:18]!="00"):
x1.append(line[4:8])
y1.append(line[10:14])
#筛选必要的坐标数据
for i in x1:
x2.append(int(i[2:4]+i[0:2],16))
for j in y1:
y2.append(int(j[2:4]+j[0:2],16))
#把十六进制坐标转为十进制
for z in range(len(x2)):#根据 一般都是x坐标2个字节,Y坐标也是2个字节 再判断一下
a.write(str(x2[z])+" "+str(y2[z])+'\n')

然后放到gnuplot

plot “finish.txt”

反转一下得到

MONA_LISA_IS_A_MAN

用第一步flag.txt里的emoji作为密文,上步得出的字符串作为密钥,emoji解密,得到flag。

 Comments