XCTF-Misc1 USB键盘流量分析

news/2024/5/19 22:47:58 标签: 网络安全, ctf, 密码学

m0_01

附件是一个USB流量文件
在这里插入图片描述

分析

1.键盘流量

USB协议数据部分在Leftover Capture Data域中,数据长度为八个字节,其中键盘击健信息集中在第三个字节中。
在这里插入图片描述

usb keyboard映射表:USB协议中HID设备描述符以及键盘按键值对应编码表
在这里插入图片描述

2.USB流量提取

USB协议的数据部分在 Leftover Capture Data 域中,可使用tshark提取流量
tshark -r xxx.pcapng -T fields -e usb.capdata > usbdata.txt
在这里插入图片描述

3.处理data文件,提取键盘信息

由于得到的USB文件中含有空行,常见的usbdata中以两字节加冒号的格式(如例子)。
在这里插入图片描述例子例子
对文件进行处理:

#1.使用脚本删除空行
with open('usbdata.txt', 'r', encoding='utf-8') as f:
    lines = f.readlines()
lines = filter(lambda x: x.strip(), lines)
with open('usbdata.txt', 'w', encoding='utf-8') as f:
    f.writelines(lines)

#2.将上面的文件用脚本分隔,加上冒号;
f=open('usbdata.txt','r') 
fi=open('out.txt','w')
while 1:
  a=f.readline().strip() 
  if a:
    if len(a)==16:#键盘流量的话len为16鼠标为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()


#3.最后用脚本提取
# print((line[6:8])) #输出6到8之间的值
#取出6到8之间的值
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('out.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)

在这里插入图片描述

运行脚本,将对应的USB转换出来是一串数字
在这里插入图片描述

4.云影解码

这一串数字,我也不知道是啥,搜吧

云影密码(01248码)

  • 这种加密方式仅使用01248这5种数字来进行,其中0用来唯一表示间隔,其他数字用加法和表示替换密文。再使用数字1-26表示字母A-Z。
    如:18 = 1+8 = 9 = I,1248 = 1+2+4+8 = 15 = O
  • 特点:密文中仅存在01248,加密对象仅有字母。
  • 加密方式:

题目:12401011801180212011401804

  • 注意(3个及以上数字时):虽然是相加,但是可以在数字内不按顺序相加,如124可写成(12)4和1(24)结果分别是7和16,只要保证不大于26即可
  • 第一步分割:即124 、1、118、118、212、114、18、4
  • 第二步基本翻译:例如124可以表示7,也可以表示16(但不可能是34,因为不会超过26),所以可以放弃来翻译其他没有异议的,可得:124、a、s、s、w、o、18、d
  • 第三步推测得出明文:可以推测后面的18表示r,前面的为p最合适。
    所以最后明文:password(密码)

解密脚本:

##with open(r'F:/桌面/tmp/2.txt','r') as f:
##    data = f.read()
##    print(data)

data = "884080810882108108821042084010421"
list = data.split('0')
print(list)

datalist=[]
def dlist(list):
    d = 0
    for i in list:
        for j in i:
            d += int(j)
        datalist.append(d)
        d=0
    return datalist
datalist = dlist(list)

def str(datalist):
    s=''
    for i in datalist:
        s += chr(i+64)
    return s
print(str(datalist))

在这里插入图片描述
最终得到flag

参考链接:
https://blog.csdn.net/ON_Zero/article/details/130528679
https://www.cnblogs.com/yuanchu/p/13492904.html
CTF密码学总结 https://blog.csdn.net/xiao__1bai/article/details/121089114


http://www.niftyadmin.cn/n/5302276.html

相关文章

mysql生成数据库字典文档

项目交付离不开项目数据库字典文档。下面用python轻松生成交付文档字典。 一 生成doc文档数据库字典效果: 1 生成doc文件,如下图: 2 打开文件字典格式内容 ,如下图: 二 python生成doc字典文档代码 生成doc数据库字典…

c# entityfreamwork 延时加载

在C#的Entity Framework(EF)中,延时加载(Lazy Loading)是一种对象关系映射(ORM)特性,它允许在需要时自动加载相关实体。当访问导航属性(即一个实体类中引用另一个实体类的…

【vue/uniapp】pdf.js 在一些型号的手机上不显示

引入: uniapp 项目通过 pdf.js 来在线浏览 pdf 链接,在微信小程序中都显示正常,但是通过 app 跳转小程序,在苹果、小米显示正常,但是华为和 oppo 就不显示,可以通过降 pdf.js 的版本来解决这个问题。 解决&…

[雷池WAF]长亭雷池WAF配置基于健康监测的负载均衡,实现故障自动切换上游服务器

为了进一步加强内网安全,在原有硬WAF的基础上,又在内网使用的社区版的雷池WAF,作为应用上层的软WAF。从而实现多WAF防护的架构。 经过进一步了解,发现雷池WAF的上游转发代理是基于Tengine的,所以萌生出了一个想法&…

CISSP 第7章:PKI和密码学应用

第七章 PKI和密码学应用 7.1 非对称密码学 对称密码系统具有共享的秘钥系统,从而产生了安全秘钥分发的问题 非对称密码学使用公钥和私钥对,无需支出复杂密码分发系统 7.1.1 公钥与私钥 7.1.2 RSA(兼具加密和数字签名) RSA算法依赖…

Python: 你所不知道的星号 * 用法

以下内容为本人的学习笔记,如需要转载,请声明原文链接 微信公众号「ENG八戒」https://mp.weixin.qq.com/s/FHyosiG_tegF5NRUEs7UdA 本文大概 1152 个字,阅读需花 6 分钟 内容不多,但也花了一些精力 如有余力,欢迎点赞…

kubeadm来快速搭建一个K8S集群

二进制搭建适合大集群,50台以下的主机 kubeadm更适合中下企业的业务集群 我们采用了二进制包搭建出的k8s集群,本次我们采用更为简单的kubeadm的方式来搭建k8s集群。 二进制的搭建更适合50台主机以上的大集群,kubeadm更适合中小型企业的集群…

智能分析网关V4智慧港口码头可视化视频智能监管方案

一、需求背景 近年来,水利港口码头正在进行智能化建设,现场管理已经是重中之重。港口作为货物、集装箱堆放及中转机构,具有昼夜不歇、天气多变、环境恶劣等特性,安全保卫工作显得更加重要。港口码头的巡检现场如何高效、快捷地对…