欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Python3爆png长和高(CTF图片隐写)

程序员文章站 2022-05-15 11:50:43
...

做的第一道png隐写题,png文件的hex格式

可以先在Linux中打开图片,发现提示错误,说明文件被修改过(Windows中不会提示错误,能打开就直接打开了)

把图片拖到winhex中可以看出文件头数据块IHDR被修改,宽和高都变成了0

Python3爆png长和高(CTF图片隐写)

用python脚本爆出真正长高

#Python3爆 png长和高
import os
import binascii
import struct

for i in range(20000):#一般 20000就够
    wide = struct.pack('>i',i)
    for j in range(20000):
        high = struct.pack('>i',j)
        data = b'\x49\x48\x44\x52' + wide+ high+b'\x08\x02\x00\x00\x00'
        #因为是 Py3,byte和str型不能直接进行运算,要写把 str写 b'...'。不然把 wide和 high写成 str(...)

        crc32 = binascii.crc32(data) & 0xffffffff
        if crc32 == 0x81888253: # 0x81888253是这个 png文件头的 CRC校验码,在 21~25byte处
            print('\n\n',i,j,crc32)
            print(type(data))
            exit(0)
    print(i,end=' ')

运行后爆出wide = 662,high = 439

Python3爆png长和高(CTF图片隐写)

转化为16进制分别为 296,1B7。在winhex中修改后保存

Python3爆png长和高(CTF图片隐写)
重新打开图片,已被复原
Python3爆png长和高(CTF图片隐写)
(如果有可以改进的地方欢迎大佬指正~)

相关标签: ctf之misc