记一次CTF的USB流量分析

记一次CTF的USB流量分析最近在研究鼠标流量,找到如下的文章:https://www.cnblogs.com/hackxf/p/10670844.html根据这个师傅的说法,不同的鼠标抓到的流量不一样,一般的鼠标流量是四个字节,第一个字节表示按键指示左键右键,第二个字节表示水平位移,为正(小于127)是向右移动,为负(补码负数,大于127小于255)是向左移动。第三个字节表示垂直位移,为正(小于127)是向上移动,为负…

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

usb鼠标流量

最近在研究鼠标流量,找到如下的文章:
https://www.cnblogs.com/hackxf/p/10670844.html
根据这个师傅的说法,不同的鼠标抓到的流量不一样,一般的鼠标流量是四个字节,第一个字节表示按键指示左键右键,第二个字节表示水平位移,为正(小于127)是向右移动,为负(补码负数,大于127小于255)是向左移动。第三个字节表示垂直位移,为正(小于127)是向上移动,为负(补码负数,大于127小于255)是向下移动。事实上,起作用的只是三个相邻的字节。
然而,有些鼠标的流量似乎不那么标准,比如上面那个师傅,他抓出来的流量是8字节的,于是他就取了1、2、3字节来进行分析。而我抓到的流量是6字节的。
如下图:
在这里插入图片描述

经过分析,我对应的起作用的字节是2、3、4字节,稍微修改了下师傅的脚本。

#sniffer.py
nums = []
keys = open('usbdata.txt','r')
result=open('result.txt','w')
posx = 0
posy = 0
for line in keys:
    if len(line) != 18 :#忽略空行
         continue
    x = int(line[6:8],16)
    y = int(line[9:11],16)
    if x > 127 :
        x -= 256
    if y >127 :
        y -=256
    posx += x
    posy += y
    btn_flag = int(line[3:5],16)  # 1 for left , 2 for right , 0 for nothing
    if btn_flag == 1 :
        result.write(str(posx)+' '+str(posy)+'\n')
keys.close()
result.close()

同时在控制台里面运行以下命令出来了结果。

tshark -r test2.pcapng -T fields -e usb.capdata > usbdata.txt
python3 sniffer.py
gnuplot.exe -e "plot 'result.txt'" -p

但是这样的图像出来是反的。
在这里插入图片描述

于是我又加了个负号。

#sniffer.py
nums = []
keys = open('usbdata.txt','r')
result=open('result.txt','w')
posx = 0
posy = 0
for line in keys:
    if len(line) != 18 :#忽略空行
         continue
    x = int(line[6:8],16)
    y = int(line[9:11],16)
    if x > 127 :
        x -= 256
    if y >127 :
        y -=256
    posx += x
    posy += y
    btn_flag = int(line[3:5],16)  # 1 for left , 2 for right , 0 for nothing
    if btn_flag == 1 :
        result.write(str(posx)+' '+str(-posy)+'\n')
keys.close()
result.close()

图像正了,但还是有倾斜,又反复试了多次,和画图的结果还是不太一样。
在这里插入图片描述
在这里插入图片描述
经过对比,稍微调整了参数,具体的参数作用注释里面有说明

#sniffer.py
nums = []
keys = open('usbdata.txt','r')
result=open('result.txt','w')
posx = 0
posy = 0
for line in keys:
    if len(line) != 18 :#忽略空行
         continue
    x = int(line[6:8],16)
    y = int(line[9:11],16)
    if x > 127 :
        x -= 256
    if y >120 :#这个参数控制单个字符的高度,如果高度过大导致字符过瘦,请调大
        y -=264#这个参数控制字符串的倾斜程度,如果向下倾斜就调高,如果向上倾斜就调低
    posx += x
    posy += y
    btn_flag = int(line[3:5],16)  # 1 for left , 2 for right , 0 for nothing
    if btn_flag == 1 :
        result.write(str(posx)+' '+str(-posy)+'\n')
keys.close()
result.close()

这下结果就比较接近了。
在这里插入图片描述
流量详见附件:
https://download.csdn.net/download/fjh1997/12374482

2. USB键盘流量

usb键盘流量就容易的多,主要起作用的是七个字节(1、3~8)。键盘流量只记录按下的按键。释放按键不进行记录。

在mac os catalina 15上面抓usb流量比较方便

重启Mac,进入恢复模式
在终端里面输入csrutil disable关闭SIP保护
再次重启之后使用命令sudo ifconfig XHC20 up
开启端口之后使用wireshark抓包即可。

BYTE1 --
       |--bit0:   Left Control是否按下,按下为1 
       |--bit1:   Left Shift  是否按下,按下为1 
       |--bit2:   Left Alt    是否按下,按下为1 
       |--bit3:   Left GUI    是否按下,按下为1 
       |--bit4:   Right Control是否按下,按下为1  
       |--bit5:   Right Shift 是否按下,按下为1 
       |--bit6:   Right Alt   是否按下,按下为1 
       |--bit7:   Right GUI   是否按下,按下为1 
