PNG隐写——修改宽度

一、前提知识

①宽度不能随便修改,高度随便改。

修改宽度需要通过爆破CRC,来得到原始的宽度,方可填入模块中,否则图片显示错误。

②对于一个 PNG 文件来说,其文件头总是由位固定的字节来描述的,剩余的部分由 3 个以上的 PNG 的数据块(Chunk)按照特定的顺序组成。

文件头89 50 4E 47 0D 0A 1A 0A+ 数据块 + 数据块 + 数据块……

struct PNG_SIGNATURE sig + struct PNG_CHUNK chunk[0] + struct PNG_CHUNK chunk[1]... ...

③每个数据块都有着统一的数据结构,每个数据块由 4 个部分组成


Chunk[n]的四个部分


修改了高度和宽度的png,在Linux里无法打开,但在Windows里可以正常打开。

这是因为在Linux里图片过不了校验。

Kali中无法打开

图中清晰的显示IHDR:CRC error,说明数据被修改。

CRC的值有4字节

(1)、CRC(Cyclic Redundancy Check)域中的值是对 Chunk Type Code 域和 Chunk Data 域中的数据进行计算得到的。

(2)、笔者目前读取这个值主要靠PNG模板直接读,很方便。


010的PNG模板运行结果

⑥010 editor模板

可以按标准结构,分析文件的每一部分。010 Editor的PNG模板在Templates选项中去官网下载即可使用。

二、获取正确的宽度值


CTF-Wiki提供的示例脚本

我们要做的:

①把图片和脚本放到同一路径下(省事)

②把通过PNG模板读取到的CRC值粘贴到crc32 == 的后边

③运行。

注:python3下要把print i 换成 print (i)

三、把正确的宽度值填进去,保存,打开。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容