杂项——USB键盘与鼠标流量分析——BUUCTF——流量分析

第一次做USB键盘与鼠标流量分析的题目,现在来好好做一个总结

1. 基础知识

USB流量指的是USB设备接口的流量,攻击者能够通过监听usb接口流量获取键盘敲击键、鼠标移动与点击、存储设备的铭文传输通信、USB无线网卡网络传输内容等等。

在正式介绍 USB HID 协议之前,先解释一下上图,这是我们最初捕获到的几个流量包,其中包含了最常见的两种 USB 数据传输方式:

GET DESCRIPTOR
URB_INTERRUPT in
GET DESCRIPTOR 和 URB_INTERRUPT in 都属于 USB 数据传输方式,但它们的用途不同,GET DESCRIPTOR 用于获取设备信息,而 URB_INTERRUPT in 用于实时地获取设备数据。

GET DESCRIPTOR
GET DESCRIPTOR 是 USB 设备和主机之间进行控制传输的一种方式,用于获取设备信息(即各种描述符信息)。GET DESCRIPTOR 一般使用控制传输的 SETUP、DATA 和 STATUS 三个阶段来完成。

USB 描述符
USB 描述符是用于描述 USB 设备、接口、端点等属性的数据结构,主要包括以下几种类型:

设备描述符(Device Descriptor):用于描述 USB 设备的基本属性,如设备厂商 ID、设备产品 ID、设备类别等。
配置描述符(Configuration Descriptor):用于描述 USB 设备的配置信息,包括设备接口、端点数量、传输类型等信息。
接口描述符(Interface Descriptor):用于描述USB设备的接口信息,包括接口类别、子类别、协议等信息。
端点描述符(Endpoint Descriptor):用于描述USB设备的端点信息,包括端点地址、端点类型、端点方向、最大包大小等信息。
字符串描述符(String Descriptor):用于描述USB设备的字符串信息,如设备名称、制造商名称、产品名称等。
HID 描述符(HID Descriptor):仅用于 HID(Human Interface Device)设备,描述 HID 设备的属性和报告信息。


bDeviceClass/bDeviceSubClass:HID 设备在其设备描述符中的类/子类值均为 0。
idVendor:厂商 ID。
idProduct:产品 ID。
接口描述符(INTERFACE DESCRIPTOR)


bInterfaceClass:3,标识 HID 设备。
bInterfaceSubClass:1 表示设备支持引导协议, 0 表示设备只支持报告协议。
bInterfaceProtocol:1表示HID设备是键盘,2表示HID设备是鼠标。
请记住,接口描述符不能手动请求,必须与配置和端点描述符一起获取。

URB_INTERRUPT in


URB_INTERRUPT in 是一种 USB 中断传输方式,用于实时地从 USB 设备中读取数据。它允许 USB 设备向主机发送中断数据包,主机通过轮询的方式来获取数据。URB_INTERRUPT in 的数据传输是非常实时的,因为设备每隔一段时间就会发送一个中断数据包,主机只需要等待这个数据包到达即可获取数据。

HID 报告数据就通过这种方式来传输,即图中的 HID Data 字段。

击键信息集中在第3个字节,每次击键都会产生一个数据包。所以如果看到给出的数据包中的信息都是个字节,并且只有第 3 个字节不为0000,那么几乎可以肯定是一个键盘流量了。

就是要将HID Data 里的数据弄出来,然后进行查找这样子

做题步骤

1.使用wireshark检查流量包,发现了大量的可用USB数据,说明用键盘输入了东西,flag应该就是键盘输入的

2.使用tshark

我靠这个真的弄死我了,死活弄不出来,弄了一个小时,现在总结一下怎么弄

打开下载的wireshark文件夹

在文件夹输入cmd,进入该文件夹的目录

然后输入语句

tshark.exe -T json -r C:\Users\24514\Desktop\atta.pcapng  > C:\Users\24514\Desktop\fdsf.txt

就是将我桌面上的atta.pcapng文件弄成txt

3.使用py脚本提取出 HID Data

