You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

渗透测试挑战中损坏PNG的IHDR头恢复:维度字节全为0时的尺寸恢复咨询

损坏PNG尺寸恢复方案分析

反向推导CRC校验值还原尺寸的可行性

首先明确PNG规范中IHDR块的CRC计算规则:IHDR的CRC32校验值,是对「4字节块类型标识(即ASCII“IHDR”) + IHDR内全部13字节字段内容」计算得到的。在你遇到的场景里,除了被置0的8字节宽/高字段外,其余参与CRC计算的内容(块类型、位深度、颜色类型、压缩方法、滤波方法、隔行扫描标识)都是完好且已知的。

但纯靠反向枚举匹配CRC值还原宽高的方案不具备实操性:

  • CRC32本身是32位宽度的循环冗余校验,设计目标是快速校验传输错漏,不具备密码学可逆性,也无法通过数学公式从已知CRC值反推输入内容
  • 完整的搜索空间过大:宽高两个字段各占4字节,理论组合数达到2^64量级,无范围限制的暴力枚举计算成本极高
  • 存在碰撞误判风险:CRC32的32位输出宽度决定了,不同的宽高组合完全可能计算出完全相同的校验值,就算枚举到匹配结果,也无法确认哪个是图像的真实尺寸

不依赖CRC的可落地尺寸恢复方法

实际渗透测试和文件修复场景中,完全可以依托PNG自身的结构规则准确还原尺寸,常见路径包括:

  • 基于解压后IDAT数据推导
    PNG文件中所有IDAT块拼接后是标准zlib压缩流,解压后会得到逐行排列的原始扫描线数据。按照PNG规范,每条扫描线的固定结构是「1字节滤波类型标识 + 对应宽度的像素数据」。在已知位深度、颜色类型的前提下,可以先算出单像素占的字节数,通过不同宽度试算单行扫描线长度,找到能让所有扫描线完整对齐、总解压数据长度和扫描线逐行累加长度完全匹配的宽度值。
    实操中这一步就能把宽高的候选范围缩小到个位数。
  • 结合CRC值做最终校验锁定
    当通过扫描线匹配得到少量候选宽高值后,再将候选值代入计算IHDR块的CRC32,和文件中留存的原始CRC值做匹配。由于候选范围已经缩小到个位数,CRC碰撞概率几乎为0,匹配上的结果就是图像的真实尺寸。
  • 结合块结构特征缩小范围
    如果文件中带有pHYs(物理像素比例)块、eXIf(EXIF元数据)块这类附属块,部分元数据中会记录图像的原始拍摄尺寸,可直接作为候选值代入匹配流程,进一步降低试算成本。

实操提示:如果是带Adam7隔行扫描的PNG,不要用逐行顺序的扫描线长度公式匹配,要按照Adam7的7次分块扫描规则拆分解压流,匹配效率和准确率会高很多。

内容的提问来源于stack exchange,提问作者TheDoctor025

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.23 19:45:07