杂项——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个字节,每次击键都会产生一个数据包。所以如果看到给出的数据包中的信息都是8 个字节,并且只有第 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))
这个是编译代码
然后更改路径,运行,就出来了
相关文章:
杂项——USB键盘与鼠标流量分析——BUUCTF——流量分析
第一次做USB键盘与鼠标流量分析的题目,现在来好好做一个总结 1. 基础知识 USB流量指的是USB设备接口的流量,攻击者能够通过监听usb接口流量获取键盘敲击键、鼠标移动与点击、存储设备的铭文传输通信、USB无线网卡网络传输内容等等。 在正式介绍 USB H…...
Java如何实现企业微信审批流程
大家好,我是 V 哥。最近的一个项目中,用到企业微信的审批流程,整理出来分享给大家。在企业微信中实现审批流程可以通过调用企业微信的开放API完成,企业微信提供了审批应用接口,用于创建审批模板、发起审批流程以及获取…...
GEE app:在地图上构建一个可以查看局部的小窗
目录 简介 函数 ee.Geometry.MultiLineString(coords, proj, geodesic, maxError) Arguments: Returns: Geometry.MultiLineString getBounds(asGeoJSON) Arguments: Returns: GeoJSONGeometry|List|String setControlVisibility(all, layerList, zoomControl, scaleC…...
leetcode71:简化路径
给你一个字符串 path ,表示指向某一文件或目录的 Unix 风格 绝对路径 (以 / 开头),请你将其转化为 更加简洁的规范路径。 在 Unix 风格的文件系统中规则如下: 一个点 . 表示当前目录本身。此外,两个点 ..…...
nodejs入门教程4:nodejs创建第一个应用
1. 安装 Node.js 首先,确保你的计算机上已经安装了 Node.js。如果还没有安装,可以从官方网站(https://nodejs.org)下载并安装最新的 LTS 版本。安装完成后,你可以在命令行或终端中运行以下命令来验证安装:…...
启用 iPhone 原生的五笔输入
聊聊如何在 iOS 中使用原生的五笔输入法 本文虽然介绍的是如何添加五笔键盘,其实其他键盘(双拼,外语键盘、第三方输入法)也是类似的添加方式。 使用原生的理由 虽然之前的文章列了不少第三方的五笔输入法,但其实…...
这个工具让你轻松开发一个带AI功能的Notion
这个工具让你轻松开发一个带AI功能的Notion Plate 是一款由 AI 加持的富文本编辑器,旨在帮助开发者创建功能强大的 WYSIWYG 文本编辑工具。本文将介绍 Plate 的基本信息、特点、以及如何快速上手使用。 软件简介 Plate 由 udecode 开发,基于 React 和 S…...
光耦合器的关键作用和创新---腾恩科技
光耦合器或光隔离器已成为电路中必不可少的器件,它允许信号在无需直接电接触的情况下跨不同电压域传输。这种隔离能力对于保护低压元件免受高压电路的潜在损坏至关重要。本文将仔细研究光耦合器在当今技术中发挥的独特作用,并探讨其在各种应用中不断扩展…...
穿越死锁的迷雾:pthread_mutex_lock的终极挑战与破解策略
穿越死锁的迷雾:pthread_mutex_lock的终极挑战与破解策略 一、死锁的基本概念二、pthread_mutex_lock 出现死锁的原因三、pthread_mutex_lock 出现死锁的表现四、处理pthread_mutex_lock 出现死锁的方法1. 避免死锁1.1 遵循锁的顺序原则1.2 使用定时锁1.3 使用尝试锁1.4 使用递…...
Dockerfile制作Oracle19c镜像
Dockerfile文件 cat > Dockerfile << EOF # 使用 Oracle Linux 8 作为基础镜像 FROM oraclelinux:8# 复制 Oracle 19c 安装包 COPY oracle-database-ee-19c-1.0-1.x86_64.rpm /tmp/# 安装 Oracle 19c 数据库和依赖 RUN yum localinstall -y /tmp/oracle-database-ee-…...
【时间之外】IT人求职和创业应知【23】
目录 新闻一:央行发布首个买断式逆回购交易公告 新闻二:2024CCF科技创业大赛报名截止 新闻三:BNB Chain将在迪拜主办第四届BNB孵化联盟(BIA) 认知决定你的赚钱能力。以下是今天可能影响你求职和创业的热点新闻: 今日关键字:TCL两连扳,已经跑了,我的认知就到此了 新…...
后端:Spring-1
文章目录 1. 了解 spring(Spring Framework)2. 基于maven搭建Spring框架2.1 纯xml配置方式来实现Spring2.2 注解方式来实现Spring3. Java Config类来实现Spring 2.4 总结 1. 了解 spring(Spring Framework) 传统方式构建spring(指的是Spring Framework)项目,导入依…...
OTX系统架构分析
OTX(Open Test Sequence Exchange)系统架构是一种专门为汽车行业设计的测试序列交换格式,它基于ISO 13209标准,旨在提供一种独立于测试人员的可执行测试序列描述格式。 一、OTX系统架构概述 OTX架构是一种标准化的平台和格式&am…...
ASO如何低预算进行优化
当一个产品打造出来之后,正式上线是从零到一的过程,那从一到一百的路径就是获取流量到商业变现这个环节产生的,之前的文章也说过,一个产品只有有了一定的曝光才能获得相应的搜索流量或下载流量 ASO的江湖地位:有数据显…...
非线性数据结构之数
一、基本概念 1. 二叉树的节点与深度 节点:二叉树的基本组成单位,每个节点包含一个数据值、一个左子节点和一个右子节点。树的深度(Height):指树的根节点到叶子节点的最长路径所包含的边数。 2. 二叉树的类型 叶节…...
个人开发三步走
一、开发准备 1.需求分析:需求是开发的起点。第一步要做的就是明确需求,具体来说就是分析目标用户、他们的需求(功能需求、性能需求、安全需求)和痛点。 2.技术选型:综合开发需求、个人能力(能熟练使用&a…...
qt QAction详解
1、概述 QAction是Qt框架中的一个抽象类,用于表示用户界面中的一个动作(action)。这些动作可以绑定到菜单项、工具栏按钮或快捷键上,提供了一种灵活的方式来处理用户交互。QAction不仅包含了动作的名称、图标、提示信息等属性&am…...
建立maven项目常见问题解决办法
从git拉的项目爆红 https://blog.csdn.net/wsdbld_/article/details/115380325 idea点击具体的类没有反应 https://www.likecs.com/show-204943934.html maven Could not find artifact com.** 无法下载原因分析 https://www.cnblogs.com/thinkingandworkinghard/p/100824…...
Windows 10 安装使用Docker踩过的坑和解决-31/10/2024
目录 环境版本 一、Docker Desktop双击启动没反应,open //./pipe/dockerDesktopLinuxEngine: The system cannot find the file specified. 二、Docker Desktop运行run命令时显示错误HTTP code 500 并且错误大意是服务器拒绝访问 三、Docker Engine stopped/启动…...
微服务之间的调用关系
从数据的流向来区分有 1.直接调用(推)A直接B的接口直接将数据推送给B; 2.间接调用(拉)A先调B,B根据A给信息再去调A拉取数据; 感觉间接调用有点多此一举!!! 直接调用的…...
网络六边形受到攻击
大家读完觉得有帮助记得关注和点赞!!! 抽象 现代智能交通系统 (ITS) 的一个关键要求是能够以安全、可靠和匿名的方式从互联车辆和移动设备收集地理参考数据。Nexagon 协议建立在 IETF 定位器/ID 分离协议 (…...
基于大模型的 UI 自动化系统
基于大模型的 UI 自动化系统 下面是一个完整的 Python 系统,利用大模型实现智能 UI 自动化,结合计算机视觉和自然语言处理技术,实现"看屏操作"的能力。 系统架构设计 #mermaid-svg-2gn2GRvh5WCP2ktF {font-family:"trebuchet ms",verdana,arial,sans-…...
简易版抽奖活动的设计技术方案
1.前言 本技术方案旨在设计一套完整且可靠的抽奖活动逻辑,确保抽奖活动能够公平、公正、公开地进行,同时满足高并发访问、数据安全存储与高效处理等需求,为用户提供流畅的抽奖体验,助力业务顺利开展。本方案将涵盖抽奖活动的整体架构设计、核心流程逻辑、关键功能实现以及…...
[ICLR 2022]How Much Can CLIP Benefit Vision-and-Language Tasks?
论文网址:pdf 英文是纯手打的!论文原文的summarizing and paraphrasing。可能会出现难以避免的拼写错误和语法错误,若有发现欢迎评论指正!文章偏向于笔记,谨慎食用 目录 1. 心得 2. 论文逐段精读 2.1. Abstract 2…...
新能源汽车智慧充电桩管理方案:新能源充电桩散热问题及消防安全监管方案
随着新能源汽车的快速普及,充电桩作为核心配套设施,其安全性与可靠性备受关注。然而,在高温、高负荷运行环境下,充电桩的散热问题与消防安全隐患日益凸显,成为制约行业发展的关键瓶颈。 如何通过智慧化管理手段优化散…...
Robots.txt 文件
什么是robots.txt? robots.txt 是一个位于网站根目录下的文本文件(如:https://example.com/robots.txt),它用于指导网络爬虫(如搜索引擎的蜘蛛程序)如何抓取该网站的内容。这个文件遵循 Robots…...
在Mathematica中实现Newton-Raphson迭代的收敛时间算法(一般三次多项式)
考察一般的三次多项式,以r为参数: p[z_, r_] : z^3 (r - 1) z - r; roots[r_] : z /. Solve[p[z, r] 0, z]; 此多项式的根为: 尽管看起来这个多项式是特殊的,其实一般的三次多项式都是可以通过线性变换化为这个形式…...
【Linux】Linux 系统默认的目录及作用说明
博主介绍:✌全网粉丝23W,CSDN博客专家、Java领域优质创作者,掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域✌ 技术范围:SpringBoot、SpringCloud、Vue、SSM、HTML、Nodejs、Python、MySQL、PostgreSQL、大数据、物…...
GitHub 趋势日报 (2025年06月06日)
📊 由 TrendForge 系统生成 | 🌐 https://trendforge.devlive.org/ 🌐 本日报中的项目描述已自动翻译为中文 📈 今日获星趋势图 今日获星趋势图 590 cognee 551 onlook 399 project-based-learning 348 build-your-own-x 320 ne…...
go 里面的指针
指针 在 Go 中,指针(pointer)是一个变量的内存地址,就像 C 语言那样: a : 10 p : &a // p 是一个指向 a 的指针 fmt.Println(*p) // 输出 10,通过指针解引用• &a 表示获取变量 a 的地址 p 表示…...
