随便写写,笔记
MISC24-25
改个图片高度就能看到flag
MISC26
题目提示说flag在图片下面,但是有多下面的呢?
改高度为900,可以看到一半的flag:
这里还要找出这张图片的真实高度,上网看到大佬的脚本:
import binascii
import struct
crcbp = open("misc26.png", "rb").read()
for i in range(2000):
for j in range(2000):
data = crcbp[12:16] + struct.pack('>i', i)+struct.pack('>i', j)+crcbp[24:29]
crc32 = binascii.crc32(data) & 0xffffffff
if(crc32 == 0xEC9CCBC6):
print(i, j)
print('hex:', hex(i), hex(j))
宽为0x384,高为0x25e(十六进制)
所以真实的高度为25e,把这个拼接到flag中就获得了正确的flag了
MISC28
如题是一个gif文件
用010 Editor打开,修改图片的高度为300,保存
打开图片,没有出现flag
再试试修改高度为900试试,可能是改的不够多:
保存打开图片还是没有出现flag:
那么可能不是修改这个的高度,再往下面的分析包中寻找图片的高度:
修改这个高度试试,然后保存就看到了flag,可能这一帧播放的比较快,可以使用幻灯片放映暂停或者使用stepsolve查看:
MISC29
跟上题一样是一张gif图片
先用stepsolve分析帧数,发现这张图片有十帧:
把这十帧的高度都改为300,在第八帧发现flag:
MISC30
打开图片糊成一团,题目提示正确的宽度为950,先试着修改一下,直接得到flag。
MISC31
提示:高度是正确的,但正确的宽度是多少呢
在做这题之前,要先学习一下bmp图片的相关知识。
先查看图片具体信息:
通过分析这张图片易知文件尾为0x76F50,文件头占用了53字节有一个00是windows系统自动补上的,所以不算在内。讲76F50换算为十进制为487248
所以根据bmp图片的结构可以得出计算式子:(487248-53)/(3*150)≈1082
所以把宽度改为1082就可以得到flag了。
MISC32
这题跟26题一样,可以用26题的脚本run出来,只需要改一下图片的路径和crc值就行:
关于crc校验,我刚开始也不太懂,找了几篇资料得知:CRC即循环冗余校验码:是数据通信领域中最常用的一种查错校验码,其特征是信息字段和校验字段的长度可以任意选定。循环冗余检查(CRC)是一种数据传输检错功能,对数据进行多项式计算,并将得到的结果附在帧的后面,接收设备也执行类似的算法,以保证数据传输的正确性和完整性。
关于crc爆破获得高度和宽度,这里我给出了几篇博文:1,2,3可了解相关的知识。
得到图片的crc值为0xE14A4C0B
得到图片宽度应为1044,改高度就可以得到flag了。
MISC33
这次的高度和宽度都要求出来,还是运用上面的脚本爆破crc
先找到图片的crc值:
再使用脚本run出来,得到宽度为978,高度为142,改图片高度和宽度就可以得到flag啦
MISC34
提示:出题人狗急跳墙,把IHDR块的CRC也改了,但我们知道正确宽度肯定大于900
直接给出脚本:
import zlib
import struct
filename = "misc34.png"
with open(filename, 'rb') as f:
all_b = f.read()
w = all_b[16:20]
h = all_b[20:24]
for i in range(901,1200):
name = str(i) + ".png"
f1 = open(name,"wb")
im = all_b[:16]+struct.pack('>i',i)+all_b[20:]
f1.write(im)
f1.close()
一张张图片进行分离,在其中的张当中发现flag:
MISC35
提示:出题人负隅顽抗,但我们知道正确宽度肯定大于900
上一题的脚本稍微修改一下:
import zlib
import struct
filename = "misc35.jpg"
with open(filename, 'rb') as f:
all_b = f.read()
w = all_b[159:161]
h = all_b[157:159]
for i in range(901,1200):
name = str(i) + ".jpg"
f1 = open(name,"wb")
im = all_b[:159]+struct.pack('>h',i)+all_b[161:]
f1.write(im)
f1.close()
MISC36
一样给出代码:
import zlib
import struct
filename = "misc36.gif"
with open(filename, 'rb') as f:
all_b = f.read()
w = all_b[6:8]
for i in range(920,950):
name = str(i) + ".gif"
f1 = open(name,"wb")
im = all_b[:38]+struct.pack('>h',i)[::-1]+all_b[40:]
f1.write(im)
f1.close()
在941.gif中修改高度:
MISC37
如题又是gif图片,逐帧分析得到flag
MISC38
使用apngdis(APNG Disassembler 2.9)工具,kali可以安装,直接分离出图片:
文章评论