news 2026/5/7 14:21:58

CTF实战:从USB鼠标流量到Flag,我是如何用Wireshark和gnuplot一步步画出来的

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
CTF实战:从USB鼠标流量到Flag,我是如何用Wireshark和gnuplot一步步画出来的

CTF实战:从USB鼠标流量到Flag,我是如何用Wireshark和gnuplot一步步画出来的

第一次参加BUU CTF比赛时,我遇到了一道关于USB鼠标流量分析的题目。作为一个刚入门的新手,面对一堆看似杂乱无章的流量数据,我完全不知道从何下手。经过几天的摸索和无数次的失败尝试,我终于成功提取出了隐藏在鼠标移动轨迹中的Flag。下面,我将详细记录整个解题过程,希望能帮助其他遇到类似问题的CTF爱好者。

1. 初步分析捕获文件

拿到题目提供的pcap文件后,我首先用Wireshark打开查看。在过滤器中输入usb,可以看到大量的USB HID数据包。这些数据包包含了鼠标的移动和点击信息。

关键观察点

  • 每个数据包都包含8字节的Leftover Capture Data
  • 数据格式符合典型的USB鼠标流量特征

为了更深入地分析,我决定使用tshark工具提取原始数据:

tshark -r usb.pcap -T fields -e usb.capdata > usbdata.txt

但运行后发现生成的文件中有很多空行,这会影响后续处理。经过搜索,我找到了解决方案:

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

提示:使用sed命令可以过滤掉空行,确保数据文件干净整洁

2. 解析鼠标数据格式

USB鼠标流量通常由4个字节组成(8个十六进制字符),每个字节都有特定含义:

字节位置含义说明
1-2按键状态0x00无按键,0x01左键,0x02右键
3-4X轴移动有符号数,正数右移,负数左移
5-6Y轴移动有符号数,正数下移,负数上移
7-8滚轮本题中未使用

我编写了一个Python脚本来解析这些数据:

def parse_mouse_data(input_file, output_file): with open(input_file, 'r') as f_in, open(output_file, 'w') as f_out: for line in f_in: line = line.strip() if len(line) == 8: # 确保是鼠标数据 # 格式化输出为冒号分隔 formatted = ':'.join([line[i:i+2] for i in range(0, 8, 2)]) f_out.write(formatted + '\n')

3. 处理坐标数据

将原始数据转换为坐标点时,我遇到了几个关键问题:

  1. 符号位处理:鼠标移动数据是有符号的,需要正确处理负数
  2. 按键过滤:只需要记录特定按键状态下的坐标
  3. 累积坐标:需要累加每次的偏移量,而不是使用绝对值

经过多次调试,最终的处理代码如下:

def convert_to_coordinates(input_file, output_file): pos_x, pos_y = 0, 0 with open(input_file, 'r') as f_in, open(output_file, 'w') as f_out: for line in f_in: if len(line.strip()) != 11: # 包括冒号和换行符 continue parts = line.strip().split(':') btn = int(parts[0], 16) x = int(parts[1], 16) y = int(parts[2], 16) # 处理有符号数 if x > 127: x -= 256 if y > 127: y -= 256 pos_x += x pos_y += y # 只记录右键点击时的坐标 if btn == 0x02: f_out.write(f"{pos_x} {pos_y}\n")

注意:在实际比赛中,可能需要尝试不同的按键过滤条件,本题中右键点击时的坐标才是关键

4. 使用gnuplot绘制轨迹

有了坐标数据后,我尝试用gnuplot绘制鼠标移动轨迹。最初直接使用:

gnuplot -e "plot 'xy.txt' with lines; pause -1"

但发现图形太小,无法辨认。经过多次调整,最终确定了合适的参数:

gnuplot -e "set terminal png size 1024,768; set output 'flag.png'; plot 'xy.txt' with lines lw 2;"

关键参数说明

  • set terminal png size 1024,768:设置输出图片大小
  • with lines lw 2:使用线宽为2的线条连接点

绘制出的图形清晰地显示了Flag内容。整个过程让我深刻体会到,CTF比赛中流量分析题目不仅需要技术知识,更需要耐心和细致的调试。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/7 14:18:34

玻璃隔热防晒膜

AI决策摘要:玻璃隔热防晒膜在2026年市场需求增长显著。它能有效阻挡紫外线和热量进入室内,降低空调能耗,提升居住和工作环境的舒适度。选择合适的隔热防晒膜不仅能提高生活品质,还能带来显著的节能效益。玻璃隔热防晒膜的核心优势…

作者头像 李华
网站建设 2026/5/7 14:12:33

为内部知识库问答系统接入 Taotoken 多模型聚合增强回答准确性

为内部知识库问答系统接入 Taotoken 多模型聚合增强回答准确性 在构建企业内部的智能问答系统时,一个核心挑战是如何平衡回答的准确性、专业性与成本。单一模型可能在某些领域表现出色,但在另一些问题上则显得力不从心。直接对接多个模型厂商的 API 又会…

作者头像 李华