ctfshow 愚人杯 2023

MISC

一、奇怪的压缩包

1.zip包伪加密,两个头都需要改

image

2.打开得到png,看图片底部,猜测高度错误,改150到300,得到字串,同时在图片的末尾有zip包,zip为真加密,文件末尾密码

image

3.打开后,改宽高,得到flag

image

二、哇库哇库2

1.zip包是加密的,注释中有密码提示,在网上找了一下没有找到相关的答案,直接问问new bing,得知答案是

2.71828182846

image

2.HINT.png,改一下文件头为89 50 4E 47,然后显示CRC错误,看一下宽高,都是1

image

3.使用脚本爆破宽高,脚本来自之前的网上收集

点击查看代码
import zlib
import struct

filename = 'HINT.png'
with open(filename, 'rb') as f:
    all_b = f.read()
    crc32key = int(all_b[29:33].hex(), 16)
    data = bytearray(all_b[12:29])
    n = 4095  # 理论上0xffffffff,但考虑到屏幕实际/cpu,0x0fff就差不多了
    for w in range(n):  # 高和宽一起爆破
        width = bytearray(struct.pack('>i', w))  # q为8字节,i为4字节,h为2字节
        for h in range(n):
            height = bytearray(struct.pack('>i', h))
            for x in range(4):
                data[x + 4] = width[x]
                data[x + 8] = height[x]
            crc32result = zlib.crc32(data)
            if crc32result == crc32key:
                # 2021.7.20,有时候显示的宽高依然看不出具体的值,干脆输出data部分
                print(data.hex())
                print("宽为:", end="")
                print(width)
                print("高为:", end="")
                print(height)
                exit(0)

image

4.改宽高,得到正常的png文件,上面是GB2312

image

5.查了一下 GB2312是一种字符编码,没什么用,正解是把每行的最后的标点提取出来,转为英文模式,写个脚本

点击查看代码
f1 = open("./2.txt", "r", encoding='utf-8')
f2 = open("./3.txt", 'w', encoding='utf-8')
text = f1.readlines()
text = list(text)
ls = []
for i in text:
    f2.write(i[-2])
f1.close()
f2.close()

6.需要手动将。替换为. ?替换为? !替换为!,直接在线解码 Ook! to text,得到flag

https://www.splitbrain.org/services/ook

..................!?!!.?..................?.?!.?....................................!.?.........!?!!.?........?.?!.?..!.?.......!?!!.?!!!!!!?.?!.?!!!!!!!!!!!.?.......!?!!.?......?.?!.?........!.?.......!?!!.?!!!!!!?.?!.?!!!!!...............!.................!.........!.?.................!?!!.?!!!!!!!!!!!!!!!!?.?!.?!!!!!!!!!!!!!!!.?...............!?!!.?..............?.?!.?..................!.!!!!!!!!!!!.?.........!?!!.?........?.?!.?!.?.........!?!!.?!!!!!!!!?.?!.?!!!!!!!!!!!!!!!!!.!!!!!.?.........!?!!.?!!!!!!!!?.?!.?!!!!!!!!!.?.........!?!!.?........?.?!.?............!.?.......!?!!.?!!!!!!?.?!.?!!!.?.......!?!!.?......?.?!.?..!.?.............!?!!.?!!!!!!!!!!!!?.?!.?!!!!!!!!!!!!!!!!!!!!!!!!!.?...............!?!!.?..............?.?!.?..............!.?.................!?!!.?!!!!!!!!!!!!!!!!?.?!.?!!!!!!!!!!!!!!!!!.?...................!?!!.?..................?.?!.?......................!.?.

image

三、琴柳感

1.很多句重复的话,除去开头和结尾两句话,一共四种类型,猜测跟四进制有关,写个脚本进行计算(这里贴一个大佬的脚本,自己的脚本有点问题)

点击查看代码
import itertools

from Crypto.Util.number import *

