BUUCTF 每日打卡 2021-4-1

2 篇文章 0 订阅

引言

四月的第一天,今天就鸽了
当然,是骗人的
周四课虽然不多,但数分高代在同一天属实难顶

传统知识+古典密码

题干如下:
小明某一天收到一封密信,信中写了几个不同的年份
辛卯,癸巳,丙戌,辛未,庚辰,癸酉,己卯,癸巳。
信的背面还写有“+甲子”,请解出这段密文。

key值:CTF{XXX}

一看是干支纪年法,一查表
在这里插入图片描述
得到列表:[28, 30, 23, 8, 29, 10, 16, 30]
看着应该是 ascii 码
+甲子 即每个数加60(每个数加1就没有什么意义了)

上面这部分是传统知识,题目还提到古典密码,常见的加密内容为字符串,加密后还是字符串的古典密码不外乎栅栏密码、凯撒密码
而且题目信息很少,也不大可能是 维吉尼亚密码 或者 base 加密之类需要字母表的密码
在这里插入图片描述
结果为 SHUANGYU

其实我是搜了题解的
由于题目给的信息很少,而且输出不是题目给的格式 CTF{XXX} 即使想到了用栅栏密码和凯撒密码,也无法判断那个是正确结果,只能一个个试过去
而且很可能做了一次栅栏(或根本没想到用栅栏),没有正确结果就放弃了
结果应该是和比赛的名字有关联(“SHUANGYU”看起来像"双语"?),比如是 XX杯,这也是 BUUOJ 一个缺失的地方吧

传感器

“传统知识+古典密码”的问题暂且不提,但是附件里有另一个题是什么鬼???(您搁这儿套娃呢)
在这里插入图片描述
“传感器”解压之后题目如下:
5555555595555A65556AA696AA6666666955
这是某压力传感器无线数据包解调后但未解码的报文(hex)
已知其ID为0xFED31F,请继续将报文完整解码,提交hex。
提示1:曼联

当时我就想,这个题的结果可能是“传统知识+古典密码”的提示,然后就想先解这题,但是毫无思路
这个“提示1”给了一个足球俱乐部是什么鬼?提示是球队的比分或者创立年份之类的数字吗?可是有什么用呢?
而“压力传感器无线数据包”的线索也没有头绪(大概给的是高低电频给的二进制编码然后转成了题干(猜的))
只好去搜题解:https://blog.csdn.net/MikeCoke/article/details/106146391
好家伙,曼联原来指的是曼彻斯特编码,我人傻了,没见过
当然,就有必要学习一下曼彻斯特编码
曼彻斯特码(Manchester code),又称数字双向码、分相码或相位编码(PE),是 一种常用的的二元码线路编码方式之一,被物理层使用来编码一个同步位流的时钟和数据。在通信技术中,用来表示所要发送比特 流中的数据与定时信号所结合起来的代码。常用在以太网通信,列车总线控制,工业总线等领域
参考文章:CTF中常见的加解密集合
曼彻斯特码编解码原理:https://blog.csdn.net/i13919135998/article/details/52276029
曼彻斯特解码电路设计的关键是如何准确地从曼彻斯特码的数据流中提取出“10”和“01”信号,并且把它们转换成普通二进制编码中的“0”和“1”。例如对于曼彻斯特码“01010101”,如果从第一位开始解码,得到的二进制编码就是“1111”,而若从第二位开始解码,得到的二进制编码就是“000”和头尾两个曼彻斯特码。由此可见,如果曼彻斯特码数据流中只有“1”或“0”是不能得到正确的译码结果的,如果曼彻斯特编码数据流中出现“00”,则“00”前后的码元必定是“1”;如果曼彻斯特编码数据流中出现“11”,则“00”前后的码元必定是“0”,因此,我们可以将“00”与“11”作为曼彻斯特码译码的标志位。(阿巴阿巴阿巴)
编码的步骤,是用01表示0,用10表示1。正是因为用跳变沿表示电平,使得它的频率是信号的两倍。
将5555555595555A65556AA696AA6666666955转化为二进制,根据01->1,10->0.可以得到
0101->11
0110->10
1010->00
1001->01
将得到的二进制按照上述转换后,对比ID并不重合,根据八位倒序传输协议将二进制每八位reverse,然后转换十六进制就可以得到flag。

cipher='5555555595555A65556AA696AA6666666955'
def iee(cipher):
    tmp=''
    for i in range(len(cipher)):
        a=bin(eval('0x'+cipher[i]))[2:].zfill(4)
        tmp=tmp+a[1]+a[3]
        print(tmp)
    plain=[hex(int(tmp[i:i+8][::-1],2))[2:] for i in range(0,len(tmp),8)]
    print(''.join(plain).upper())

iee(cipher)

原文链接:https://blog.csdn.net/qq_45784859/article/details/105602386

结果其实与 flag 没有什么影响,就不再赘述了

结语

今天也坚持水完了(?
希望能坚持

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值