当前位置: 首页 > news >正文

杂项——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))

这个是编译代码

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

相关文章:

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

第一次做USB键盘与鼠标流量分析的题目&#xff0c;现在来好好做一个总结 1. 基础知识 USB流量指的是USB设备接口的流量&#xff0c;攻击者能够通过监听usb接口流量获取键盘敲击键、鼠标移动与点击、存储设备的铭文传输通信、USB无线网卡网络传输内容等等。 在正式介绍 USB H…...

Java如何实现企业微信审批流程

大家好&#xff0c;我是 V 哥。最近的一个项目中&#xff0c;用到企业微信的审批流程&#xff0c;整理出来分享给大家。在企业微信中实现审批流程可以通过调用企业微信的开放API完成&#xff0c;企业微信提供了审批应用接口&#xff0c;用于创建审批模板、发起审批流程以及获取…...

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 &#xff0c;表示指向某一文件或目录的 Unix 风格 绝对路径 &#xff08;以 / 开头&#xff09;&#xff0c;请你将其转化为 更加简洁的规范路径。 在 Unix 风格的文件系统中规则如下&#xff1a; 一个点 . 表示当前目录本身。此外&#xff0c;两个点 ..…...

nodejs入门教程4:nodejs创建第一个应用

1. 安装 Node.js 首先&#xff0c;确保你的计算机上已经安装了 Node.js。如果还没有安装&#xff0c;可以从官方网站&#xff08;https://nodejs.org&#xff09;下载并安装最新的 LTS 版本。安装完成后&#xff0c;你可以在命令行或终端中运行以下命令来验证安装&#xff1a;…...

启用 iPhone 原生的五笔输入

聊聊如何在 iOS 中使用原生的五笔输入法 本文虽然介绍的是如何添加五笔键盘&#xff0c;其实其他键盘&#xff08;双拼&#xff0c;外语键盘、第三方输入法&#xff09;也是类似的添加方式。 ‍ 使用原生的理由 虽然之前的文章列了不少第三方的五笔输入法&#xff0c;但其实…...

这个工具让你轻松开发一个带AI功能的Notion

这个工具让你轻松开发一个带AI功能的Notion Plate 是一款由 AI 加持的富文本编辑器&#xff0c;旨在帮助开发者创建功能强大的 WYSIWYG 文本编辑工具。本文将介绍 Plate 的基本信息、特点、以及如何快速上手使用。 软件简介 Plate 由 udecode 开发&#xff0c;基于 React 和 S…...

光耦合器的关键作用和创新---腾恩科技

光耦合器或光隔离器已成为电路中必不可少的器件&#xff0c;它允许信号在无需直接电接触的情况下跨不同电压域传输。这种隔离能力对于保护低压元件免受高压电路的潜在损坏至关重要。本文将仔细研究光耦合器在当今技术中发挥的独特作用&#xff0c;并探讨其在各种应用中不断扩展…...

穿越死锁的迷雾: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)项目&#xff0c;导入依…...

OTX系统架构分析

OTX&#xff08;Open Test Sequence Exchange&#xff09;系统架构是一种专门为汽车行业设计的测试序列交换格式&#xff0c;它基于ISO 13209标准&#xff0c;旨在提供一种独立于测试人员的可执行测试序列描述格式。 一、OTX系统架构概述 OTX架构是一种标准化的平台和格式&am…...

ASO如何低预算进行优化

当一个产品打造出来之后&#xff0c;正式上线是从零到一的过程&#xff0c;那从一到一百的路径就是获取流量到商业变现这个环节产生的&#xff0c;之前的文章也说过&#xff0c;一个产品只有有了一定的曝光才能获得相应的搜索流量或下载流量 ASO的江湖地位&#xff1a;有数据显…...

非线性数据结构之数

一、基本概念 1. 二叉树的节点与深度 节点&#xff1a;二叉树的基本组成单位&#xff0c;每个节点包含一个数据值、一个左子节点和一个右子节点。树的深度&#xff08;Height&#xff09;&#xff1a;指树的根节点到叶子节点的最长路径所包含的边数。 2. 二叉树的类型 叶节…...

个人开发三步走

一、开发准备 1&#xff0e;需求分析&#xff1a;需求是开发的起点。第一步要做的就是明确需求&#xff0c;具体来说就是分析目标用户、他们的需求(功能需求、性能需求、安全需求)和痛点。 2&#xff0e;技术选型&#xff1a;综合开发需求、个人能力&#xff08;能熟练使用&a…...

