记一道USB流量分析CTF题

记一道USB流量分析CTF题USB流量分析

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

拿到数据包使用wireshark打开后看到Protocol 为USB协议,搜到了一篇关于USB流量分析的文章

贴链接
从CTF中学USB流量捕获与解析

下面看题

这里写图片描述

USB协议的数据部分在Leftover Capture Data域之中,在Mac和Linux下可以用tshark命令可以将 leftover capture data单独提取出来 命令如下:

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

运行命令并查看usbdata.txt 发现数据包长度为八个字节

这里写图片描述

这里查到USB流量分为键盘流量和鼠标流量。

键盘数据包的数据长度为8个字节,击键信息集中在第3个字节,每次key stroke都会产生一个keyboard event usb packet。

鼠标数据包的数据长度为4个字节,第一个字节代表按键,当取0x00时,代表没有按键、为0x01时,代表按左键,为0x02时,代表当前按键为右键。第二个字节可以看成是一个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]
    else:
        output += '[unknown]'
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()

转换后会得到一系列坐标点,需要辅以gnuplot 或者其他的绘图工具画出即可。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

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

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


相关推荐

  • Cts框架解析(12)-ITargetPreparer

    Cts框架解析(12)-ITargetPreparer

    2022年2月4日
    55
  • Python数字型整理(整型、布尔型、浮点型、复数、操作符、内建函数与工厂函数、控制数字精度)

    Python数字型整理(整型、布尔型、浮点型、复数、操作符、内建函数与工厂函数、控制数字精度)数字提供了标量贮存和直接访问 它是不可更改类型 也就是说变更数字的值会生成新的对象 这个过程对程序员和用户是透明的 Python 支持多种数字类型 整型 布尔型 双精度浮点型和复数 整型 Python 里面的整型默认就能表示很大的整型 可以是十进制 八进制 十六进制 八进制以 0o 开头 第一个字符是数字 0 第二个字符是字母 o 或 O 十六进制以 0x 开头 第一个字符是数字 0 第二个字符是字母 x 或 X 十进制在 Python3 x 版本中不支持后面加 l 或 L print print 0

    2025年9月25日
    4
  • 【事务】<查询不到同一调用方法其它事务提交的更新>解决方案

    【事务】<查询不到同一调用方法其它事务提交的更新>解决方案

    2020年11月12日
    188
  • Eclipse使用技巧–代码自动补全功能

    Eclipse使用技巧–代码自动补全功能1、在“触发代码提示”允许的范围之内,空格键和回车键就是快捷键。2、补全代码功能需设置“AutoActivationtriggersforjava”。3、“AutoActivationtriggersforjava”这个选项就是指触发代码提示的的选项,把“.”改成“.abcdefghijklmnopqrstuvwxyz(”的意思,就是指遇到26个字母和“.与(”这些符号就触发代码提示功能了。4、代码提示选项补充完整后,输入关键字即可得到提示功能,得到提示功能后,回车键与空格键就是

    2022年5月31日
    44
  • Python netcdf_python处理nc文件

    Python netcdf_python处理nc文件  NetCDF(networkCommonDataForm)网络通用数据格式是一种面向数组型并适于网络共享的数据的描述和编码标准。目前,NetCDF广泛应用于大气科学、水文、海洋学、环境模拟、地球物理等诸多领域。用户可以借助多种方式方便地管理和操作NetCDF数据集。  文件的后缀是.nc  这里采用python的一个专门用来处理.nc文件的库–netCDF4该库的安装直接:pipinstallnetCDF4这个库玩起来稍微比Pandas复杂一些。下面以全球降水量数据为例进行

    2025年8月20日
    44
  • cozmo vector的起源最详细的说明「建议收藏」

    VECTORvector,向量,从一个点,往一个方向无限延申。anki公司最初给他们的第一个家庭机器人取名就复用了vector这个众所周知的名字。要谈vector,我还是先从vector的小兄弟cozmo谈起……其实他们最初是个玩具公司,他们开发的赛车玩具我也没玩过,直到可爱的cozmo出现,它的特点就是很可爱。有手有脚有情绪,虽然跑起来没有赛车快。我赶紧买了一个回来。哈哈,说白了就是一个树莓派包装下。anki公司对他的定位还只是一个玩具,可以在手机上安装APP,APP.

    2022年4月16日
    48

发表回复

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

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