ysoseri.us

技术内容 / 本科的一些学习笔记和wp / ISCC擂台赛misc之开开眼界

ISCC擂台赛misc之开开眼界

https://blog.csdn.net/qq_42880719/article/details/124574934套神tql

扫!

最近聊到批量扫二维码,正好前段时间收集到一个批量解码的工具

我就说“梭啊一把梭”,于是星爷就给我找来了一个题让我梭梭试试

📎challs.rar

扫了一会全是简单的假flag,就没思路了

去搜了搜,在套神博客里发现这居然是ISCC2022的擂台题


考查知识点:QR CODE的mask pattern、Rar4伪加密(带非预期)、ImageIN

氪金测试(?

首先直接解压,能解压出3w+的文件夹和8w+的二维码

图片 1

随便进入一个文件夹,如0,发现下面有三个文件,尝试分别扫描

结果分别是no_flag no_flag flag_where?

全部扫描后去重,即可将8种内容全部得到,为['flag_not_here','no_flag','flag{fake_flag}','whereisflag','<NA>','flag_where?','flag_other_file','flag_zipped']

And then,可以计算一下有多少种不同的二维码,这一步是当天就有师傅做了的,有64种。

继续看第0个文件夹能够发现这三张二维码一共使用了两种不同的mask pattern,但都是L模式

怎么说呢,一共8种内容,正好64/8=8,也正好说明使用了8种mask pattern

图片 2

图片 3

这三张的pattern根据1.png 2.png 3.png的顺序进行排序,分别为1 2 2

pattern的范围为0-7,正好每个文件夹下只有最多3张二维码,将122从8进制转到ascii之后,能得到字符’R’

多转换几个之后,发现正好是rar的文件头Rar

因此编写一个脚本,取所有的pattern并转换成16进制后写入文件

from PIL import Image
from tqdm import tqdm
import os
f = open('output.rar','w+')
pattern = ['001000111','110011111','010101101','101110101','111101100','000110100','100000110','011011110']
for i in tqdm(range(31091)):
    path = f'./challs/{str(i)}/'
    file_list = os.listdir(path)
    this_bit = ''
    for j in file_list:
        img = Image.open(f'{path}{j}')
        tmp = ''
        for k in range(9):
            if(img.getpixel((8,k)) == 0):
                tmp += '1'
            else:
                tmp += '0'
        ind = pattern.index(tmp)
        this_bit += str(ind)
    this_bit = hex(int(this_bit,8))[2:].zfill(2)
    f.write(this_bit)
    # print(chr(int(this_bit,16)))

okey,此时得到了他的hex数后,使用cyberchef或notepad++草convert功能进行转换,即可得到一个rar

图片 4

直接打开此rar,发现需要密码,可是刚刚明明没有得到密码呢?

用010查看,发现该rar为rar4,而且没有报错,难道是真加密吗?

这里查看一下加密位,发现虽然需要密码,但并没有加密

图片 5

因此猜测为伪加密,将上面的1改成0后,save,再f5刷新一下,提示crc错误

图片 6

将7088改成5b5d

图片 7

即可正常解压,为什么要加粗呢,是应该用winrar等软件,在输入密码的时候直接按确定,也可以直接解压。算是非预期吧,Tokeii发现的,我只用360所以没发现。

解压出来后是一张logo,文件尾有一串base64,解码

flag{this_is_flag?}

Maybe SomeThing IN it!

最后锁定ImageIn,拖到软件里即出flag

图片 8