ctfshowMISC(文件结构)

随便写写,笔记

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可以安装,直接分离出图片:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_AaRong_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值