首页 > 其他分享 >PNG宽高CRC爆破

PNG宽高CRC爆破

时间:2024-12-24 17:54:25浏览次数:6  
标签:00 hex 宽高 CRC crc32 data PNG

PNG图片宽高CRC爆破

CRC

这里的CRC指的是CRC32,也就是PNG图片的一个效验位,是一种不可逆运算,类似于MD5,作为数据效验或效验文件的完整性使用

图片宽高

image-20241222145611921

CRC校验码

image-20241222150024107

当一个png图片宽高有问题时,010回有CRC报错

image-20241222155944572

原理

image-20241222202151970

文件头89 50 4E 47 0D 0A 1A 0A

头部数据块长度为13 00 00 00 0D

IHDR数据块 49 48 44 52

00 00 02 A7 ,高 00 00 01 00

08 06 00 00 005个字节依次为Bit depth,ColorType,Compression method,Filter method,Interlace method

CRC

校验码6D 7C 71 35

原理就是 17个字节进行CRC计算得到

image-20241222201904466

image-20241222201922031

爆破CRC值

image-20241222161128206

import zlib
import struct
import argparse
import itertools

parser = argparse.ArgumentParser()
parser.add_argument("-f", type=str, default=None, required=True,
                    help="输入同级目录下图片的名称")
args = parser.parse_args()

bin_data = open(args.f, 'rb').read()
crc32key = zlib.crc32(bin_data[12:29])
original_crc32 = int(bin_data[29:33].hex(), 16)

if crc32key == original_crc32:
    print('宽高没有问题!')
else:
    input_ = input("宽高被改了, 是否CRC爆破宽高? (Y/n):")
    if input_ not in ["Y", "y", ""]:
        exit()
    else:
        for i, j in itertools.product(range(4095),
                                      range(4095)):
            data = bin_data[12:16] + struct.pack('>i', i) + struct.pack('>i', j) + bin_data[24:29]
            crc32 = zlib.crc32(data)
            if (crc32 == original_crc32):
                print(f"\nCRC32: {hex(original_crc32)}")
                print(f"宽度: {i}, hex: {hex(i)}")
                print(f"高度: {j}, hex: {hex(j)}")
                exit(0)

标签:00,hex,宽高,CRC,crc32,data,PNG
From: https://www.cnblogs.com/Yolololo/p/18628384

相关文章

  • 根据监控点或者视频的分辨率自适应调整播放画面的宽高比
    3.根据监控点或者视频的分辨率自适应调整播放画面的宽高比视频的分辨率宽高比和播放窗口的宽高比例不一定相同,播放时如果填充整个播放窗口,会出现播放画面横向或纵向拉伸以填充整个窗口,这样会导致播放画面变形或者不协调,影响观看效果;为了保持视频的按照原来的宽高比,可以根据视频的......
  • 如何批量给png透明图片添加白色描边
    `fromPILimportImage,ImageOps,ImageFilterimportosdefadd_border_to_image(image_path,output_path,border_size=2):#打开图片image=Image.open(image_path)#确保图片是RGBA模式(带有透明通道)ifimage.mode!='RGBA':image=image.convert('RGBA')......
  • 写一个方法根据屏幕分辨率改变背景宽高
    在前端开发中,我们通常使用JavaScript和CSS来根据屏幕分辨率动态改变元素的样式,包括背景的宽度和高度。以下是一个简单的示例,说明如何根据屏幕分辨率来改变一个元素的背景宽高。首先,你需要在HTML中定义一个元素,比如一个div,作为你想要改变背景的元素:<divid="background-element">......
  • 嵌入式开发:STM32 硬件 CRC 使用
    STM32微控制器内置了硬件CRC计算单元,可以用于计算多种CRC多项式,从而提高数据处理的效率和准确性。以下是STM32硬件CRC的详细使用步骤和代码示例。1.硬件CRC的优势硬件CRC不占用MCU的资源,计算速度快,适合于对实时性要求较高的场合。它通过直接对数据进行处理,减少了软件CRC......
  • 【Python】调用 image.verify() 后报错 AttributeError_ ‘PngImageFile‘ object has
    【Python】调用image.verify()后报错AttributeError:‘PngImageFile’objecthasnoattribute‘load_seek’问题描述file=request.files.get('file')iffile:file_content=file.read()file_stream=BytesIO(file_content)......
  • 使用verilog生成各种CRC校验码
    一、功能介绍在FPGA进行各种接口通信时,经常会出现对方发来的数据带有CRC校验码,如CRC5、CRC8、CRC16、CRC32等,为了适应不同的情况,我们使用Verilog实现了一个比较通用的CRC计算模块,可生成CRC5/CRC8/CRC16/CRC32等各种宽度的CRC校验码,满足不同场景下的CRC校验需求。二、模块调用示......
  • png-8和png-24有什么区别?
    png-8和png-24在前端开发中主要有以下区别:色彩深度:png-8:使用8位索引色,这意味着它最多只能展示256种颜色。因此,它更适合用于颜色较为单一的图像,如纯色、logo、图标等。由于颜色数量有限,png-8图像的文件体积通常会更小。png-24:使用24位色彩深度,可以展示的颜色数量远多于png-8,......
  • 如何让IE6支持PNG透明?
    InternetExplorer6(IE6)是微软推出的一款较旧的浏览器,它本身对PNG透明图片的支持有限。然而,你可以使用一些技巧或工具来让IE6支持PNG透明。以下是几种常见的方法:使用DD_belatedPNG或其他类似的JavaScript库:DD_belatedPNG是一个JavaScript库,它能够为IE6提供PNG透明度支......
  • 使用scrcpy实现无线投屏与反控手机
    使用scrcpy实现无线投屏与反控手机引言在日常生活中,我们常常需要将手机屏幕投射到电脑上进行演示或操作。今天,我将为大家介绍一款开源工具——scrcpy,它可以帮助你轻松实现这一功能。什么是scrcpy?scrcpy是一个开源项目,托管在GitHub上(项目地址:scrcpyGitHub)。它允许用户通过USB......
  • 实现宽高比
    <!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metaname="viewport"content="width=device-width,initial-scale=1.0"><title>Document</title>......