menu Ga1@xy's Wor1d
DozerCTF2021 Misc wp
918 浏览 | 2021-05-30 | 阅读时间: 约 1 分钟 | 分类: wp,MISC | 标签: Misc,比赛wp
请注意,本文编写于 142 天前,最后修改于 141 天前,其中某些信息可能已经过时。

题目太简单了,都不是很想写来着,但想了想还是记录一下吧

不会有人以为re那道才是签到吧

签到题,flag在视频里出现了一瞬间

ezmisc

从给的图片里能分离出来一个gif和一个png,gif一共七帧,能分离出来七个二维码

扫码得到一部分flag

DozerCTF{is_it_simple

扫大的二维码能得到零宽字符隐写的一段文字,vim查看可以看到由200b、200c、200d、200e、200f五种字符构成,是zwsp_steg

#python3
import zwsp_steg

f = open('out.txt', 'r').read()
print(zwsp_steg.decode(f, zwsp_steg.MODE_FULL))

得到后半部分flag

_for_you!congratulate}

detective_novel

图片文件尾有个压缩包,分离出来得到两张图片,hint内容和guess相关,结合另一个jpg文件,想到outguess,hint图片的文件尾还有一个压缩包,分离出来,得到跳舞的小人加密,解得DOZER,作为密钥再解outguess,即可得到flag

outguess -k DOZER -r flag.jpg flag.txt

一点也不杂

根据题目给的三个文件可以大致推测flag分为三部分,先看日历图,在图片尾可以得到一些字符串

D 040513202625181104
O 0506071522282726181105
Y 051307132027
O 0506071522282726181105
U 051219262728211407
K 0512192606122028
N 26191205132129221508
O 0506071522282726181105
W 0325052707
_ 252627
C 07060504111825262728
R 25181104050612111927
T 05060706132027

结合给的日历上的日期,可以画出来一些字母的形状,得到第一部分flag

DOYOUKNOW_CRT

第二部分是个CRT,找个脚本解一下

from functools import reduce
def egcd(a, b):
    if 0 == b:
        return 1, 0, a
    x, y, q = egcd(b, a % b)
    x, y = y, (x - a // b * y)
    return x, y, q
def chinese_remainder(pairs):
    mod_list, remainder_list = [p[0] for p in pairs], [p[1] for p in pairs]
    mod_product = reduce(lambda x, y: x * y, mod_list)
    mi_list = [mod_product//x for x in mod_list]
    mi_inverse = [egcd(mi_list[i], mod_list[i])[0] for i in range(len(mi_list))]
    x = 0
    for i in range(len(remainder_list)):
        x += mi_list[i] * mi_inverse[i] * remainder_list[i]
        x %= mod_product
    return x
if __name__=='__main__':
    print(chinese_remainder([(5, 2), (7, 2), (17, 9), (23, 16)]))

得到5007

第三部分是个base85,在线网站解一下

_good_over}

拼在一起加个壳就是最终的flag

DozerCTF{DOYOUKNOW_CRT5007_good_over}

funny_pixel

和国赛的那个running_pixel类似,换汤不换药

一共218张图片,放大看前几张,可以看到图片里有0或1的数字图案,其中1占了5个像素,脚本遍历一下再b2s即可

from PIL import Image
import libnum

flag = ''
for i in range(1, 219):
    ans = 0
    img = Image.open("./funny_pixel/%d.png"%(i))
    for x in range(img.size[0]):
        for y in range(img.size[1]):
            p = img.getpixel((x,y))
            if p == (239,239,39):
                ans += 1
    if ans == 5:
        flag += '1'
    else:
        flag += '0'

print libnum.b2s(flag[:(218 - 218 % 8)])

全部评论

info 评论功能已经关闭了呐!