> 技术文档 > 有关于USB流量分析(鼠标流量)

有关于USB流量分析(鼠标流量)


首先,有关于流量分析的题一般用wireshark工具来看。以下是有关于USB流量的基本知识点

(一)运用场景

  1. 取证分析:通过USB流量提取键盘输入(如窃取密码),鼠标操作轨迹。例如从.pcap文件中解析HID设备的按键编码,还原输入内容。
  2. 恶意设备检测:识别“BadUSB”等恶意设备:伪装成正常设备(如键盘)执行脚本攻击。      检测异常流量模式:如非HID设备发送键盘指令,高频数据传输等。
  3. 数据泄露防范:监控USB存储设备的文件传输行为(如拷贝敏感文件)。

(二)主要工具

  1. Wireshark:直接捕获USB流量(需操作系统支持,如Windows需安装Winpcap/Liibpcap)。
  2. tshark:是在wireshark的命令行工具,可用于脚本自动化分析(比如python调用)。
  3. Python库:pyshark

以BUUCTF上面的题为例:USB(参考了别的大佬的WP)

1,首先打开附件是两个,一个是压缩包,一个是后缀为.ftm的。压缩包先不管,我把.ftm的文件放到随波逐流中,用binwalk提取出来key.pcap,放入Wireshark中可以知道是鼠标流量

向上面的知识点说的写个python脚本,靠tshark进行自动化分析

exp:

import subprocessimport osdef analyze_usb_keyboard_pcap(pcap_file_path):    \"\"\"直接调用 tshark 解析 USB 键盘流量\"\"\"    # 指定 tshark 路径(必须与实际安装路径一致)    tshark_path = r\"D:\\Program Files\\Wireshark\\tshark.exe\"    if not os.path.exists(tshark_path):        raise FileNotFoundError(f\"tshark 未找到: {tshark_path}\")        # 构建 tshark 命令    cmd = [        tshark_path,        \"-r\", pcap_file_path,        \"-T\", \"fields\",        \"-e\", \"usb.capdata\",        \"-Y\", \"usb && usb.capdata\"    ]        # 执行命令    result = subprocess.run(cmd, capture_output=True, text=True)    capdata_list = [line.strip() for line in result.stdout.split(\'\\n\') if line.strip()]    if not capdata_list:        return \"无 USB 键盘数据\"        # 按键映射表(含 Shift 组合键)    key_mappings = {        0x04: \'a\', 0x05: \'b\', 0x06: \'c\', 0x07: \'d\', 0x08: \'e\', 0x09: \'f\', 0x0A: \'g\', 0x0B: \'h\',        0x0C: \'i\', 0x0D: \'j\', 0x0E: \'k\', 0x0F: \'l\', 0x10: \'m\', 0x11: \'n\', 0x12: \'o\', 0x13: \'p\',        0x14: \'q\', 0x15: \'r\', 0x16: \'s\', 0x17: \'t\', 0x18: \'u\', 0x19: \'v\', 0x1A: \'w\', 0x1B: \'x\',        0x1C: \'y\', 0x1D: \'z\', 0x1E: \'1\', 0x1F: \'2\', 0x20: \'3\', 0x21: \'4\', 0x22: \'5\', 0x23: \'6\',        0x24: \'7\', 0x25: \'8\', 0x26: \'9\', 0x27: \'0\', 0x28: \'\\n\', 0x29: \'\', 0x2A: \'\',        0x2B: \'\\t\', 0x2C: \' \', 0x2D: \'-\', 0x2E: \'=\', 0x2F: \'[\', 0x30: \']\', 0x31: \'\\\\\',        0x32: \'\', 0x33: \';\', 0x34: \"\'\", 0x35: \'`\', 0x36: \',\', 0x37: \'.\', 0x38: \'/\',        0x04+0x20: \'A\', 0x05+0x20: \'B\', 0x06+0x20: \'C\', 0x07+0x20: \'D\', 0x08+0x20: \'E\',        0x09+0x20: \'F\', 0x0A+0x20: \'G\', 0x0B+0x20: \'H\', 0x0C+0x20: \'I\', 0x0D+0x20: \'J\',        0x0E+0x20: \'K\', 0x0F+0x20: \'L\', 0x10+0x20: \'M\', 0x11+0x20: \'N\', 0x12+0x20: \'O\',        0x13+0x20: \'P\', 0x14+0x20: \'Q\', 0x15+0x20: \'R\', 0x16+0x20: \'S\', 0x17+0x20: \'T\',        0x18+0x20: \'U\', 0x19+0x20: \'V\', 0x1A+0x20: \'W\', 0x1B+0x20: \'X\', 0x1C+0x20: \'Y\',        0x1D+0x20: \'Z\', 0x1E+0x20: \'!\', 0x1F+0x20: \'@\', 0x20+0x20: \'#\', 0x21+0x20: \'$\',        0x22+0x20: \'%\', 0x23+0x20: \'^\', 0x24+0x20: \'&\', 0x25+0x20: \'*\', 0x26+0x20: \'(\',        0x27+0x20: \')\', 0x2D+0x20: \'_\', 0x2E+0x20: \'+\', 0x2F+0x20: \'{\', 0x30+0x20: \'}\',        0x31+0x20: \'|\', 0x33+0x20: \':\', 0x34+0x20: \'\"\', 0x35+0x20: \'~\', 0x36+0x20: \'\', 0x38+0x20: \'?\'    }        # 解析按键    keyboard_input = []    for capdata in capdata_list:        capdata = capdata.replace(\':\', \'\')        if len(capdata) != 16:            continue        key_hex = capdata[4:6]        try:            key_code = int(key_hex, 16)            if key_code in key_mappings:                keyboard_input.append(key_mappings[key_code])        except:            continue    return \'\'.join(keyboard_input)if __name__ == \"__main__\":    import sys    if len(sys.argv) != 2:        print(\"用法: python 脚本.py \")        sys.exit(1)    pcap_path = sys.argv[1]    result = analyze_usb_keyboard_pcap(pcap_path)    print(f\"解析结果: {result}\")

开始运行得到结果    解析结果: aababacbbdbdccccdcdcdbbcccbcbbcbbaababaaaaaaaaaaaaaaaaaakey{xinan}

2,好吧,接下来看压缩包,首先打开显示图片有问题然后给我个txt的文本

3,我们把这个压缩包放到010编辑器中去,

把7A改为74,再解压压缩包。图片就正常了。

4,把图片放入随波逐流中使用stegsolve,LSB。或者直接用stegsolve。找到了一张二维码保存起来

扫出来是ci{v3erf_0tygidv2_fc0},结合上面的key{xinan}.先是维吉尼亚,再是栅栏解密。

总结:由以上可知,对于鼠标流量,我们离不开python,pyshark的运用,脚本的编写。这是做usb流量分析的主要方法