qt QAction详解

1、概述 QAction是Qt框架中的一个抽象类&#xff0c;用于表示用户界面中的一个动作&#xff08;action&#xff09;。这些动作可以绑定到菜单项、工具栏按钮或快捷键上&#xff0c;提供了一种灵活的方式来处理用户交互。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双击启动没反应&#xff0c;open //./pipe/dockerDesktopLinuxEngine: The system cannot find the file specified. 二、Docker Desktop运行run命令时显示错误HTTP code 500 并且错误大意是服务器拒绝访问 三、Docker Engine stopped/启动…...

微服务之间的调用关系

从数据的流向来区分有 1.直接调用&#xff08;推&#xff09;A直接B的接口直接将数据推送给B; 2.间接调用&#xff08;拉&#xff09;A先调B&#xff0c;B根据A给信息再去调A拉取数据&#xff1b; 感觉间接调用有点多此一举&#xff01;&#xff01;&#xff01; 直接调用的…...

网络六边形受到攻击

大家读完觉得有帮助记得关注和点赞&#xff01;&#xff01;&#xff01; 抽象 现代智能交通系统 &#xff08;ITS&#xff09; 的一个关键要求是能够以安全、可靠和匿名的方式从互联车辆和移动设备收集地理参考数据。Nexagon 协议建立在 IETF 定位器/ID 分离协议 &#xff08;…...

基于大模型的 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?

论文网址&#xff1a;pdf 英文是纯手打的&#xff01;论文原文的summarizing and paraphrasing。可能会出现难以避免的拼写错误和语法错误&#xff0c;若有发现欢迎评论指正&#xff01;文章偏向于笔记&#xff0c;谨慎食用 目录 1. 心得 2. 论文逐段精读 2.1. Abstract 2…...

新能源汽车智慧充电桩管理方案:新能源充电桩散热问题及消防安全监管方案

随着新能源汽车的快速普及&#xff0c;充电桩作为核心配套设施&#xff0c;其安全性与可靠性备受关注。然而&#xff0c;在高温、高负荷运行环境下&#xff0c;充电桩的散热问题与消防安全隐患日益凸显&#xff0c;成为制约行业发展的关键瓶颈。 如何通过智慧化管理手段优化散…...

Robots.txt 文件

什么是robots.txt&#xff1f; robots.txt 是一个位于网站根目录下的文本文件&#xff08;如&#xff1a;https://example.com/robots.txt&#xff09;&#xff0c;它用于指导网络爬虫&#xff08;如搜索引擎的蜘蛛程序&#xff09;如何抓取该网站的内容。这个文件遵循 Robots…...

在Mathematica中实现Newton-Raphson迭代的收敛时间算法(一般三次多项式)

考察一般的三次多项式&#xff0c;以r为参数&#xff1a; p[z_, r_] : z^3 (r - 1) z - r; roots[r_] : z /. Solve[p[z, r] 0, z]&#xff1b; 此多项式的根为&#xff1a; 尽管看起来这个多项式是特殊的&#xff0c;其实一般的三次多项式都是可以通过线性变换化为这个形式…...

【Linux】Linux 系统默认的目录及作用说明

博主介绍&#xff1a;✌全网粉丝23W&#xff0c;CSDN博客专家、Java领域优质创作者&#xff0c;掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域✌ 技术范围&#xff1a;SpringBoot、SpringCloud、Vue、SSM、HTML、Nodejs、Python、MySQL、PostgreSQL、大数据、物…...

GitHub 趋势日报 (2025年06月06日)

&#x1f4ca; 由 TrendForge 系统生成 | &#x1f310; https://trendforge.devlive.org/ &#x1f310; 本日报中的项目描述已自动翻译为中文 &#x1f4c8; 今日获星趋势图 今日获星趋势图 590 cognee 551 onlook 399 project-based-learning 348 build-your-own-x 320 ne…...

go 里面的指针

指针 在 Go 中&#xff0c;指针&#xff08;pointer&#xff09;是一个变量的内存地址&#xff0c;就像 C 语言那样&#xff1a; a : 10 p : &a // p 是一个指向 a 的指针 fmt.Println(*p) // 输出 10&#xff0c;通过指针解引用• &a 表示获取变量 a 的地址 p 表示…...