import redef extract_usbhid_data(file_path):usbhid_data_list = []with open(file_path, 'r', encoding='utf-8') as f:for line in f:# 查找包含 usbhid.data 的行并提取数据match = re.search(r'"usbhid\.data":\s*"([^"]+)"', line)if match:# 提取 usbhid.data 后的数据data = match.group(1).strip()usbhid_data_list.append(data)return usbhid_data_listdef write_to_file(data_list, output_file):with open(output_file, 'w', encoding='utf-8') as f:for data in data_list:f.write(data + '\n')  # 每条数据后加换行if __name__ == "__main__":input_file_path = r'C:\Users\24514\Desktop\atta.txt'  # 替换为你的输入文件路径output_file_path = r'C:\Users\24514\Desktop\usbdata.txt'  # 这个与下一个链接一起extracted_data = extract_usbhid_data(input_file_path)write_to_file(extracted_data, output_file_path)print(f"提取的数据已保存到 {output_file_path}")

这个是提取 HID Data的py

#!/usr/bin/env python
# -*- coding:utf-8 -*-normalKeys = {"04":"a", "05":"b", "06":"c", "07":"d", "08":"e", "09":"f", "0a":"g", "0b":"h", "0c":"i", "0d":"j", "0e":"k", "0f":"l", "10":"m", "11":"n", "12":"o", "13":"p", "14":"q", "15":"r", "16":"s", "17":"t", "18":"u", "19":"v", "1a":"w", "1b":"x", "1c":"y", "1d":"z","1e":"1", "1f":"2", "20":"3", "21":"4", "22":"5", "23":"6","24":"7","25":"8","26":"9","27":"0","28":"<RET>","29":"<ESC>","2a":"<DEL>", "2b":"\t","2c":"<SPACE>","2d":"-","2e":"=","2f":"[","30":"]","31":"\\","32":"<NON>","33":";","34":"'","35":"<GA>","36":",","37":".","38":"/","39":"<CAP>","3a":"<F1>","3b":"<F2>", "3c":"<F3>","3d":"<F4>","3e":"<F5>","3f":"<F6>","40":"<F7>","41":"<F8>","42":"<F9>","43":"<F10>","44":"<F11>","45":"<F12>"}
shiftKeys = {"04":"A", "05":"B", "06":"C", "07":"D", "08":"E", "09":"F", "0a":"G", "0b":"H", "0c":"I", "0d":"J", "0e":"K", "0f":"L", "10":"M", "11":"N", "12":"O", "13":"P", "14":"Q", "15":"R", "16":"S", "17":"T", "18":"U", "19":"V", "1a":"W", "1b":"X", "1c":"Y", "1d":"Z","1e":"!", "1f":"@", "20":"#", "21":"$", "22":"%", "23":"^","24":"&","25":"*","26":"(","27":")","28":"<RET>","29":"<ESC>","2a":"<DEL>", "2b":"\t","2c":"<SPACE>","2d":"_","2e":"+","2f":"{","30":"}","31":"|","32":"<NON>","33":"\"","34":":","35":"<GA>","36":"<","37":">","38":"?","39":"<CAP>","3a":"<F1>","3b":"<F2>", "3c":"<F3>","3d":"<F4>","3e":"<F5>","3f":"<F6>","40":"<F7>","41":"<F8>","42":"<F9>","43":"<F10>","44":"<F11>","45":"<F12>"}
output = []
keys = open('C:\\Users\\24514\\Desktop\\usbdata.txt',encoding='utf-8')#提取出来的usbdata.txt文件
for line in keys:try:if line[0]!='0' or (line[1]!='0' and line[1]!='2') 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' or line[6:8]=="00":continueif line[6:8] in normalKeys.keys():output += [[normalKeys[line[6:8]]],[shiftKeys[line[6:8]]]][line[1]=='2']else:output += ['[unknown]']except:pass
keys.close()flag=0
print("".join(output))
for i in range(len(output)):try:a=output.index('<DEL>')del output[a]del output[a-1]except:pass
for i in range(len(output)):try:if output[i]=="<CAP>":flag+=1output.pop(i)if flag==2:flag=0if flag!=0:output[i]=output[i].upper()except:pass
print ('output :' + "".join(output))

