ctf 改变图片高度_CTF-图片隐写-PNG图片修改宽高值的py3爆破

本文介绍了一种针对PNG图片隐写的方法,通过爆破图片的宽度和高度来解密隐藏信息。在Python3环境下,由于字节码处理的差异,作者使用bytearray实现了CRC校验的计算,并分享了从PNG文件头提取关键数据及进行爆破的代码,以找到正确的宽度和高度值。
摘要由CSDN通过智能技术生成

今天拿到一个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

图片隐写是指将一张图片隐藏在另外一张图片里面,而 PNG 文件是一种常见的图片格式,因此可以将一张图片隐藏在 PNG 文件中。以下是一个简单的例子: 1. 首先,将要隐藏的图片命名为 image.jpg,将要隐藏图片PNG 文件命名为 cover.png。 2. 将 image.jpg 转换为二进制文件,并将其插入 cover.png 中。 ```bash $ xxd -p -c 99999 image.jpg > image.hex $ cat image.hex | tr -d '\n' | xxd -r -p | dd of=cover.png bs=1 seek=100000 conv=notrunc ``` 这里的 `xxd -p -c 99999 image.jpg` 将 `image.jpg` 转换为十六进制,然后 `cat image.hex | tr -d '\n' | xxd -r -p` 将十六进制转回二进制,最后使用 `dd` 命令将二进制插入到 `cover.png` 的第 100000 个字节处。注意,这个位置可以根据具体情况进行调整。 3. 查看生成的 PNG 文件,可以看到图片已经被成功隐藏。 ```bash $ file cover.png cover.png: PNG image data, 800 x 600, 8-bit/color RGB, non-interlaced $ eog cover.png ``` 可以使用 `file` 命令检查文件类型,并使用图片查看器查看图片内容。 4. 提取隐藏的图片。 ```bash $ dd if=cover.png of=image2.jpg bs=1 skip=100000 ``` 这里的 `dd` 命令将 `cover.png` 中的隐藏图片提取到 `image2.jpg` 中。同样地,提取位置可以根据具体情况进行调整。 以上是一个简单的示例,实际情况可能更加复杂。在实际的 CTF 中,可能需要使用更加高级的隐写技巧来隐藏图片,例如使用 Least Significant Bit (LSB) 算法或者 F5 算法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值