前言
这次的DDCTF也没什么时间搞,也就搞了一道Misc最简单的的拼图题,剩下的真就溜了。不过这次居然被我拿到了先锋?
签到
听说第一个拿到分数的人有奖?那我自然准时蹲点签到啊!先拿到已经发现的签到flag!

不出意外,11点网站准时崩,不过还好,刷了几下就好了,于是迅速找到签到,直接提交,居然真被我抢到了一血?

这真是意外之喜。
一起拼图吗
这道题拿到压缩包,解压发现有6400张小图片,还给了一张demo.png(下图经过压缩),看来应该是拼图了。

于是先把6400张图片给拼到一起,一张小图片是51*27。

demo.png是4096*2160,刚好是小图片宽高的大约80倍,所以不难推测出整个拼后的图片行列应该是80行。

用如下代码可以将小图片拼接:
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:

也就是
DDCTF{484e61cd1483c34db71a721bc8a829c8}