x = "我必须站在这里。你有没有感受到城市在分崩离析?你不曾注意阴谋得逞者在狞笑。你有没有听见孩子们的悲鸣?你是否想过......朋友不再是朋友,家园不再是家园。你有没有感受到城市在分崩离析?你是否想过......朋友不再是朋友,家园不再是家园。你有没有感受到城市在分崩离析?你有没有听见孩子们的悲鸣?你有没有感受到城市在分崩离析?你不曾注意阴谋得逞者在狞笑。你有没有感受到城市在分崩离析?你不曾注意阴谋得逞者在狞笑。你有没有感受到城市在分崩离析?你是否想过......朋友不再是朋友,家园不再是家园。你有没有听见孩子们的悲鸣?你是否想过......朋友不再是朋友,家园不再是家园。你有没有感受到城市在分崩离析?你不曾注意阴谋得逞者在狞笑。你不曾注意阴谋得逞者在狞笑。你有没有听见孩子们的悲鸣?你有没有感受到城市在分崩离析?你不曾注意阴谋得逞者在狞笑。你是否想过......朋友不再是朋友,家园不再是家园。你是否想过......朋友不再是朋友,家园不再是家园。你有没有感受到城市在分崩离析?你是否想过......朋友不再是朋友,家园不再是家园。你有没有感受到城市在分崩离析?你是否想过......朋友不再是朋友,家园不再是家园。你有没有感受到城市在分崩离析?你是否想过......朋友不再是朋友,家园不再是家园。你不曾注意阴谋得逞者在狞笑。你是否想过......朋友不再是朋友,家园不再是家园。你有没有感受到城市在分崩离析?你是否想过......朋友不再是朋友,家园不再是家园。你不曾注意阴谋得逞者在狞笑。你有没有听见孩子们的悲鸣?你有没有感受到城市在分崩离析?你不曾注意阴谋得逞者在狞笑。你不曾注意阴谋得逞者在狞笑。你有没有感受到城市在分崩离析?你有没有感受到城市在分崩离析?你不曾注意阴谋得逞者在狞笑。你是否想过......朋友不再是朋友,家园不再是家园。你不曾注意阴谋得逞者在狞笑。你有没有感受到城市在分崩离析?你不曾注意阴谋得逞者在狞笑。你有没有感受到城市在分崩离析?你是否想过......朋友不再是朋友,家园不再是家园。你有没有感受到城市在分崩离析?你不曾注意阴谋得逞者在狞笑。你有没有听见孩子们的悲鸣?你不曾注意阴谋得逞者在狞笑。你有没有感受到城市在分崩离析?你是否想过......朋友不再是朋友,家园不再是家园。你有没有感受到城市在分崩离析?你有没有感受到城市在分崩离析?你有没有感受到城市在分崩离析?你不曾注意阴谋得逞者在狞笑。你有没有听见孩子们的悲鸣?你是否想过......朋友不再是朋友,家园不再是家园。你有没有感受到城市在分崩离析?你不曾注意阴谋得逞者在狞笑。你有没有感受到城市在分崩离析?你有没有感受到城市在分崩离析?你有没有感受到城市在分崩离析?你不曾注意阴谋得逞者在狞笑。你是否想过......朋友不再是朋友,家园不再是家园。你不曾注意阴谋得逞者在狞笑。你有没有感受到城市在分崩离析?你不曾注意阴谋得逞者在狞笑。你有没有感受到城市在分崩离析?你是否想过......朋友不再是朋友,家园不再是家园。你有没有感受到城市在分崩离析?你是否想过......朋友不再是朋友,家园不再是家园。你不曾注意阴谋得逞者在狞笑。你有没有听见孩子们的悲鸣?你有没有感受到城市在分崩离析?你不曾注意阴谋得逞者在狞笑。你不曾注意阴谋得逞者在狞笑。你有没有感受到城市在分崩离析?你有没有感受到城市在分崩离析?你不曾注意阴谋得逞者在狞笑。你是否想过......朋友不再是朋友,家园不再是家园。你不曾注意阴谋得逞者在狞笑。你有没有感受到城市在分崩离析?你不曾注意阴谋得逞者在狞笑。你有没有感受到城市在分崩离析?你是否想过......朋友不再是朋友,家园不再是家园。你有没有感受到城市在分崩离析?你有没有感受到城市在分崩离析?你是否想过......朋友不再是朋友,家园不再是家园。你是否想过......朋友不再是朋友,家园不再是家园。你有没有感受到城市在分崩离析?你是否想过......朋友不再是朋友,家园不再是家园。你不曾注意阴谋得逞者在狞笑。你有没有感受到城市在分崩离析?你有没有感受到城市在分崩离析?你不曾注意阴谋得逞者在狞笑。你不曾注意阴谋得逞者在狞笑。你有没有感受到城市在分崩离析?你有没有感受到城市在分崩离析?你不曾注意阴谋得逞者在狞笑。你有没有听见孩子们的悲鸣?你不曾注意阴谋得逞者在狞笑。你有没有感受到城市在分崩离析?你是否想过......朋友不再是朋友,家园不再是家园。你有没有感受到城市在分崩离析?你有没有感受到城市在分崩离析?你有没有感受到城市在分崩离析?你是否想过......朋友不再是朋友,家园不再是家园。你不曾注意阴谋得逞者在狞笑。你不曾注意阴谋得逞者在狞笑。你有没有感受到城市在分崩离析?你不曾注意阴谋得逞者在狞笑。你有没有听见孩子们的悲鸣?你有没有感受到城市在分崩离析?你有没有感受到城市在分崩离析?你不曾注意阴谋得逞者在狞笑。你不曾注意阴谋得逞者在狞笑。你有没有感受到城市在分崩离析?你有没有感受到城市在分崩离析?你是否想过......朋友不再是朋友,家园不再是家园。你不曾注意阴谋得逞者在狞笑。你有没有感受到城市在分崩离析?你有没有感受到城市在分崩离析?你不曾注意阴谋得逞者在狞笑。你不曾注意阴谋得逞者在狞笑。你有没有感受到城市在分崩离析?你有没有感受到城市在分崩离析?你有没有感受到城市在分崩离析?你是否想过......朋友不再是朋友,家园不再是家园。你是否想过......朋友不再是朋友,家园不再是家园。你有没有感受到城市在分崩离析?你是否想过......朋友不再是朋友,家园不再是家园。你不曾注意阴谋得逞者在狞笑。你不曾注意阴谋得逞者在狞笑。你有没有感受到城市在分崩离析?你不曾注意阴谋得逞者在狞笑。你有没有听见孩子们的悲鸣?你有没有感受到城市在分崩离析?你有没有感受到城市在分崩离析?你不曾注意阴谋得逞者在狞笑。你不曾注意阴谋得逞者在狞笑。你有没有感受到城市在分崩离析?你有没有感受到城市在分崩离析?你不曾注意阴谋得逞者在狞笑。你不曾注意阴谋得逞者在狞笑。你是否想过......朋友不再是朋友,家园不再是家园。你有没有感受到城市在分崩离析?你不曾注意阴谋得逞者在狞笑。你有没有感受到城市在分崩离析?你有没有感受到城市在分崩离析?你有没有感受到城市在分崩离析?你不曾注意阴谋得逞者在狞笑。你是否想过......朋友不再是朋友,家园不再是家园。你有没有听见孩子们的悲鸣?你有没有感受到城市在分崩离析?你不曾注意阴谋得逞者在狞笑。你不曾注意阴谋得逞者在狞笑。你有没有感受到城市在分崩离析?你有没有感受到城市在分崩离析?你不曾注意阴谋得逞者在狞笑。你有没有听见孩子们的悲鸣?你有没有感受到城市在分崩离析?你有没有感受到城市在分崩离析?你不曾注意阴谋得逞者在狞笑。你是否想过......朋友不再是朋友,家园不再是家园。你不曾注意阴谋得逞者在狞笑。你有没有感受到城市在分崩离析?你是否想过......朋友不再是朋友,家园不再是家园。你不曾注意阴谋得逞者在狞笑。你有没有感受到城市在分崩离析?你有没有感受到城市在分崩离析?你不曾注意阴谋得逞者在狞笑。你不曾注意阴谋得逞者在狞笑。你有没有感受到城市在分崩离析?你有没有感受到城市在分崩离析?你不曾注意阴谋得逞者在狞笑。你是否想过......朋友不再是朋友,家园不再是家园。你有没有听见孩子们的悲鸣?你有没有感受到城市在分崩离析?你不曾注意阴谋得逞者在狞笑。你不曾注意阴谋得逞者在狞笑。你有没有感受到城市在分崩离析?你有没有感受到城市在分崩离析?你不曾注意阴谋得逞者在狞笑。你有没有听见孩子们的悲鸣?你有没有感受到城市在分崩离析?你有没有感受到城市在分崩离析?你不曾注意阴谋得逞者在狞笑。你是否想过......朋友不再是朋友,家园不再是家园。你不曾注意阴谋得逞者在狞笑。你有没有感受到城市在分崩离析?你不曾注意阴谋得逞者在狞笑。你有没有听见孩子们的悲鸣?你不曾注意阴谋得逞者在狞笑。你有没有感受到城市在分崩离析?你不曾注意阴谋得逞者在狞笑。你有没有听见孩子们的悲鸣?你有没有感受到城市在分崩离析?你有没有感受到城市在分崩离析?你是否想过......朋友不再是朋友,家园不再是家园。你是否想过......朋友不再是朋友,家园不再是家园。你有没有感受到城市在分崩离析?您让我看到了废墟中挣扎着抬起头的青草。谢谢您。"
x = x.split('。')
x = [i.split('?') for i in x]
s = []
for i in x:
    for j in i:
        s.append(j)
