BUUCTF 每日打卡 2021-5-20
引言
无
EasyProgram
题目给了一堆加密伪代码: get buf unsign s[256] get buf t[256] we have key:whoami we have flag:????????????????????????????????
for i:0 to 256 set s[i]:i
for i:0 to 256 set t[i]:key[(i)mod(key.lenth)]
for i:0 to 256 set j:(j+s[i]+t[i])mod(256) swap:s[i],s[j]
for m:0 to 38 set i:(i + 1)mod(256) set j:(j + S[i])mod(256) swap:s[i],s[j] set x:(s[i] + (s[j]mod(256))mod(256)) set flag[m]:flag[m]^s[x]
fprint flagx to file 可以发现,程序的前三个 for 循环都没有涉及到 flag,知识构造了两个数组 s, t,并且进行了一系列操作 在最后一个 for 循环中将 flag 与数组 s 做异或运算得到密文 所以只要按代码所述构造 s,然后与密文做异或运算即可得出密文 代码如下:
1 | with open("file.txt", 'rb') as f: |
结果为:flag{f238yu28323uf28u2yef2ud8uf289euf} 参考代码:https://www.codenong.com/cs106478950/
Classical Cipher
附件内容是一个 key.txt 和一个包含了一张图片的加密压缩包 key.txt 内容为: 解密后的flag请用flag{}包裹 压缩包密码:gsv_pvb_rh_zgyzhs 对应明文: ***_key_**_******
看到题目,猜想是凯撒密码 但是不对 然后尝试用词频分析爆破:
试了几个,不行 只能用传统艺能:找 wp 原来是 Atbash Cipher(没碰到过) 解压加密压缩包,得到图片:
容易发现其中一种密码是变种的猪圈密码:
另一种是啥? 原来是埃及象形文字(啊这)
得到结果:
flag 均为小写,即为结果
结语
希望继续坚持