CTF练题(2) png图片修改宽高典型例题

题目概述:

 题目附件:

 

图片 不方便打开。

解题思路:

(1)根据题目提示(要是图片长一点该多好......),暗示图片宽高参数被修改,将图片拖进kali虚拟机中进行验证,发现图片为损坏状态,确定为宽高被修改类型。

(2)此处我们可以使用python3进行crc32爆破,通过枚举的方式获得正确的图片宽高 。先把图片拖进winhex中分析,获得图片的crc码,如下:

黑色矩形框住的为该图片的crc码,蓝色的为宽高数据。

(3)爆破代码如下,有借鉴成分。

#使用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 == 0x889C2F07:  # 0x889C2F07是这个 png文件头的 CRC校验码,在 21~25byte处
            print('\n\n',i,j,crc32)   #0x 后的数字为十六进制中crc位置的代码(winhex左016,13-下一行的0)
            print(type(data))
            exit(0)
    print(i,end=' ')

 

 可以得知原图的宽高分别为365,645像素(十进制),使用计算器将其转化为十六进制数为:

16D,285。

(4)在010中打开题目附件图片,对宽高数据进行修改:

 将高的185改为285,另存图片到桌面,结果更改后的图片如下:

 此为修改后的原图隐藏部分,获得flag。

(5)提交答案。

解答完毕。 

### CTF竞赛中杂项图片的解决方案 在CTF竞赛中,处理图片尤其是涉及JPG文件的度和度问时,需要综合运用多种工具和技术。以下是一些常见的解技巧和方法: #### 1. 文件格式分析 通过分析图片的具体信息,可以获取其度、度以及其他元数据。这一步通常使用`file`命令或专用工具如`exiftool`完成[^1]。 ```bash file image.jpg exiftool image.jpg ``` 这些命令可以帮助确认图片的基本属性,例如分辨率()、颜色深度等。 #### 2. 数据抽取 如果图片中隐藏了数据,可能需要使用专门的数据抽取工具。例如,`steghide`或`zsteg`可以用于检测和提取隐藏信息。 ```bash steghide extract -sf image.jpg zsteg image.jpg ``` #### 3. 图片拼接与调整 对于拼图类目,`ImageMagick`是一个强大的工具,支持复杂的图片操作。例如,将多张图片拼接成一行: ```bash montage -mode concatenate -tile x1 *.jpg output.jpg ``` 若需要调整为特定的行列布局,可以修改`-tile`参数。例如,拼接成2行3列的网格: ```bash montage -mode concatenate -tile 2x3 *.jpg output.jpg ``` 此外,如果拼接后发现部分图片未对齐,可以通过调整长参数重新尝试[^2]。 #### 4. GIF分解与帧查看 对于动图(如GIF),可以使用`convert`命令将其分解为单帧图片以便进一步分析: ```bash convert input.gif frame_%03d.png ``` 每帧图片保存为`frame_000.png`、`frame_001.png`等形式,便于逐帧检查隐藏信息[^1]。 #### 5. 通道查看 某些目可能涉及图片的颜色通道操作。可以使用`ImageMagick`分离RGB通道: ```bash convert input.jpg -channel R -separate red_channel.jpg convert input.jpg -channel G -separate green_channel.jpg convert input.jpg -channel B -separate blue_channel.jpg ``` 通过分别查看每个通道的内容,可能会发现隐藏的信息。 #### 6. 自动化工具 对于复杂拼图,可以尝试使用自动化工具如`gaps`进行解决。该工具能够根据图片内容自动匹配拼图块的位置。如果初次拼接结果不理想,可以根据输出调整图片的长参数再次尝试[^2]。 --- ### 示例代码 以下是一个简单的脚本,用于批量处理图片并生成拼接结果: ```bash #!/bin/bash # 拼接所有JPG图片为一行 montage -mode concatenate -tile x1 *.jpg output.jpg # 分离RGB通道 convert output.jpg -channel R -separate red_output.jpg convert output.jpg -channel G -separate green_output.jpg convert output.jpg -channel B -separate blue_output.jpg ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值