CUIT CTF WriteUp-BP断点

来源:互联网 发布:五笔输入法linux 编辑:程序博客网 时间:2024/06/10 18:00

我就不对此题进行任何评价了,在开赛3分钟的时候就发现png了

当时由于没想到爆破长宽就没做了,直到第二天早上才搞定,下面说说此题的解题步骤

首先,文件down下来后发现是张无法显示的bm,用winhex或者其他16进制编辑器打开


搜索半天,在数据尾部发现了IEND


对该标记只有PNG图片才有,果断搜了下有没有PNG文件头,发现还真有,直接将PNG整个部分提取出来,保存为aaa.png


打开aaa.png发现什么都没有,果断继续16进制编辑

分析和检查了一些东西后,发现它的长宽有问题

然后就意识到可能要调整长宽,又想到一般出题人不会更高CRC(改了就吐血了~!)

So果断写个脚本Crack长宽,代码如下

#!/usr/bin/env python# -*- coding: utf-8 -*-__author__ = 'RickGray'import zlibimport struct  crc32key = 0x80BF36CC # target CRC# 4948445200000100000000000806000000for i in range(0, 1366):    width = struct.pack('>i', i)    for j in range(0, 1366):        hieght = struct.pack('>i', j)  # pack to 4 bytes with Big-Endian        # CRC: CD952277        s = '\x49\x48\x44\x52'  #  IHDR        s += width  # width 4 bytes        s += hieght  # hieght 4 bytes        s += '\x08\x06\x00\x00\x00'                crc32result = zlib.crc32(s) & 0xffffffff         if crc32result == crc32key:            print 'Crack over!'            print 'Width: ', struct.unpack('>i', width)[0]            print 'Hieght: ', struct.unpack('>i', hieght)[0] raw_input('\nFinished!')

运行该脚本后,很快就Crack出长宽400×400

更改aaa.png长宽后,果断地弹出了flag:T7i5Is7h3R3411yK3y_!@#()


0 0