【工具】-Misc-PNG图片高度宽度CRC爆破脚本
什么是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 48 44 52
是IHDR。
接下来第二行前8个hex数据都是表示宽高的:00 00 07 80 00 00 09 5F
,这里表示宽度为07 80,高度为09 5F,这两组数据转换为10进制就是1920x2399。
08 02 00 00 00
这5个字节依次为Bit depth,ColorType,Compression method,Filter method,Interlace method
接下来的4组(16个)Hex组成的则是CRC校验码,我这里是13 97 08 36
CRC的原理,就是由IDCH和IHDR共十七位字节进行crc计算得到的。
爆破宽高
有的CTF题目会修改PNG图片的宽高,这在没有CRC检测的国内软件或Windows的图片看来是正常的。
但是一旦在Linux、MacOs等打开,则会出现报错。
前面提到了CRC的原理,我们借鉴网络上的脚本进行了修改。
1 | import struct |
上面的脚本参考案例(前人)是引用了https://blog.csdn.net/weixin_44145452/article/details/109612189,摸着他建的墙,我才得以趟过这条河。
不过也对他的脚步进行了优化和改良,修改了一些代码问题、逻辑问题等。
后续我们也会给这个脚本增加到qsnctf库中,努力整合。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 青少年CTF-优秀文库!