Bugku-MISC杂项-3、隐写

本文介绍了一种在Linux环境下修复PNG图片CRC校验错误的方法,通过分析图片的16进制头文件,使用pngcheck工具验证文件完整性,并利用Python脚本计算正确的CRC校验码,最终成功修复了损坏的PNG图片。

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

首先将 rar 文件下载到本地,解压得到 2.png,在 Windows 下却可以正常浏览。
在这里插入图片描述
而在 Linux 下打不开,提示信息给的很足:文件头数据块(IHDR)损坏了。
在这里插入图片描述
在Linux下用 file 命令查看文件格式(后缀名不一定正确),确实是 PNG 格式文件。
file 2.png :
在这里插入图片描述
其实这就是通过查看图片的16进制头文件来决定的:
在这里插入图片描述
pngcheck是一个简单易用的应用程序,旨在验证PNG,JNG和MNG文件的完整性。通过分析内部32位校验和并解压缩图像数据来完成检查。windows和linux都有相应的版本,pngcheck官网:https://www.softpedia.com/get/Multimedia/Graphic/Graphic-Others/pngcheck.shtml。在windows下用 pngcheck 检查一下2.png,得到以下信息:
pngcheck.exe 2.png
在这里插入图片描述
发现是图片的crc校验码有问题。
PNG 文件头数据块知识补充
(固定)八个字节 89 50 4E 47 0D 0A 1A 0A 为 PNG 的文件头,说明这是一个 PNG 文件
(固定)四个字节00 00 00 0D(即为十进制的 13)代表数据块的长度为 13
(固定)四个字节49 48 44 52(即为 ASCII 码的 IHDR)是文件头数据块的标示(IDCH)
(可变)13 位数据块(IHDR)
前四个字节代表该图片的宽
后四个字节代表该图片的高
后五个字节依次为:Bit depth、ColorType、Compression method、Filter method、Interlace method
(可变)剩余四字节为该 PNG 的 CRC 检验码,由从 IDCH 到 IHDR 的十七位字节进行 CRC 计算得到。
需要通过在十六进制编辑器中修改宽和高的值,达到修复 CRC Error 的效果。
我们规定 crc32key 为该 PNG 文件的 CRC 验证码,它是由从 IDCH 到 IHDR 的十七位字节进行 CRC 计算得到的。不妨写一个 Python 脚本,进行上述计算得到的结果记为 crc32result,如果

crc32result == crc32key

则表明此时的长宽比符合题意,图片修复完毕。具体思路见:https://www.jianshu.com/p/0b5d14657d2e 。CRC 函数(crc32)导入 zlib 库可以得到。
计算正确的crc32校验码:
在这里插入图片描述
修改图片的16进制文件:
在这里插入图片描述
再打开2.png:
在这里插入图片描述
得到flag为:BUGKU{a1e5aSA}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值