USB(键盘)流量分析

这篇具有很好参考价值的文章主要介绍了USB(键盘)流量分析。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


hws2023的一道misc,没接触过,写一份博客,稍微带一点鼠标流量,自己做题收获,可能在某些情况仅适用本题

找到有用的usb流量

网上大部分讲USB协议数据在Leftover Capture Data域中,就这道题,以及目前已知少量博客显示,HID Data域中也具有价值(USB URB里找有没有数据就行)。鼠标流量数据长度为四个字节,键盘流量数据长度为八个字节,就这个题而言,若鼠标流量数据长度不满足,格式也不太对

鼠标流量

第一个字节:代表按键(00时,代表没有按键;01时,代表按左键;02时,代表当前按键为右键)
第二个字节:值为正时,代表鼠标右移像素位;
值为负时,代表鼠标左移像素位
第三个字节:代表垂直上下移动的偏移(当值为正时,代表鼠标上移像素位;值为负时,代表鼠标下移像素位)
上述引用和进一步了解后续鼠标流量具体流程可参考这篇文章:https://blog.csdn.net/qq_46150940/article/details/115431953

usb流量分析,总结,WEB,MISC,计算机外设

键盘流量(自己做题收获,可能仅适用本题)

本题就在HID Data域

第一个字节:代表按键(00时,代表没有按键;不论02或者20做题时统一当shift键)
第三个字节:代表键盘敲击时具体字母(hid键盘报告格式)

usb流量分析,总结,WEB,MISC,计算机外设

脚本或者自己对照

找出相应信息后,脚本直接还原信息比较快速方便,但是如果刚刚接触,一下子拿一个现成的脚本去改,不理解,修改难度比较大,就可以先找一个差不多脚本运行一下(得出结果不全,但是可以给手动对照一点参考,自己理解对照的对不对),然后自己手动对照hid键盘报告格式,了解原理,改着也方便
取一小段:

02:00:00:00:00:00:00:00   // 第三个字节没有数据不看
02:00:04:00:00:00:00:00   // 第一个字节为02,键盘操作shift键和第三个字节代表的键
//由上边可得第三个字节没有数据的可以直接忽略,即第一个字节为02或者20,shift键只作用于本行
20:00:26:00:00:00:00:00   // 第一个字节为20,shift键和第三个字节代表的键

20:00:00:00:00:00:00:00
00:00:00:00:00:00:00:00
00:00:10:00:00:00:00:00   // 直接第三个字节代表的键
00:00:00:00:00:00:00:00

USB(键盘)流量分析具体流程

流量包直接导入即可,寻找有用信息的IP,过滤导出

usb.src =="2.3.1"

usb流量分析,总结,WEB,MISC,计算机外设
拖kali里面(python运行方便,也不咋出错),拖不进去的配一下tools。python脚本在那块,就在哪块,右键打开终端!!!不容易出错
usb流量分析,总结,WEB,MISC,计算机外设
使用tshark 命令把pcap的数据提取并去除空行到usbdata.txt

# sed '/^\s*$/d' 剔除空行,减少不必要麻烦特别鼠标流量
tshark -r usb.pcapng -T fields -e usb.capdata | sed '/^\s*$/d' > usbdata.txt

对!没错,我改包名了,不太会tshark命令,就和找到教程里面的包名保持一致,还是要了解一下的。可以看这个!

注意大小写
-r: 读取本地文件,可以先抓包存下来之后再进行分析;
-T 设置解码结果输出的格式,包括text,ps,psml和pdml,默认为text。
-t 设置解码结果的时间格式。“ad”表示带日期的绝对时间,“a”表示不带日期的绝对时间,“r”表示从第一个包到现在的相对时间,“d”表示两个相邻包之间的增量时间(delta)。
-E: 当-T字段指定时,设置输出选项,header=y意思是头部要打印;
-e: 当-T字段指定时,设置输出哪些字段

# 字节和字节间加冒号的脚本
f=open('usbdata.txt','r')
fi=open('out.txt','w')
while 1:
    a=f.readline().strip()
    if a:
        if len(a)==16: # 鼠标流量的话len改为8
            out=''
            for i in range(0,len(a),2):
                if i+2 != len(a):
                    out+=a[i]+a[i+1]+":"
                else:
                    out+=a[i]+a[i+1]
            fi.write(out)
            fi.write('\n')
    else:
        break

fi.close()

还原信息(有冒号时提取数据的[6:8],无冒号时数据在[4:6])

# x
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>"}
# shift+x
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('out.txt')
for line in keys:
    try:
#通过line[]取值过滤无用信息,注意(line[0]!='0' and line[0]!='2') or (line[1]!='0' and line[1]!='2') ,一般情况x不等于信息字符位其余的位line[x]!='0'即可
        if (line[0]!='0' and line[0]!='2') 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":
             continue
        if line[6:8] in normalKeys.keys():
#由于02,20两种情况,output += 不能写一行,加一个if语句
            if line[0]=='2':
            		output += [[normalKeys[line[6:8]]],[shiftKeys[line[6:8]]]][line[0]=='2']
            else:
            		output += [[normalKeys[line[6:8]]],[shiftKeys[line[6:8]]]][line[1]=='2']
        else:
#对照的很全了,基本可以忽略[unknown]
            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+=1
            output.pop(i)
            if flag==2:
                flag=0
        if flag!=0:
            output[i]=output[i].upper()
    except:
        pass
