PNG宽高CRC爆破

news/2024/12/26 8:33:21/文章来源:https://www.cnblogs.com/Yolololo/p/18628384

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 itertoolsparser = 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)

image-20241222211308954

import zlib
import structf = open("./dabai.png", "rb").read()crc = zlib.crc32(f[13:29])
orig_crc = int(f[29:33].hex(), 16)if crc == orig_crc:print("没问题")
else:for width in range(4095):for height in range(4095):data = f[12:16] + struct.pack('>i', width) + struct.pack('>i', height) + f[24:29]crc = zlib.crc32(data)if crc == orig_crc:print(f"宽为:{width},hex:{hex(width)}")print(f"高为:{height},hex:{hex(height)}")
将数据类型按照指定的格式转换为字节序列
这里的参数 i 应该是一个 Python 中的整数变量,经过转换后得到对应的 4 字节

循环冗余校验

image-20241222145305693

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/858250.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于线性回归的气温与电力需求关系建模:能源供应稳定保障之策

1. 项目目标 在能源管理领域,准确预测电力需求对于保障能源供应稳定至关重要。气温是影响电力需求的重要因素之一,通过建立气温与电力需求之间的线性回归模型,我们可以预测不同气温条件下的电力需求,从而为能源供应规划提供有力支持。 2. 建模准备 数据收集来源:从气象部门…

YOLOv5 的量化流程及部署方法

01 技术背景 YOLOv5 是一种高效的目标检测算法,尤其在实时目标检测任务中表现突出。YOLOv5 通过三种不同尺度的检测头分别处理大、中、小物体;检测头共包括三个关键任务:边界框回归、类别预测、置信度预测;每个检测头都会逐像素地使用三个 Anchor,以帮助算法更准确地预测物…

重庆市某区教委城域网网络管理与态势感知项目

重庆某区教委需稳定高效运维系统管理教育城域网,智和信通提供集中部署方案,实现统一管理、实时监控、告警通知与智能分析,保障教学活动,推动教育信息化发展。 重庆市某区教育委员会是区政府直辖的一级政府职能部门,主要负责本区的教育工作。 项目现状重庆市某区教育…

Redis-十大数据类型

Reids数据类型指的是value的类型,key都是字符串 redis-server:启动redis服务 redis-cli:进入redis交互式终端常用的key的操作redis的命令和参数不区分大小写 ,key和value区分查看当前库所有的key keys *判断某个key是否存在 exists key查看key是什么类型 type key删除指定的k…

12款免费项目管理工具全方位对比【功能与实用性评测】

在当今数字化时代,项目管理的效率和效果直接影响着企业的竞争力与业务成果。无论是小型创业团队,还是大型企业的复杂项目,合适的项目管理工具都能成为成功的关键助力。然而,面对市场上琳琅满目的项目管理软件,如何挑选一款免费且功能强大、实用性高的工具并非易事。今天,…

作业帮基于 Apache DolphinScheduler 3_0_0 的缺陷修复与优化

文|作业帮大数据团队(阮文俊、孙建业) 背 景 基于 Apache DolphinScheduler (以下简称DolphinScheduler)搭建的 UDA 任务调度平台有效支撑了公司的业务数据开发需求,处理着日均百万级别的任务量。 整个 UDA 的架构如下图所示,其中我们的引擎层主要基于 DolphinScheduler …

Bootstrap垂直手风琴折叠菜单

这是一款Bootstrap垂直手风琴折叠菜单。该Bootstrap垂直手风琴折叠菜单使用boostrap网格进行布局,并通过对bootstrap面板组进行美化,构建出精美的垂直手风琴折叠菜单效果。在线预览 下载使用方法 在页面中引jquery和bootstrap相关文件。<link href="path/to/css/bo…

免费学习基于SpringBoot的高考志愿智能推荐系统

本篇文章使用Java与MYSQL技术搭建了一个高考志愿智能推荐系统。首先,对用户提出的功能进行合理分析,然后搭建开发平台以及配置计算机软硬件;通过对数据流图以及系统结构的设计,创建相应的数据库;进行详细的设计,实现主要功能。最后测试网站,并分析测试结果,完善系统,得…

2024 新版Clion安装使用教程(附激活以及常见问题处理)

Clion 简介 在同学向我吐槽codeblock多么难用于是我疯狂安利CLion的时候,他发出了灵魂的拷问——“CLion是啥?” CLion和codeblock一样都是可以编写C/CPP的IDE(集成开发环境),CLion的优点多多,尤其是CLion对小白非常友好。 配置简单:只需要点几下鼠标就可以完成编译器配…

可调整提亮度8级/数码管显示屏驱动-VK1638 SOP28点阵LED数码管驱动芯片(ic)

产品品牌:永嘉微电/VINKA 产品型号:VK1638 封装形式:SOP28 概述 VK1638是一种带键盘扫描接口的数码管或点阵LED驱动控制专用芯片,内部集成有3线 串行接口、数据锁存器、LED 驱动、键盘扫描等电路。SEG脚接LED阳极,GRID脚接LED阴 极,可支持10SEGx8GRID的点阵LED显示面板,…

不写一行代码,通义灵码 5 分钟“手撕”年会抽奖程序

年会中的抽奖环节不可或缺,但每年为了选择合适的抽奖小程序,团队往往需要投入大量时间和精力。然而,抽奖结束后,参与者通常只记得自己是否中奖,其他细节多被遗忘。在 AI 技术日益成熟的今天,如何打造一个既高效又有技术含量的抽奖应用呢?今天,就让我们跟随通义灵码,仅…