这个是编译代码

然后更改路径,运行,就出来了

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/462327.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Windows部署rabbitmq

本次安装环境&#xff1a; 系统&#xff1a;Windows 11 软件建议版本&#xff1a; erlang OPT 26.0.2rabbitmq 3.12.4 一、下载 1.1 下载erlang 官网下载地址&#xff1a; 1.2 下载rabbitmq 官网下载地址&#xff1a; 建议使用解压版&#xff0c;安装版可能会在安装软件…

HTML静态网页成品作业(HTML+CSS)——自行车介绍网页设计制作(1个页面)

&#x1f389;不定期分享源码&#xff0c;关注不丢失哦 文章目录 一、作品介绍二、作品演示三、代码目录四、网站代码HTML部分代码CSS部分代码 五、源码获取 一、作品介绍 &#x1f3f7;️本套采用HTMLCSS&#xff0c;未使用Javacsript代码&#xff0c;共有1个页面。 二、作品…

工厂电气及PLC【1章各种元件符号】

交流接触器的线圈通电后&#xff0c;线圈电流会产生磁场&#xff0c;衔铁在磁吸引力作用下带动触点动作&#xff1a;常开的主触点闭合&#xff0c;接通主电路&#xff1b;同时&#xff0c;常开的辅助触点闭合&#xff0c;常闭的辅助触点断开。当线圈失电或电压显著降低时&#…

使用GraphQL构建现代API

使用GraphQL构建现代API GraphQL简介 安装GraphQL 使用npm安装GraphQL 使用Yarn安装GraphQL 创建GraphQL服务器 定义Schema 编写Resolver 查询数据 变更数据 使用Apollo Client GraphQL订阅 数据验证 错误处理 分页查询 拆分和组合Schema 总结 随着API的发展&#xff0c;传统…

用Python设置、更新和获取Excel单元格的值

Excel工作簿作为一款广泛使用的数据管理工具&#xff0c;与Python相结合&#xff0c;可以使得自动化处理大量数据成为可能。通过Python来设置、更新以及读取Excel单元格的值&#xff0c;不仅可以极大地提高工作效率&#xff0c;减少重复劳动&#xff0c;还能增强数据处理流程的…

利用ChatGPT完成2024年MathorCup大数据挑战赛-赛道A初赛:台风预测与分析

利用ChatGPT完成2024年MathorCup大数据挑战赛-赛道A初赛&#xff1a;台风预测与分析 引言 在2024年MathorCup大数据挑战赛中&#xff0c;赛道A聚焦于气象数据分析&#xff0c;特别是台风的生成、路径预测、和降水风速特性等内容。本次比赛的任务主要是建立一个分类评价模型&…

Logback 常用配置详解

1. 配置文件解析 Logback 是 Spring Boot 默认使用的日志框架&#xff0c;Logback 配置主要包含 8 大元素 1.1 configuration Logback 配置文件的根元素&#xff0c;它包含所有的配置信息 1.2 appender 定义一个 Appender&#xff0c;即日志输出的目的地&#xff0c;如控制…

造纸行业湿法粉碎机、高速破碎机、粉碎磨粉机

细胞磨在造纸行业的应用主要体现在以下几个方面&#xff1a; 1.原料处理 细碎与研磨&#xff1a;造纸行业的原料&#xff0c;如木材、竹材等&#xff0c;需要经过细碎和研磨处理以获取适合造纸的纤维。细胞磨能够高效地实现这一过程&#xff0c;将原料细化至所需的粒度&#…

JAVA基础:jdbc (学习笔记)

基础操作 任何一种jdbc操作&#xff0c;都是由7步完成的 手动加载数据库驱动类{反射}获得连接对象写sql语句获得执行对象执行sql语句&#xff0c;同时获得结果处理结果关闭资源 功能一&#xff1a;添加表里的数据 public static void main4(String[] args) throws ClassNotF…

RabbitMQ最全教程-Part1(基础使用)

一、消息队列基本概念 消息队列中间件是分布式系统中重要的组件&#xff0c;主要解决应用解耦&#xff0c;异步消息&#xff0c;流量削锋等问题&#xff0c;实现高性能&#xff0c;高可用&#xff0c;可伸缩和最终一致性架构 1、消息队列的特点 可靠性 消息持久化&#xff…

