首页 > 其他分享 >usb流量分析

usb流量分析

时间:2024-05-14 10:33:03浏览次数:15  
标签:分析 usb -- 流量 按下 USB line txt 字节

常见的usb流量分析分为鼠标协议和键盘协议

USB流量的介绍

  • USB UART : 这种方式下,设备只是简单的将 USB 用于接受和发射数据,除此之外就再没有, 其他通讯功能了。
  • USB HID : 这一类通讯适用于交互式,有这种功能的设备有:键盘,鼠标,游戏手柄和数字显示设备。
  • USB Memory : 数据传输存储

鼠标协议相关知识

USB协议的数据部分在Leftover Capture Data域之中,如下图

mouse

每一个数据包的数据区有四个字节

  1. 第一个字节代表按键,当取 0x00 时,代表没有按键,为 0x01 时,代表按左键,为 0x02 时,代表当前按键为右键。
  2. 第二个字节可以看成是一个 signed byte 类型,其最高位为符号位,当这个值为正时,代表鼠标水平右移多少像素,为负时,代表水平左移多少像素。
  3. 第三个字节与第二字节类似,代表垂直上下移动的偏移。

键盘协议相关知识

keyboard

键盘数据包的数据长度为 8 个字节

  1. 第一个字节代表特殊按键

    |--bit0:  Left Control是否按下,按下为1 
    |--bit1:  Left Shift 是否按下,按下为1 
    |--bit2:  Left Alt  是否按下,按下为1 
    |--bit3:  Left GUI(Windows键) 是否按下,按下为1 
    |--bit4:  Right Control是否按下,按下为1  
    |--bit5:  Right Shift 是否按下,按下为1 
    |--bit6:  Right Alt  是否按下,按下为1 
    |--bit7:  Right GUI  是否按下,按下为1 
    

    当第一个字节为00时,代表没有按键,第一个字节为02或者20时统一当shift键)

  2. 第二个字节是保留位

  3. 第三个字节~第8个字节是普通按键(主要看第三个字节)

    第四到第八个字节好像是处理多键同时按下的

    data 值与具体键位的对应关系:keyboard_pro

分析一个流量包

以ISCC2024 的时间刺客为例

USB 协议的数据部分在 Leftover Capture Data 域之中

Linux 下可以用 tshark 命令可以将 leftover capture data 单独提取出来:

tshark -r example.pcap -T fields -e usb.capdata //如果想导入usbdata.txt文件中,后面加上参数:>usbdata.txt

而在Windows我没可以通过wireshark自带的工具提取出来:

在 wireshark 的安装环境下,在 wireshark目录下有个 tshark.exe,输入命令:

tshark.exe -r example.pcap -T fields -e usb.capdata //如果想导入usbdata.txt文件中,后面加上参数:>usbdata.txt

查看 usbdata.txt 发现数据包长度为八个字节

image-20240510191821845

发现数据包长度为八个字节,说明是键盘usb,也就是说只关心第三个字节即可

给出转化脚本:

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", 0x2a:"[DEL]",  0X2B:"    ", 0x2C:" ",  0x2D:"-", 0x2E:"=", 0x2F:"[",  0x30:"]",  0x31:"\\", 0x32:"~", 0x33:";",  0x34:"'", 0x36:",",  0x37:"." }
nums = []
keys = open('usbdata.txt')

for i in keys:
    i = i.strip()
    line = ""
    for j in range(0,len(i),2):
        line += i[j:j+2] + ":"
    line = line[:len(line)-1]
    # print(line)
    if line[0]!='0' or line[1]!='0' or line[3]!='0' or line[4]!='0' or line[9]!='0' or line[10]!='0' or line[12]!='0' or line[13]!='0' or line[15]!='0' or line[16]!='0' or line[18]!='0' or line[19]!='0' or line[21]!='0' or line[22]!='0':
         continue
    nums.append(int(line[6:8],16))

keys.close()
output = ""
for n in nums:
    if n == 0 :
        continue
    if n in mappings:
        output += mappings[n]
    else:
        output += '[unknown]'
print('output : ' + output)

得到: FLAGPR3550NWARDSA2FEE6E0

另附上 鼠标转化脚本:

nums = []
keys = open('usbdata.txt','r')
f = open('xy.txt','w')
posx = 0
posy = 0
for line in keys:
    if len(line) != 12 :
        continue
    x = int(line[3:5],16)
    y = int(line[6:8],16)
    if x > 127 :
        x -= 256
    if y > 127 :
        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 代表左键
        f.write(str(posx))
        f.write(' ')
        f.write(str(posy))
        f.write('\n')

f.close()

配合 gnuplot 将坐标轴转换为图像

参考: https://github.com/jas502n/sangfor/blob/master/1earn/Security/BlueTeam/笔记/USB取证.md

标签:分析,usb,--,流量,按下,USB,line,txt,字节
From: https://www.cnblogs.com/lordtianqiyi/p/18190748

相关文章

  • USB-CyAPI
    1.引用CyAPI.lib2.USBCOM.h1#pragmaonce23#include<QtWidgets/QDialog>4#include"ui_USBCOM.h"5#include<Windows.h>6#include"cyAPI.h"7#include<QTimer>8classUSBCOM:publicQDialog9{10Q_......
  • 马尔可夫转换MSVAR模型预测资产收益率时间序列可视化分析|附数据代码
    原文链接:https://tecdat.cn/?p=36166原文出处:拓端数据部落公众号在现代金融市场中,资产收益率序列的预测一直是投资者和金融机构关注的焦点。资产收益率的波动不仅反映了市场的风险水平,也直接影响到投资组合的表现和风险管理策略的制定。然而,金融市场的复杂性和不确定性使得资产......
  • Hive分析函数
    ●测试表test1.groupingsets ①未使用②使用groupingsets(与上面等价)【代码实例】查看代码 --todo方式一--所有学校的人数总和select'全学校'asschool,'全年级'asgrade,count(name)asnum,1asgrouping__idfrom......
  • 揭秘姓名背后的奥秘:从五行分析到吉凶评分全攻略
    在古老的中国文化中,姓名不仅仅是一个简单的标签,它承载着深厚的文化内涵和人生寓意。从姓名学的角度来看,一个人的名字与其命运息息相关,通过分析姓名中的五行属性、吉凶评分等,我们可以对个人的性格、运势有一定的了解。一、姓名分析的重要性姓名分析,又称为姓名学,是一门古老而神秘......
  • 【触想智能】无风扇工控一体机的优点与定制要求分析
    随着工业自动化的不断推进,工控一体机作为自动化生产的核心设备,在工业生产中发挥着越来越重要的作用。在工控一体机的设计中,散热是一个非常关键的问题,而无风扇工控一体机的出现为解决这个问题提供了新方法。无风扇工控一体机是在产品设计中不使用风扇进行散热的设备......
  • JAVA Comparator 自定义排序 源码分析
    对于一个数组来说如果我们想要从大到小排序一般会这么写Integer[]nums={1,2,3};Arrays.sort(nums,newComparator<Integer>(){@Overridepublicintcompare(Integera,Integerb){returnb-a;}});......
  • openGauss 分析查询效率异常降低的问题
    分析查询效率异常降低的问题问题现象通常在几十毫秒内完成的查询,有时会突然需要几秒的时间完成;而通常需要几秒完成的查询,有时需要半小时才能完成。处理办法通过下列的操作步骤,分析查询效率异常降低的原因。使用analyze命令分析数据库。analyze命令更新所有表中数据大小以......
  • openGauss 分析查询语句运行状态
    分析查询语句运行状态问题现象系统中部分查询语句运行时间过长,需要分析查询语句的运行状态。处理办法以操作系统用户omm登录主机。使用如下命令连接数据库。gsql-dpostgres-p8000postgres为需要连接的数据库名称,8000为端口号。设置参数track_activities为on。......
  • openGauss 分析查询语句是否被阻塞
    分析查询语句是否被阻塞问题现象数据库系统运行时,在某些业务场景下,查询语句会被阻塞,导致语句运行时间过长。原因分析查询语句需要通过加锁来保护其要访问的数据对象。当要进行加锁时发现要访问的数据对象已经被其他会话加锁,则查询语句会被阻塞,等待其他会话完成操作并释放锁资......
  • openGauss 分析查询语句长时间运行的问题
    分析查询语句长时间运行的问题问题现象系统中部分查询语句运行时间过长。原因分析查询语句较为复杂,需要长时间运行。查询语句阻塞。处理办法以操作系统用户omm登录主机。使用如下命令连接数据库。gsql-dpostgres-p8000postgres为需要连接的数据库名称,800......