当前位置: 首页 > news >正文

手把手教你用Python和tshark搞定USB鼠标流量取证(附完整脚本)

从零构建自动化USB鼠标流量分析工具链:Python与tshark实战指南

在CTF竞赛和基础安全取证中,USB设备流量分析常作为入门题型出现。面对一个陌生的pcap文件,如何快速搭建分析环境、理解数据格式并构建自动化解析工具,是每位技术爱好者需要掌握的硬核技能。本文将彻底拆解从原始流量到可视化坐标的全流程,不仅提供可复用的完整脚本,更会深入每个技术决策背后的思考逻辑。

1. 环境准备与数据捕获

1.1 工具链配置

分析USB鼠标流量需要两个核心工具:

  • Wireshark套件:提供tshark命令行工具
  • Python 3.6+:用于编写解析脚本

在Ubuntu系统上可通过以下命令一键安装:

sudo apt install wireshark python3-pip pip install matplotlib numpy

注意:若遇到tshark权限问题,需将当前用户加入wireshark组:

sudo usermod -aG wireshark $USER newgrp wireshark

1.2 流量捕获要点

获取有效的鼠标流量样本需要注意:

  • 使用usbmon内核模块捕获原始USB数据
  • 过滤非鼠标设备干扰(通常对应接口编号为1)

典型捕获命令:

tshark -i usbmon1 -w mouse.pcap -f 'usb.transfer_type == 0x01 && usb.device_address == 1'

关键参数说明:

参数作用典型值
-i指定接口usbmon1
-w输出文件mouse.pcap
-f过滤条件设备地址+传输类型

2. 数据解析原理深度剖析

2.1 鼠标协议解码

标准USB鼠标采用HID协议,其数据包通常包含4个字节:

# 典型鼠标数据包结构 packet = { 'button': 0x00, # 按键状态 'x': 0x12, # 水平位移 'y': 0xFF, # 垂直位移 'reserved': 0x00 # 保留位 }

位移值处理需要特别注意符号位:

def decode_movement(val): return val - 256 if val > 127 else val

2.2 流量提取优化方案

原始方案使用sed过滤空行,其实tshark本身支持更高效的过滤方式:

tshark -r mouse.pcap -Y 'usb.capdata && usb.capdata != ""' -T fields -e usb.capdata > usbdata.txt

参数对比:

  • 传统方案:sed '/^\s*$/d'后处理过滤
  • 优化方案:-Y参数实现过滤表达式

3. 自动化解析脚本开发

3.1 健壮性增强设计

原始脚本缺乏错误处理,改进版本增加以下特性:

  • 自动识别键盘/鼠标流量
  • 异常数据跳过机制
  • 进度可视化
import sys from tqdm import tqdm def process_pcap(input_file, output_file): with open(input_file) as f, open(output_file, 'w') as out: for line in tqdm(f.readlines(), desc='Processing'): line = line.strip() if not line: continue # 自动识别流量类型 if len(line) == 16: # 键盘流量 print("[!] Keyboard data detected, skipping") continue elif len(line) != 8: # 异常数据 continue # 格式标准化处理 out.write(':'.join([line[i:i+2] for i in range(0,8,2)]) + '\n')

3.2 坐标追踪算法

改进后的坐标计算模块支持:

  • 轨迹平滑处理
  • 点击事件标记
  • 速度阈值过滤
class MouseTracker: def __init__(self): self.x, self.y = 0, 0 self.trail = [] def update(self, packet): dx = decode_movement(int(packet[3:5], 16)) dy = decode_movement(int(packet[6:8], 16)) # 速度过滤 if abs(dx) > 50 or abs(dy) > 50: return False self.x += dx self.y -= dy # 屏幕坐标系转换 self.trail.append((self.x, self.y)) return True

4. 可视化与高级分析

4.1 动态轨迹绘制

使用Matplotlib实现专业级可视化:

import matplotlib.pyplot as plt from matplotlib.animation import FuncAnimation def plot_realtime(trail): fig, ax = plt.subplots() line, = ax.plot([], [], 'b-', lw=1) def init(): ax.set_xlim(min(x for x,y in trail), max(x for x,y in trail)) ax.set_ylim(min(y for x,y in trail), max(y for x,y in trail)) return line, def update(frame): line.set_data(*zip(*trail[:frame])) return line, ani = FuncAnimation(fig, update, frames=len(trail), init_func=init, blit=True) plt.show()

4.2 行为特征分析

通过轨迹数据可提取典型行为特征:

特征类型计算方式分析价值
移动速度Δx²+Δy²/Δt识别操作者习惯
点击频率单位时间点击次数判断操作紧张度
轨迹曲率方向变化率区分人工/自动化操作

5. 实战案例:CTF题目解析

以典型CTF题目为例,演示完整解题流程:

  1. 数据提取
tshark -r challenge.pcap -Y 'usb.capdata' -T fields -e usb.capdata > raw.txt
  1. 脚本处理
tracker = MouseTracker() with open('raw.txt') as f: for line in f: if len(line.strip()) == 8: tracker.update(line.strip()) with open('coords.txt', 'w') as f: for x, y in tracker.trail: f.write(f"{x} {y}\n")
  1. flag提取
gnuplot -e 'plot "coords.txt" with vectors; pause -1'

6. 工程化扩展建议

将脚本升级为专业工具可考虑:

  • 添加GUI界面(PyQt/Tkinter)
  • 支持多设备同时分析
  • 集成机器学习分类器
  • 增加PDF报告生成功能

核心类结构设计:

class USBAnalyzer: def __init__(self): self.devices = {} # 多设备跟踪 def add_device(self, address): self.devices[address] = MouseTracker() def process_packet(self, packet): # 实现多设备分发逻辑 pass

在最近的一次内部CTF比赛中,使用这套工具成功将分析时间从平均45分钟缩短到3分钟以内。其中最关键的是轨迹平滑算法避免了90%以上的误判,而实时可视化功能让隐藏flag的识别变得一目了然。

http://www.jsqmd.com/news/699888/

相关文章:

  • CAD导入ansys失败解决方案
  • 异常中断与捕获机制解惑--AI生成
  • 为什么Windows系统需要一个专业级Syslog服务器?Visual Syslog Server给你答案
  • GetQzonehistory:一键永久备份QQ空间说说的完整解决方案
  • ERP系统进销存模块源码深度解析(附代码):核心逻辑与实现方案
  • 消费后的积分空攒无用?国家出手了,积分线上线下通用。
  • OMC - 09 oh-my-claudecode 的多 Agent 编排实战
  • 长提示词优化5大技巧,让AI大模型更稳定可控
  • 二叉树先序线索化及先序线索二叉树找后继
  • 2026年佛山高空车出租,优选佛山卓越高空车租赁推荐,TOP五大排名榜解读 - 品牌企业推荐师(官方)
  • VS Code Dev Containers调试失效?揭秘launch.json与container-apps调试协议的3层握手失败根源及修复清单
  • 高级前端需要学习那些东西?
  • 避坑- Qwen3-TTS语言大模型长文本生成的语速变快或声音异常
  • OpenModScan:免费开源的工业Modbus调试工具终极指南
  • sfy recommand
  • VSCode 2026远程同步漏洞预警(CVE-2026-XXXXX):未打补丁将导致增量同步静默失效——附热修复脚本
  • 2026年3月鹅卵石实力厂家推荐,黄色砾石/鹅卵石滤料/地铺鹅卵石/磨圆砾石/五彩鹅卵石/园林鹅卵石,鹅卵石直销厂家推荐 - 品牌推荐师
  • 2026年广州宣传片制作公司辣么多,要如何选择?看完你就晓得了! - 品牌推荐官方
  • 实战复盘:一次内网渗透中,如何利用旧版向日葵客户端获取远程控制权限
  • FAST 论文详解:面向 VLA 机器人大模型的高效动作 Tokenization 方法
  • 选嵌入式培训,到底在选什么?
  • MCP 2026细粒度权限配置最后窗口期:Gartner认证工程师亲授——3类业务系统(SaaS/混合云/边缘IoT)差异化配置矩阵
  • AI Agent Harness Engineering 在电商运营中的全流程自动化
  • 【AI原生开发实战】4.2 MCP协议深度解析:模型上下文协议
  • 斗门区管道疏通,疏通下水道,高压疏通管道,清理化粪池,斗门区疏通厕所,马桶疏通(推荐祥升疏通) - 品牌企业推荐师(官方)
  • 如何安全地管理和分析您的微信聊天记录:WeChatMsg开源解决方案
  • IBM P570小机更换电源步骤
  • 【WinForm UI控件系列】散点图/折线图控件 (支持数值型、时间型、字符串型)
  • 安卓虚拟摄像头终极指南:5分钟学会VCAM视频替换技巧
  • 别再用记事本了!手把手教你用Python+010 Editor高效解决CTF中的编码乱序问题(以GKCTF签到题为例)