英伟达 GPU 架构:演进与模型推理速度的深度关联

英伟达的 GPU 架构演进之路充满了创新与突破。 ©作者|Zane 来源|神州问学 一、 英伟达GPU的架构演进之路 1999 年&#xff0c;英伟达发布 Geforce256 图形处理芯片&#xff0c;首次提出 GPU 概念。早期的架构如 G80 或 GeForce 8800 GTX&#xff0c;包含 8 个 TPC&#…

Yolo V4详解

Yolo V4&#xff08;You Only Look Once version 4&#xff09;是一种先进的目标检测系统&#xff0c;于2020年推出。作为Yolo系列算法的最新版本&#xff0c;Yolo V4继承了其前代版本的优点&#xff0c;并在此基础上进行了多项改进&#xff0c;使得其性能得到了显著提升。本文…

实体类中为什么要实现serializable接口

最近见到好多项目中写的代码&#xff0c;在实体类中实现了Serializable接口。说实话&#xff1a;这个在以前学习的时候&#xff0c;貌似学过&#xff0c;但是一直没有用过&#xff0c;所以看着一脸懵逼&#xff0c;但是别人总不可能随便写的吧.....所以就去查了一下这个接口。 …

D55【python 接口自动化学习】- python基础之模块与标准库

day55 练习&#xff1a;实现求导 学习日期&#xff1a;20241101 学习目标&#xff1a;模块与标准库 -- 70 小试牛刀&#xff1a;如何使用Python为函数求导&#xff1f; 学习笔记&#xff1a; 需求分析 使用第三方模块实现函数求导 编写程序并测试 # 求导 from sympy import…

推荐一款功能强大的AI实时变声器:FliFlik Voice Changer

FliFlik VoiCE Changer是一款专注于声音变换与音频处理的创新软件&#xff0c;旨在满足从日常娱乐、游戏直播到播客制作、专业音频编辑的多种应用场景需求。无论是想在游戏中变换声音逗乐队友&#xff0c;还是在播客中塑造个性化的音效&#xff0c;这款软件都能提供灵活而强大的…

Spring Boot技术栈:打造大学城水电管理系统

2相关技术 2.1 MYSQL数据库 MySQL是一个真正的多用户、多线程SQL数据库服务器。 是基于SQL的客户/服务器模式的关系数据库管理系统&#xff0c;它的有点有有功能强大、使用简单、管理方便、安全可靠性高、运行速度快、多线程、跨平台性、完全网络化、稳定性等&#xff0c;非常…

2024 IC行业还能不能入了?

打个有趣的比方&#xff0c;18年以前入行IC的&#xff0c;就业前就知道或者就业后才知道&#xff0c;是去吃席只不过是“农村酒席”&#xff0c;但不至于吃坏肚子。对于这种阵仗&#xff0c;不是每个人都愿意去的&#xff0c;即便是在西电这样的院校&#xff0c;当年也有一些同…

基于双向长短期记忆网络(BiLSTM)的时间序列数据预测,15个输入1个输出,可以更改数据集,MATLAB代码

1. 数据收集与预处理 数据清洗&#xff1a;处理缺失值、异常值等。特征工程&#xff1a;提取有助于预测的特征。数据标准化&#xff1a;将时间序列数据标准化&#xff0c;使其具有零均值和单位方差&#xff0c;有助于模型训练。滑动窗口划分&#xff1a;将时间序列数据划分为多…

基于Python可视化的热门微博数据分析系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、SSM项目源码 系统展示 【2025最新】基于pythondjangovueMySQL的热…

推荐一款非常好用的3d设计软件:LuBan 3D

LuBan 3D是一款非常好用的3d设计软件&#xff0c;这款软件提供独特的3D的模型以及设计的理念&#xff0c;还可以自动为用户处理像三角形OBJ&#xff0c;PLY等网格模型。 基本简介 LuBan 3D是一款非常小巧但是功能十分强大的生成式设计软件。这款软件对于设计师和制作们来说非常…