打开就是一个图片什么都没 stegsolve分析也分析不出什么东西 010也看不出什么 百度吧
这是png的CRC校验问题,图片的宽高被改了导致无法完全显示
如何判断这什么crc校验问题?
首先010打开1.png
前八个字节89 50 4E 47 0D 0A 1A 0A为png的文件头,该段格式是固定的
PNG_CHUNK chunk[0] 这段可分为几块:
前四个字节00 00 00 0D 代表数据块长度为13 数据块包含了png的宽高等信息 格式是固定的
之后四个字节49 48 44 52 (即ASCII码的IHDR) 是文件头数据块的表示 这段也是固定格式的
之后进入十三位数据块 前八个字节 00 00 01 41 00 00 01 4C
这边前四个字节:00 00 01 41 代表图片的宽 后四个字节 00 00 01 4C代表高
这八个字节都属于十三位数据块的内容 因此数据块应再向后5个字节 即 00 00 01 41 00 00 01 4C 08 06 00 00 00 剩余四位C2 0F 1F C6 为该png的crc校验码也就是解题的关键
该段数据有IDCh以及十三位的数据块 即 49 48 44 52 00 00 01 41 00 00 01 4C 08 06 00 00 00 计算所得
大部分png中CRC检验错误的出题思路:
对一张正常的图片,通过修改其宽度或者高度隐藏信息,使计算出的CRC校验码与原图的CRC校验码不一致;windows的图片查看器会忽略错误的CRC校验码,因此会显示图片,但此时的图片已经是修改过的,所以会有显示不全或扭曲等情况,借此可以隐藏信息。而Linux下的图片查看器不会忽略错误的CRC校验码,因此用Linux打开修改过宽或高的png图片时,会出现打不开的情况
所以判断一张图是否为crc校验出错 就丢windows 和 linux 里头看看
可以通过爆破图片修改前的宽和高来匹配CRC校验码,并用正确的宽和高来修复图片
首先先爆破高度 脚本如下:
1 | #_ *_ coding:utf-8 _ *_ |
这题就这样爆破出来了 高度被修改了 实则 00 00 03 4C
判断是否为crc校验码错误的方法:
windows下图片可以打开,其他系统下图片不能打开
使用010editor的template检测,这也是我16进制编辑器力推010editor的原因之一
使用诸如tweakpng,pngcheck等工具
修复png的crc检验码方法:
本文中所列的爆破出正确的宽或高,并用16进制编辑器修复
利用windows忽略crc检验码的特性,我们可以用tweakpng任意修改图片的宽和高,直至得到有用的信息,事实上,这是最快的方法