BYTE2 -- 暂不清楚,有的地方说是保留位
BYTE3--BYTE8 -- 这六个为普通按键

详细的对照表可以去这里看:
https://www.usb.org/sites/default/files/documents/hut1_12v2.pdf
但是在抓包的时候也需要注意一些点同时在抓流量的时候也会遇到一些问题,比如8个字节都是0的USB流量太多以及其他USB设备的流量的干扰,需要用filter“usb.capdata != 00:00:00:00:00:00:00:00 and usb.src == “96.1.1””进行过滤,如下图。
在这里插入图片描述
再比如同样一个s没加shift是0000160000000000,加了shift之后是0200160000000000
在这里插入图片描述

在这里插入图片描述
有些时候也会遇到多个按键一起按的情况,这个时候3~8字节可能会被利用起来。
在这里插入图片描述
这里我做了一个实验,输入”hello I’m good“之后查看抓到的流量是什么:

import os
os.system("tshark -r test.pcapng -T fields -e usb.capdata > usbdata.txt")
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>"}


nums = []
keys = open('usbdata.txt')
for line in keys:
    if len(line)!=17: #首先过滤掉鼠标等其他设备的USB流量
         continue
    nums.append(line[0:2]+line[4:6]) #取一、三字节
keys.close()
output = ""
for n in nums:
    if n[2:4] == "00" :
        continue

    if n[2:4] in normalKeys:
        if n[0:2]=="02": #表示按下了shift
            output += shiftKeys [n[2:4]]
        else :
            output += normalKeys [n[2:4]]
    else:
        output += '[unknown]'
print('output :n' + output)

得到如下结果:
在这里插入图片描述

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

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/139794.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 文本挖掘工具的介绍[通俗易懂]

    文本挖掘工具的介绍[通俗易懂]1、商业文本挖掘的工具2、开源的数据挖掘工具ROSTCM确实是一个很好用的工具。主要用于写论文,真的很好用。LingPipe主要用于自然语言的处理:主题分类(TopClassification)命名实体识别(NamedEntityRecognition)词性标注(Part-ofSpeechTagging)句题检测(Sen

  • Maven打包时引入本地jar包

    Maven打包时引入本地jar包背景开发的时用到的jar包可能在私服中找不到,需在下载到本地,然后在编译器Eclipse或者IDEA中引入本地jar包,这样在本地开发是OK的,但是linux服务器通过Maven打包的时候会提示异常找不到对应的类。这是需要在我们的pom.xml文件添加点配置了。落地开发支付宝沙箱支付时,需要引入本地jar包,我把jar存放的项目中的/src/main/resources/lib下1.打…

  • c# WinForm开发 DataGridView控件的各种操作总结(单元格操作,属性设置)

    c# WinForm开发 DataGridView控件的各种操作总结(单元格操作,属性设置)

    2021年12月10日
  • 安全-流量劫持形成的原因

    流量劫持,这种古老的攻击沉寂了一段时间后,最近又开始闹的沸沸扬扬。众多知名品牌的路由器相继爆出存在安全漏洞,引来国内媒体纷纷报道。只要用户没改默认密码,打开一个网页甚至帖子,路由器配置就会被暗中修改。互联网一夜间变得岌岌可危。详解流量劫持的形成原因攻击还是那几种攻击,报道仍是那千篇一律的砖家提醒,以至于大家都麻木了。早已见惯运营商的各种劫持,频繁的广告弹窗,大家也无可奈何。这么多年也没出现…

  • vimrc配置_vim环境配置

    vimrc配置_vim环境配置博文背景写代码没vim难受,装个vim它对于快捷键的设置并不能和visualstudio一样很方便地设置将所有快捷键映射到vim插件,所以记录配置后的文件非常有必要。具体操作切换vim插件状态的快捷键设置:文件路径:C:\Users\Administrator\AppData\Roaming\JetBrains\WebStormXXX\options\vim_settings.xml文件内容:<application><componentname=”VimEdito

  • ABAP开发语言「建议收藏」

    ABAP开发语言「建议收藏」2.第二部分ABAP开发语言2.1.ABAP基础2.1.1.语言概述2.1.1.1.程序结构ABAP程序源码结构包括数据定义和处理块两部分;处理块又分为事件块,对话模块,过程。过程中可以定义自己的局部变量。事件块,对话模块,只能使用全局数据定义。2.1.1.2.程序类型可直接运行的应用程序(可分配事务代码)可执行程序Executableprogram,类型代码…

    2022年10月30日

发表回复

您的电子邮箱地址不会被公开。

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