流量分析 - USB流量(手搓+一把梭)

admin 2025年4月23日20:51:23评论17 views字数 2648阅读8分49秒阅读模式
usb.pcapng
流量分析 - USB流量(手搓+一把梭)
第一种方法:手搓
直接打开流量包
流量分析 - USB流量(手搓+一把梭)
随便选一个看到data位置是8位的
知识补充:
键盘流量
基本知识
USB协议数据部分在Leftover Capture Data域中,数据长度为八个字节。

流量分析 - USB流量(手搓+一把梭)标准8字节键盘数据格式

字节位置
名称
描述
字节1
修饰键(Modifiers)
表示功能键(Ctrl、Shift、Alt等)的按下状态,每个二进制位对应一个按键。
字节2
保留字段
通常为 0x00,部分设备可能用于扩展功能(如多媒体键)。
字节3-8
普通按键码
最多6个同时按下的普通按键的键码(每个按键占1字节)。

字节1:Modifier Keys(功能键位掩码)

位(Bit)
对应按键
HID Usage ID
描述
Bit 0
左Ctrl
0xE0
按下时值为 1
Bit 1
左Shift
0xE1
Bit 2
左Alt
0xE2
Bit 3
左GUI(Win键)
0xE3
Bit 4
右Ctrl
0xE4
Bit 5
右Shift
0xE5
Bit 6
右Alt
0xE6
Bit 7
右GUI(Win键)
0xE7

字节3-8:普通按键码(HID Usage ID)

HID键码(Hex)
对应按键
字符/功能
0x00
无按键
-
0x04
A
A/a
0x05
B
B/b
0x06
C
C/c
0x07
D
D/d
0x08
E
E/e
0x09
F
F/f
0x0A
G
G/g
0x0B
H
H/h
0x0C
I
I/i
0x0D
J
J/j
0x0E
K
K/k
0x0F
L
L/l
0x10
M
M/m
0x11
N
N/n
0x12
O
O/o
0x13
P
P/p
0x14
Q
Q/q
0x15
R
R/r
0x16
S
S/s
0x17
T
T/t
0x18
U
U/u
0x19
V
V/v
0x1A
W
W/w
0x1B
X
X/x
0x1C
Y
Y/y
0x1D
Z
Z/z
0x1E
1
1/!
0x1F
2
2/@
0x20
3
3/#
0x21
4
4/$
0x22
5
5/%
0x23
6
6/^
0x24
7
7/&
0x25
8
8/*
0x26
9
9/(
0x27
0
0/)
0x28
Enter
回车键
0x29
Esc
Esc键
0x2A
Backspace
退格键
0x2B
Tab
Tab键
0x2C
Space
空格键
0x2D
-
-/_
0x2E
=
=/+
0x2F
[
[/{
0x30
]
]/}
0x31
/|
0x33
;
;/:
0x34
'
'/"
0x35
`
`/~
0x36
,
,/<
0x37
.
./>
0x38
/
/?
0x39
Caps Lock
大写锁定键
0x3A
F1
F1功能键
0x3B
F2
F2功能键
...
...
...
0x52
方向键上
0x51
方向键下
0x50
方向键左
0x4F
方向键右
直接用data字段进行比对
流量分析 - USB流量(手搓+一把梭)
这里是00.00.10.00.00.00.00.00 前面两个00.00对应的是修饰
流量分析 - USB流量(手搓+一把梭)
我们从第3位10去对于上面的字符表
流量分析 - USB流量(手搓+一把梭)
所以第一位就是m
知道上面这些,就可以构造脚本把所有data内容提取出来直接梭哈
# 导入所需库
import os
import subprocess
import json

# 定义tshark命令:从usb.pcapng文件中提取特定USB设备(2.2.1)的HID数据,输出为JSON格式
command = 'tshark -r usb.pcapng -Y usb.addr=="2.2.1"  -T json  -e usbhid.data > 1.json'

# 使用subprocess执行命令
proc = subprocess.Popen(command, shell=True,
                        stdout=subprocess.PIPE, stderr=subprocess.PIPE)
# 等待命令执行完成
proc.communicate()

# 加载生成的JSON文件
with open("1.json","r") as f:
    data=json.load(f)  # data现在包含所有匹配的USB数据包

a2=[]
for i in data:
    try:
        # 提取每个数据包的usbhid.data字段
        a1=i['_source']['layers']['usbhid.data'][0]  # [0]取第一个出现的数据
        a2.append(a1)
    except:
        continue  # 跳过没有usbhid.data字段的数据包

# 定义键盘映射表
normalKeys = {
    "04":"a", "05":"b", "06":"c", "07":"d", "08":"e", 
    # ... 其他常规按键映射 ...
    "39":"<CAP>"  # 大写锁定键
}

shiftKeys = {
    "04":"A", "05":"B", "06":"C", "07":"D", "08":"E",
    # ... 其他Shift组合键映射 ...
    "39":"<CAP>"  # 大写锁定键(实际应保持相同)
}

nums = []
for line in a2:
    if len(line)!=16:
        continue  # 过滤长度不符合要求的HID数据
    # 组合前两位(修饰键)和5-6位(实际按键代码)
    nums.append(line[0:2]+line[4:6])  

output = []
for n in nums:
    if n[2:4] == "00" :  # 00表示没有按键动作
        continue
    if n[2:4] in normalKeys:
        if n[0:2]=="02":  # 02表示Shift键按下
            output.append(shiftKeys[n[2:4]])
        else :
            output.append(normalKeys[n[2:4]])
    else:
        output += '[unknown]'  # 未识别的键值

print(output)  # 输出原始解析结果

flag = 0  # 大写锁定状态标志

# 退格键处理
for i in range(len(output)):
    try:
        a = output.index('<DEL>')  # 查找退格键位置
        del output[a]              # 删除DEL本身
        del output[a - 1]          # 删除前一个字符
    except:
        pass  # 没有DEL时跳过

# 大写锁定处理
for i in range(len(output)):
    try:
        if output[i] == "<CAP>":
            flag += 1
            output.pop(i)          # 移除CAP标记
            if flag == 2:          # 两次CAP恢复小写
                flag = 0
        if flag != 0:
            output[i] = output[i].upper()  # 转换为大写
    except:
        pass  # 处理索引越界等情况

# 最终输出
print("".join(output))
写完执行一下
流量分析 - USB流量(手搓+一把梭)
moectf{Learned_a6ou7_USB_tr@ffic}
第二种方法:自动化工具一把梭
打开一把梭工具
流量分析 - USB流量(手搓+一把梭)
把文件导入,执行一下
流量分析 - USB流量(手搓+一把梭)
秒了

moectf{Learned_a6ou7_USB_tr@ffic}

原文始发于微信公众号(信安一把索):流量分析 - USB流量(手搓+一把梭)

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年4月23日20:51:23
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   流量分析 - USB流量(手搓+一把梭)https://cn-sec.com/archives/3991930.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息