【工具】-Misc-PNG图片高度宽度CRC爆破脚本

文章介绍了CRC32在PNG图片中的作用,用于验证数据完整性。当PNG图片的宽高被修改后,可能在某些系统中导致错误。提供了一个Python脚本,用于遍历并寻找新的宽高值,以保持CRC校验的正确性,适用于CTF挑战中修复图片。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

什么是CRC

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

使用010 Editor打开一个PNG图片,89 50 4E 47 0D 0A 1A 0A (0h行0-7这8个)是PNG的固定文件头(啊?别告诉我还不知道在哪里,第一行粉底白字看到了吧)。

00 00 00 0D是文件头数据块标示IDCH。

49

### 使用010Editor调整PNG图像大小 #### 修改宽度高度 要通过010Editor手动更改PNG文件的尺寸,需遵循一系列精确的操作流程。PNG文件头部标志为`89 50 4E 47 0D 0A 1A 0A`[^2],紧随其后的部分包含了关于图像的关键信息。 对于PNG文件而言,宽度高度存储于IHDR块内,该数据块位于文件头之后不久的位置。具体来说,在上述开头标记后紧接着就是表示颜色深度、宽度以及高度的数据字段[^3]。因此,为了改变这些参数: - 打开目标PNG文件至010Editor环境中; - 定位到代表宽度高度的具体字节位置并记录当前数值以便后续计算新值所需的变化量; 值得注意的是,一旦改变了宽度高度,则必须相应更新同一块内的校验码(CRC),否则将会遇到CRC错误提示[^4]。这一步骤至关重要,因为任何对文件内容所做的改动都可能影响到整个文件结构的有效性和完整性。 #### 更新CRC校验码 由于直接编辑二进制数据可能导致文件损坏风险增加,所以在完成尺寸修改操作后务必重新计算受影响区域的新CRC值,并将其写回到正确的地方以确保文件能够被正常读取而不触发验证失败警告。 ```cpp // 假设已知旧的高度width_old, 新的高度height_new 和 CRC所在偏移offset_crc unsigned int calculate_CRC(const char* data, size_t length){ unsigned int crc = ~0; while (length--) { crc ^= *data++; for(int i=0; i<8;i++){ if(crc & 1)crc=(crc>>1)^0xEDB88320L; else crc=crc>>1; } } return ~crc; } ``` 这段C++代码展示了如何实现一个简单的函数用于计算给定数据区间的循环冗余检验(CRC)。实际应用时应根据实际情况调整输入参数,特别是针对具体的PNG文件格式特点来选取待校验的内容范围。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值