WriteUP
此博客为比赛时协作文档的整理,包括后期复现的一些修改,感谢一起打比赛的小伙伴们
比赛地址
https://buuoj.cn/match/matches/89
起止时间
2022年3月26日 10:00 – 2022年3月26日 18:00
此博客为比赛时协作文档的整理,包括后期复现的一些修改,感谢一起打比赛的小伙伴们
https://buuoj.cn/match/matches/89
2022年3月26日 10:00 – 2022年3月26日 18:00
TQLCTF-Wordle题目出自当下火热的填字游戏
填字游戏的规则为输入五个字母,然后分别返回五个颜色
我们的任务就是用最少的次数,把答案找出来
在该题目中,颜色可以通过字节流分辨出来。在这之前,我在B站大学看到过一个讲述相关技术的视频,于是我就翻了下。
利用信息论解决Wordle问题
理论存在,实践开始
于是,又写了一个10K的代码,发现自己的代码只能做到平均4.3左右。
好废物啊我
于是上Github找轮子Wordle-solver
这个开源项目能做到平均3.4,然后就有了如下10K代码
见到了一题比较离谱的base64题目,VNCTF2022-Web-gocalc0,可能是我太菜的原因,明明hint告诉我,flag在session里面,我却怎样都Base64出不来,一直说解密出错。
这题对于Web没有一点难度,姑且放在MISC分类里面。
使用字符:数字(0 ~ 9),字母(A ~ F)
Base16先获取输入字符串每个字节的二进制值(不足8bit在高位补0),然后将其串联进来,再按照4bit一组进行切分(2^4=16)
,将每组二进制数分别转换成十进制,并对应下述编码。
即二进制转十六进制,对应下表
值 | 编码 | 值 | 编码 | 值 | 编码 | 值 | 编码 |
---|---|---|---|---|---|---|---|
0 | 0 | 4 | 4 | 8 | 8 | 12 | C |
1 | 1 | 5 | 5 | 9 | 9 | 13 | D |
2 | 2 | 6 | 6 | 10 | A | 14 | E |
3 | 3 | 7 | 7 | 11 | B | 15 | F |
在打VNCTF2022的时候遇到这样一道题,图片直接放在文章肯能看不清,各位可以点开来仔细观看
放大来看
又是点阵图,这不就是妥妥的点阵提取嘛,打开画图,量出来点之间的距离,然后开造!
结果,出来很意外,每个点之间的距离都是不一样的,都在49~51之间浮动,这就导致直接提取不能提取出有效的信息
好在,每一行每一列的点都在同一条直线上,只要求出最左上角的点,然后跑出每一行每一列的坐标,再拼接即可
拼接的话可以使用OpenCV库,但是Python的PIL(Pillow)好像更胜一筹,于是学了一下写了个脚本
from PIL import Image,ImageDraw
image = Image.open("misc-img-pixel-1.png")
Line=[]
Row=[]
black=image.getpixel((0,0))
for i in range(image.height-1):
if(image.getpixel((24,i))!=black):
Row.append(i)
for i in range(image.width-1):
if(image.getpixel((i,15))!=black):
Line.append(i)
ret = Image.new('RGB', (len(Line), len(Row)) )
draw = ImageDraw.Draw(ret)
for x in range(len(Line)-1):
for y in range(len(Row)-1):
draw.point((x, y), fill=image.getpixel((Line[x],Row[y])))
ret.show()
ret.save('result.png')
MISC题目中,ZIP压缩包一般会有五种破解方式
一般来说我们可以使用ARCHPR
来帮助我们破解ZIP
在得到一个压缩包的时候,我们应该先阅读属性内容,里面能给你一些解题提示
这个就提示我们要六位暴力
以下就是提示我们可能存在冗余数据
其次,我们还可能存在字典,当然啦,我们要有对应的字典才行
在打开压缩包的时候,我们可以留意一下内外压缩包的文件时候有CRC校验码相同的,如果有我们可以尝试明文破解口令。
但是我们也可以不破解口令,直接通过密钥解密文件
在处理冗余数据时,我们可以采用binwalk
判断冗余数据,并且binwalk -e
提取,有时候不行的话还是自己动手吧
以上四种都很好理解,伪加密我们要使用WinHex
打开,修改加密位完成