s.remove('')
t = ['你有没有听见孩子们的悲鸣', '你是否想过......朋友不再是朋友,家园不再是家园', '你有没有感受到城市在分崩离析',
     '你不曾注意阴谋得逞者在狞笑']

for k in itertools.permutations('0123'):
    m = ''
    for i in s:
        if i == t[0]:
            m += k[0]
        elif i == t[1]:
            m += k[1]
        elif i == t[2]:
            m += k[2]
        elif i == t[3]:
            m += k[3]
    m = long_to_bytes(int(m, 4))
    if b'ctfshow' in m:
        print(m)
# b'ctfshow{xingbucengxing_yibuzaiyi_zaikelianyilianba}'

image

四、低端的base64

1.得到很多像是base64的字串,根据题目名字,猜测是将大写字母转化为了小写字母,但具体是哪些不清楚,写个脚本爆破,脚本思路:首先将所有字串分为四个为一组,然后遍历每一组,如果是字母的话就将它增加一种大写的可能,然后每组遍历进行base64decode,找到可能值。(每组遍历完建议加一个换行,好看一些)

点击查看代码
import base64


f = open("./flag.txt","r")
f1 = open("./2.txt","w",encoding='UTF-8')
a = f.readlines()
x = ''
for i in a:
    x += i
x = [x[i:i + 4] for i in range(0, len(x), 4)]
# 四个为一组分隔开
y = []
for i in x:
    s = []
    for j in i:
        # 逐个遍历字符,判断是否为数字,为字母的话添加一种大写的可能
        if j.isdigit():
            s.append(j)
        else:
            s.append([j, j.upper()])
    y.append(s)
