今天拿到一个png图片隐写的题。
对于这种windows下可以打开,linux下无法打开的png文件,当然是第一时间怀疑宽和高做了手脚。
爆破crc校验所需要了解到的PNG文件头知识
- (固定)八个字节89 50 4E 47 0D 0A 1A 0A为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计算得到。
宽和高做了手脚的位置
但我只有手头抄的别人python2.7的脚本,放在python3下运行不了(……)
在不断的调试中发现:
有数值超过了127,ascii不认
binascii在python3下不支持unicode编码,必须输入字节码,改成b''就能运行了,但没办法payload拼接在一起爆破
python3把文本和二进制分开,字节码不能拼接
用string.encode('utf-8')倒是能运行了,但是没爆破出来,仔细一看发现编码会把超过ascii范围的譬如\x