USB流量分析「建议收藏」

USB流量分析「建议收藏」1.USB接口简介通过监听USB接口流量,可获取键盘击键,鼠标移动与点击,存储设备的明文传输通信,USB无线网卡网络传输内容等。2.题目wireshark打开数据包后发现为usb协议USB协议数据部分在LeftoverCaptureData域中,使用tshark命令将其单独提取出来tshark-rudn.pcapng-Tfields-eusb.capdata>us

大家好,又见面了,我是你们的朋友全栈君。

1. USB接口简介

通过监听USB接口流量,可获取键盘击键,鼠标移动与点击,存储设备的明文传输通信,USB无线网卡网络传输内容等。

2. 题目

wireshark打开数据包后发现为usb协议
这里写图片描述
USB协议数据部分在Leftover Capture Data域中,使用tshark命令将其单独提取出来

tshark -r udn.pcapng -T fields -e usb.capdata > usbdata.txt

cat命令查看分离出的usbdata.txt

cat usbdata.txt

这里写图片描述
由于USB流量分为键盘流量和鼠标流量,而键盘数据包的数据长度为八个字节,鼠标数据包的数据长度为四个字节。
键盘数据包击键信息集中在第三个字节,每次key stroke都会产生一个keyboard event usb packet。
鼠标数据包第一个字节代表按键,当取0×00时代表没有按键;当取0×01时代表按左键;当取0×02时代表当前按键为右键。第二个字节可看作为signed byte类型,其最高位为符号位,当值为正时,代表鼠标右移像素位;值为负时,代表鼠标左移像素位。第三个字节代表垂直上下移动的偏移。
此题为键盘数据包

友情链接USB协议,查找值与具体键位的对应关系:
http://www.usb.org/developers/hidpage/Hut1_12v2.pdf

根据第53页 usb keyboard映射表写脚本解码得出数据包
这里写图片描述

上脚本

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 line in keys:
    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]
print 'output :\n' + output

这里写图片描述
另附鼠标脚本

nums = [] 
keys = open('data.txt','r') 
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 : 
    print posx , posy 
keys.close()
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/135551.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 基于Spring MVC + Spring + MyBatis的【图书信息管理系统(一)】

    基于Spring MVC + Spring + MyBatis的【图书信息管理系统(一)】资源下载:https://download.csdn.net/download/weixin_44893902/33163160一、语言和环境1.实现语言:JAVA语言。2.环境要求:MyEclipse/Eclipse+Tomcat+MySql。3.使用技术:SpringMVC+Spring+Mybatis。二、实现功能随着校内图书馆的发展,现需要制作图书信息管理系统,主要功能如下:1.首页默认显示所有图书信息2.鼠标悬停某行数据时,以线性过渡动画显示光棒效果3.用.

    2022年6月3日
    37
  • Image.open()_image.open函数

    Image.open()_image.open函数文章目录1导入库2图像读取3读入图片类型4通道5显示方法6相互转换Image.open()和ci2.imread()都是用来读取的图像,但在使用过程中存在一些差别。具体,可以从以下几个角度进行分析:1导入库导入的包不同。img=cv2.imread(path),这是opencv中的处理图片的函数,使用时需importcv2img=Image.open(path),这是PIL中的一个处理图片的函数,使用时需fromPILimportImage#opencv-py

    2022年10月14日
    0
  • JavaSE 编写第一个程序

    JavaSE 编写第一个程序文章目录第一篇语法入门说在前面的话前言内容介绍更新内容其他说明本书由来帮助说明急需求职致谢与勘误自序第3版自序第2版自序第1版自序第0版自序第一章JDK下载及准备工作1.1Java介绍1.1.1Java简介1.1.2Java技术体系1.1.3前后端的工作内容1.1.4Java语言特性1.1.5Java用途1.2JDK下载1.2.1JDK与JRE的区别1.2.2JDK下载与安装1.2.3卸载1.2.4禁止JDK检查更新1.3编写代码前的准备

    2022年7月13日
    18
  • 以前写的php日历页面的后台,现在自己都有些看不懂了:)

    以前写的php日历页面的后台,现在自己都有些看不懂了:)

    2021年4月24日
    127
  • 图像处理算法工程师——1必备技能总结——2面试题大全[通俗易懂]

    图像处理算法工程师——1必备技能总结——2面试题大全[通俗易懂]图像算法工程师三重境界:一、传统图像算法工程师:主要涉及图形处理,包括形态学、图像质量、相机成像之3A算法、去雾处理、颜色空间转换、滤镜等,主要在安防公司或者机器视觉领域,包括缺陷检测;二、现代图像算法工程师:涉及模式识别,主要表现的经验为Adaboost、SVM的研究与应用,特征选取与提取,包括智能驾驶的研究与应用、行人检测、人脸识别;三、人工智能时代图像算法工程师:…

    2022年5月17日
    55
  • 一篇文章带你快速弄清楚什么是终端问题_清楚对什么

    一篇文章带你快速弄清楚什么是终端问题_清楚对什么Linux的使用者可能每天都会接触到Bash、Shell、控制台、终端。它们之间有什么不同吗?本文为你快速解释这些概念以及它们的区别。什么是终端首先我们来弄清楚什么是终端(terminal)。按

    2022年8月3日
    4

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号