2021浙江省赛及赛后复现

发布于 2021-10-24  184 次阅读


Web

Checkin

1.直接对网站抓一个包

RE

crackPYC

1.先大致查看一下字节码,因为没有文献,虽然无法准确翻译,但是可以大致看懂,了解到就是一个异或加密,将flag与key进行了一个异或

2.首先可以得知加密后每个字符的值,和字符串的长度为32

2021浙江省赛及赛后复现

3.同时得知了flag的格式是DASCTF{},但是在key生成的地方的字节码就看不太懂了,所以尝试直接与已知的格式先进行前几个字符的异或,与最后一个字符的异或

a = [108,17,42,226,158,180,96,115,64,24,38,236,179,173,34,22,81,113,38,215,165,135,68,7,119,97,45,254,250,172,43,62]
x = "DASCTF{"
for i in range(len(x)):
    c = a[i] ^ ord(x[i])
    print(c,end=",")
print(62 ^ ord("}"))
40,80,121,161,202,242,27,67

可以明显的发现有一定的规律,每两个数之间的差为40,41,40,41当数大于256时,会-256,同时最后的67明显也符合了这个规则,所以可能是有循环。

4.同时在生成key的地方,可以看到有一个8位的循环

2021浙江省赛及赛后复现

所以猜测key可能就是8个一组循环的

a = [108,17,42,226,158,180,96,115,64,24,38,236,179,173,34,22,81,113,38,215,165,135,68,7,119,97,45,254,250,172,43,62]
x = [40,80,121,161,202,242,27,67]
for i in range(len(a)):
    c = a[i] ^ x[i % 8]
    d = chr(c)
    print(d,end="")

DASCTF{0hH_My_9Uy!_vou_D_1T_0^0}

Crypto

Easy Railfence

1.栅栏密码,给了一个脚本,上面有offset,就想到cyberchef的栅栏密码就是带offset,一开始的附件好像有问题,不确定是不是自己不小心多打了字符,但是用cyberchef可以直接解

2021浙江省赛及赛后复现

MISC

qrimg

1.将gif先用ffmpeg分解一下

ffmpeg -i C:\Users\werewolfcjj\Desktop\qrimg.gif C:\Users\werewolfcjj\Desktop\qrimg%d.png

2.将png放入stegsolve中可以发现每一张图片在b0位都能看到一张图片

2021浙江省赛及赛后复现

3.扫描之后有1个字符,猜测是将所有二维码进行扫描后得到一串字符

from PIL import Image
import pyzbar.pyzbar as pyzbar

for count in range(1,313):
    img = Image.open('.//qrimg//'+str(count)+'.png')
    img = img.convert('RGB')
    width,height=img.size
    result = ""
    for i in range(0,height):
        for j in range(0,width):
            tmp = img.getpixel((j,i))
            result += bin(tmp[2])[-1]
    a = 0
    pic = Image.new("RGB",(288,360))
    for y in range(0,360):
        for x in range(0,288):
            if(result[a] == '0'):
                pic.putpixel([x,y],(0,0,0))
            else:
                pic.putpixel([x,y],(255,255,255))
            a += 1
    img_size = pic.size
    barcodes = pyzbar.decode(pic)
    for barcode in barcodes:
        barcodeDATA = barcode.data.decode("utf-8")
        print(barcodeDATA,end="")
Vm0xd1NtUXlWa1pPVldoVFlUSlNjRlJVVGtOalZsSlZWR3RPVlUxWGVIcFdiVFZyWVd4S2MxTnNXbFpOYmxJelZrUkdTMlJIVWtWV2JHUnBWa1ZaZWxaclkzaFdNbEpJVm10c1ZXSkdXbTlVVmxaM1ZWWmtWMVpzV214U2EzQllWMnRhYzFsV1NsVldiazVhWWtkU2RscEhlR0ZTVmtwMFpFWm9hR1ZzV2xoV1IzaHZVakpHUmsxSWJHeFNWR3hZV1ZSS1VtUXhVbFZTYkU1clVsUldTbGRyV2tkV2JGcEZVVlJWUFE9PQ==

4.多次base64解密即可

flag{32bb3b8cec39e43a06038a9f96921906}

听说你在找flag

nt题(nice try)

直接foremost可以得到一个压缩包,压缩包密码提示是找到delay重复两次,图片是一个apng类似于gif,所谓的delay猜测是类似于时间轴一样的,但是我只想吐槽,省赛有没有网,apng又不是常见知识点,我们哪知道apng的delay怎么看,所以这点我觉得出题人欠考虑

同时因为只是8位数字,其实可以直接爆破,因为是AES加密,所以爆破会比较慢,但还是可以的,做出来的我估计都是直接爆破出的

关于这个delay其实就是apng每个帧的时间

2021浙江省赛及赛后复现

这个东西在010中查看fcTL块可以看到

2021浙江省赛及赛后复现

我们查看所有帧的这个值,大部分的帧,分子都为1,分母都为0

只有一帧是2和25

2021浙江省赛及赛后复现

因此按照计算方式得到的两种时长应该是100和80,所以密码应该是1008010080,但是密码是10801080,不知道是我解的有问题还是出题者没出好,如果要是10的话常规的分母应该是100,或者改成0,因为资料中讲了默认就是100

在大佬的帮助下明确了是我理解的有点问题,我们要找的只是这个最特别的帧,也就是这个80的帧,而前面的10指代的是帧的下标,而这个帧的下标刚好是10,所以是1080

打开压缩包之后可以发现,有一个文件明显格格不入

2021浙江省赛及赛后复现

这个图片非常大,而且CRC明显和别的图片不一样,放入winhex中,可以看到末尾有一大段base编码,得到一张图片,放入vscode中发现显示不了,直接crc爆破一下

2021浙江省赛及赛后复现

反的base64编码

Finding...,为压缩包密码

DASCTF{flag_1s_close_at_your_hand}

个人感觉题目的方向没问题,但是出题感觉还不够严紧。也没考虑的做题的情况,在没有网络查询资料的情况下很难做


啥都不会