# 注意版本,有的为:print 'output :' + "".join(output)
print ('output :' + "".join(output))

运行可得(运行时由于tab键和空格混用,可能会报错)
usb流量分析,总结,WEB,MISC,计算机外设
放大一点
usb流量分析,总结,WEB,MISC,计算机外设
解释一下,运行完的第一行,每一行还原后的结果,看不懂output:这一行怎么来的,自己键盘敲一遍就行(<DEL>删除前一个,<CAP> <CAP>之间的大写)[unknown]直接删就行,前提需要确保脚本的正确,以及对照数据的完整性(例如:例子脚本中的normalKeys和shiftKeys数据)

流程学习于:https://blog.csdn.net/qq_43625917/article/details/107723635文章来源地址https://www.toymoban.com/news/detail-741077.html

到了这里,关于USB(键盘)流量分析的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Android 13.0 通过驱动实现禁用usb鼠标和usb键盘功能

    在13.0的系统产品定制化开发中,在进行定制中有关于usb键盘和usb鼠标的需求中,产品要求禁止usb口挂载usb鼠标和usb键盘,所以需要要求在usb挂载类型的时候 判断如果是usb鼠标和usb键盘就不让挂载,这就需要从驱动方面入手来解决这个问题,接下来看下驱动的某些挂载usb的相

    2024年02月08日
    浏览(45)
  • Android 12.0 通过驱动实现禁用usb鼠标和usb键盘功能

    在12.0的系统产品定制化开发中,在进行定制中有关于usb键盘和usb鼠标的需求中,产品要求禁止usb口挂载usb鼠标和usb键盘,所以需要要求在usb挂载类型的时候 判断如果是usb鼠标和usb键盘就不让挂载,这就需要从驱动方面入手来解决这个问题,接下来看下驱动的某些挂载usb的相

    2024年02月08日
    浏览(85)
  • 【usb】linux内核USB键盘驱动解析--普通键值上报及转化

    建议阅读前置文章【usb】linux内核USB键盘驱动解析–特殊键值上报及转化 以Linux5.10内核中USB键盘驱动为例进行解析:https://mirrors.edge.kernel.org/pub/linux/kernel/v5.x/linux-5.10.tar.gz 文件路径:linux-5.10/drivers/hid/usbhid/usbkbd.c 本次我们主要分析第120~139行的这个for循环。 for循环变量i范围是

    2023年04月08日
    浏览(26)
  • 树莓派4B 鼠标键盘不可用,USB3.0&&USB2.0失效

    1.将sd卡插入电脑,找到config.txt 2.添加3条,具体哪条,有机会再看 备注:由于更新系统出现的问题,无语中。。。。。。。。。

    2024年02月06日
    浏览(28)
  • 基于STM32的USB键盘

    1、选择相应芯片(本文使用STM32F070F6P6) 2、RCC时钟配置和Debug设置 注:这里的PA9/10要重映射为PA11/12供USB接口使用(大部分芯片是分开的不用设置) 3、配置USB 注:这里的PID和VID默认就可以了(多设备时可以更改) 4、时钟配置 ①、修改USBD_HID_CfgFSDesc参数 首先长度,跳转至定义修改为

    2024年02月03日
    浏览(32)
  • 踩坑记录——USB键盘睡眠唤醒

    前段时间我用一个国产MCU实现了雷蛇键盘的效果,按键支持十键无冲,RGB灯支持单控任意一个灯任意一种颜色,但是这个过程还是比较曲折的,原本以为键盘功能是最难搞的,低功耗处理是最简单的,没想到前面这么顺利,最后才翻车了,所以特意出一期记录一下我踩过的坑

    2024年02月09日
    浏览(35)
  • MISC:HTTP 流量分析技术.

    Misc即杂项,是信息隐藏又称信息伪装,就是通过减少载体的某种冗余,如空间冗余、数据冗余等,来隐藏敏感信息,达到某种特殊的目的。 信息隐藏打破了传统密码学的思维范畴,从一个全新的视角审视信息安全。与传统的加密相比,信息隐藏的隐蔽性更强,在信息隐藏中

    2024年02月11日
    浏览(29)
  • 项目:USB键盘和鼠标的复合设备

            我们的复合设备使用一个物理设备就可以完成多个功能。       使用复合设备同时完成USB键盘和鼠标功能,它的主要实现方式有两种, 第一个就是我们将多个设备描述符合并成一个,这个相对比较简单,我们只要根据相应的报告描述符处理数据就可以。 第二个就是

    2024年04月11日
    浏览(37)
  • 教你STM32做USB鼠标、键盘

    使用CubeMX软件傻瓜式的配置,一键生成USB的HID驱动。 ①、选择相对应的芯片  ②、配置时钟和Debug和debug      ③、配置USB    ④、生成代码          最好把这个也勾上,勾上以后每个外设配置不再都给你塞到main.c里,而是建一个.c.h,这样感觉舒服多了         USB协议

    2024年01月23日
    浏览(29)
  • 定义USB接口,鼠标类和键盘类都可以作为实现类去实现USB接口

    目录 程序设计 程序分析 系列文章 ​ 如图所示,我们电脑上都有USB接口,当我们的鼠标和键盘插上去之后才可以使用,拔出来就关闭使用。其实具体是什么USB设备,笔记本并不关心,只要符合USB规格的设备都可以。鼠标和键盘要想能在电脑上使用,那么鼠标和键盘也必须遵守

    2024年02月06日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包