2020DDCTFMisc

前言

这次的DDCTF也没什么时间搞,也就搞了一道Misc最简单的的拼图题,剩下的真就溜了。不过这次居然被我拿到了先锋?

签到

听说第一个拿到分数的人有奖?那我自然准时蹲点签到啊!先拿到已经发现的签到flag!
签到flag
不出意外,11点网站准时崩,不过还好,刷了几下就好了,于是迅速找到签到,直接提交,居然真被我抢到了一血?
一血
这真是意外之喜。

一起拼图吗

这道题拿到压缩包,解压发现有6400张小图片,还给了一张demo.png(下图经过压缩),看来应该是拼图了。
demo.png
于是先把6400张图片给拼到一起,一张小图片是51*27。
小图片大小
demo.png是4096*2160,刚好是小图片宽高的大约80倍,所以不难推测出整个拼后的图片行列应该是80行。
demo的大小
用如下代码可以将小图片拼接:

import PIL.Image as Image
import os
IMAGES_PATH = r'E://desktop/file_d0wnl0ad/'
IMAGE_SIZE = (51, 27) # 每张小图片的大小
IMAGE_ROW = 80 # 大图行数
IMAGE_COLUMN = 80 # 大图列数
IMAGE_SAVE_PATH = 'final.jpg' # 图片转换后的地址
image_names = os.listdir(IMAGES_PATH) # 获取图片集地址下的所有图片名称
image_names.sort() # 排序,但是这里没用处
# 简单的对于参数的设定和实际图片集的大小进行数量判断
if len(image_names) != IMAGE_ROW * IMAGE_COLUMN:
raise ValueError("合成图片的参数和要求的数量不能匹配!")
# 定义图像拼接函数
def image_compose():
to_image = Image.new('RGB', (IMAGE_COLUMN * IMAGE_SIZE[0], IMAGE_ROW * IMAGE_SIZE[1])) #创建一个新图
# 循环遍历,把每张图片按顺序粘贴到对应位置上
for y in range(1, IMAGE_ROW + 1):
for x in range(1, IMAGE_COLUMN + 1):
from_image = Image.open(IMAGES_PATH + image_names[IMAGE_COLUMN * (y - 1) + x - 1]).resize(
(IMAGE_SIZE[0], IMAGE_SIZE[1]),Image.ANTIALIAS)
to_image.paste(from_image, ((x - 1) * IMAGE_SIZE[0], (y - 1) * IMAGE_SIZE[1]))
return to_image.save(IMAGE_SAVE_PATH) # 保存新图
image_compose() #调用函数

最后得到的结果(未压缩)十分迷惑,根本无法看出。。。可能是小图片顺序问题:
迷惑结果
最后只能手动找到里面存在flag的图块,进行手动拼接。最后得到flag:
flag
也就是

DDCTF{484e61cd1483c34db71a721bc8a829c8}

文章作者: Leaflag
文章链接: https://www.leaflag.cn/2020/09/04/2020DDCTFMisc/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 LeaflagのBlog