攻防世界-2-1

 下载附件,发现是一张损坏的png文件,扔winhex里面修改文件头

 修改之后发现还是打不开,提示CRC错误,脚本跑一下

循环冗余校验CRC(Cyclic Redundancy Check)是数据通信领域常用的一种数据传输检错技术。通过在发送端对数据按照某种算法计算出校验码,并将得到的校验码附在数据帧的后面,一起发送到接收端。接收端对收到的数据和校验码按照相同算法进行验证,以此判断接收到的数据是否正确、完整。

import binascii
import struct

with open('./pic/148a3ba22b8541f48f354f3e27f0aa4c.png', 'rb') as file:
    # 得到文件的16进制数据
    data = file.read()
    for i in range(1024):
        # 找到数据的12到16位(IHDR)
        # struct.pack('>i', i)中>表示大端模式,i表示integer数据类型,将i为4位宽度进行表示
        # data[20 : 29]表示IHDR中的后9位
        # c表示IDCH和IHDR数据,用于后续crc校验
        c = data[12:16] + struct.pack('>i', i) + data[20 : 29]
        # 如果校验结果是符合winhex中图片的第13到16位的crc值,则爆破成功宽度
        crc = binascii.crc32(c) & 0xffffffff
        if crc == 0x932f8a6b:
            print(i)

 跑出的图片宽度为709,对应16进制为0x2c5,我们在winhex中修改对应的宽度值

 得到图片

得到flag:

wdflag{Png_C2c_u_kn0W}

 

  • 7
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值