for i in y:
    res = ''
    f1.write("\n")
    for a in i[0]:
        for b in i[1]:
            for c in i[2]:
                for d in i[3]:
                    try:
                        f1.write(base64.b64decode((a + b + c + d).encode()).decode())
                        f1.write(',')
                        # 四个为一组解密
                    except:
                        pass
f.close()
f1.close()


2.第二步就是纯靠猜,找一下{,发现只有一个区域有可能,拼拼凑凑,需要注意连续的每行都有,不要少了

image

ctfshow{base64_1s太难了!!I服了U!}

RE

一、easy_pyc

1.得到pyc文件,在线反编译一下,得到python2.7的代码,code列表中就是将flag逐个进行加密后的值,根据源代码写个脚本逆回去

点击查看代码
code = [b'\x16', b'\x1d', b'\x1e', b'\x1a', b'\x18', b'\t', b'\xff', b'\xd0', ',', b'\x03', b'\x02', b'\x14', '8', 'm', b'\x01', 'C', 'D', b'\xbd', b'\xf7', '*', b'\r', b'\xda', b'\xf9', b'\x1c', '&', '5', "'", b'\xda', b'\xd4', b'\xd1', b'\x0b', b'\xc7', b'\xc7', b'\x1a', b'\x90', 'D', b'\xa1']
l = len(code)
# for i in code:
#     num_chr = ord(i)
#     i = num_chr
code = map(ord, code)
code = list(code)
for i in range(l - 3, 0, -1):
    # 倒序
    code[i-1] = code[i-1] ^ code[i]
flag = ''
for i in range(l):
    num = ((code[i] - i)% 114514 + 114514) % 114514
    flag += chr(num)
print(flag)


ctfshow{Just_F00l's_D@y_R3_Ch3ck-in!}
posted @ 2023-04-06 16:31  CPYQY_orz  阅读(366)  评论(0编辑  收藏  举报