【渗透测试】PNG图片隐藏部分恢复

1、图片原尺寸还原方法一

缺点就是有点慢,毕竟遍历的次数比较多

python 复制代码
import binascii
import struct
import sys

filename = sys.argv[1]
crcbp = open(filename, "rb").read()  # 打开图片
crc32frombp = int(crcbp[29:33].hex(), 16)  # 读取图片中的CRC校验值
print(f"图片中的CRC校验值:\t{crc32frombp}")

for i in range(4000):  # 宽度1-4000进行枚举(如果图片太大,可以适当自行增大)
    for j in range(4000):  # 高度1-4000进行枚举(如果图片太大,可以适当自行增大)
        data = crcbp[12:16] + struct.pack('>i', i) + struct.pack('>i', j) + crcbp[24:29]
        crc32 = binascii.crc32(data) & 0xffffffff
        # print(crc32)
        if crc32 == crc32frombp:  # 计算当图片大小为i:j时的CRC校验值,与图片中的CRC比较,当相同,则图片大小已经确定
            print(f"图片大小(宽×高):\t{i} × {j}")
            print(f'换算后hex:\t\t{hex(i)}, {hex(j)}')

2、图片原尺寸还原方法二

这个方法有时候结果不太准确,可以两个方法相互印证

python 复制代码
import struct
import sys
import zlib

filename = sys.argv[1]
with open(filename, 'rb') as f:
    all_b = f.read()
    crc32key = int(all_b[29:33].hex(), 16)
    data = bytearray(all_b[12:29])
    n = 4095
    for w in range(n):
        width = bytearray(struct.pack('>i', w))
        for h in range(n):
            height = bytearray(struct.pack('>i', h))
            for x in range(4):
                data[x + 4] = width[x]
                data[x + 8] = height[x]
            crc32result = zlib.crc32(data)
            if crc32result == crc32key:
                print("宽为:", end="")
                print(width)
                print("高为:", end="")
                print(height)
                exit(0)

3、PNG图片尺寸修改

修改后,PNG图片即可恢复修改前的大小,显示隐藏的部分。

相关推荐
databook9 小时前
Manim实现闪光轨迹特效
后端·python·动效
Juchecar11 小时前
解惑:NumPy 中 ndarray.ndim 到底是什么?
python
用户83562907805111 小时前
Python 删除 Excel 工作表中的空白行列
后端·python
Json_11 小时前
使用python-fastApi框架开发一个学校宿舍管理系统-前后端分离项目
后端·python·fastapi
数据智能老司机18 小时前
精通 Python 设计模式——分布式系统模式
python·设计模式·架构
数据智能老司机19 小时前
精通 Python 设计模式——并发与异步模式
python·设计模式·编程语言
数据智能老司机19 小时前
精通 Python 设计模式——测试模式
python·设计模式·架构
数据智能老司机19 小时前
精通 Python 设计模式——性能模式
python·设计模式·架构
c8i19 小时前
drf初步梳理
python·django
每日AI新事件19 小时前
python的异步函数
python