C/C++教程

Bugku_隐写 [Study notes][MISC]

本文主要是介绍Bugku_隐写 [Study notes][MISC],对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
  • 文件是一张PNG格式的图片

    在这里插入图片描述

  • 首先关于PNG图像文件结构:

    PNG文件由一个8字节的文件署名域(HEX: ‘89 50 4E 47 0D 0A 1A 0A’)和按特定结构组织的3个以上的数据块(chunk)组成。

    PNG文件标志PNG数据块PNG数据块

    PNG定义了两种类型数据块:关键数据块(必需),辅助数据块(可选)。

    主要的关键数据块

    1. IHDR (header chunk),文件头数据块,包含图像基本信息。

    2. PLTE (palette chunk),调色板数据块。

    3. IDAT (image data chunk),图像数据块,存储实际图像数据信息。

    4. IEND (image trailer chunk),图像结束数据,最后一个数据块。

    每个数据块具体结构,

    • Length, 4字节,指定数据块中数据域的长度。
    • Chunk Type Code, 4字节,数据块类型码。
    • Chunk Data,可变长度,数据块数据,存储类型码指定的数据。
    • CRC,4字节,循环冗余检测,对Chunk Type Code域和Chunk Data域内原有的数据校验得出的校验码。

    辅助数据块这里提一个,

    • pHYs,物理像素尺寸数据块,指定像素大小或者图像宽高比例。
  • 在WinHex中打开文件,

    在这里插入图片描述

    具体说明如下,

    十六进制含义
    89 50 4E 47 0D 0A 1A 0APNG 标识
    00 00 00 0DIHDR数据块的数据域长度为13字节
    49 48 44 52IHDR标识
    00 00 01 F4图像宽度,500 pixels
    00 00 01 A4图像高度,420 pixels
    08 06 00 00 00(这里忽略不谈)
    CB D6 DF 8ACRC校验值
    00 00 00 09pHYs数据块的数据域长度为9字节
    70 48 59 73pHYs标识
    00 00 12 74x轴上每单位4724像素
    00 00 12 74y轴上每单位4724像素
    01单位metre,00表示未定义实际像素大小,只定义了像素显示比例
    DE 66 1F 78CRC校验值
  • 对IHDR类型码域和数据域(49 48 44 52 00 00 01 F4 00 00 01 A4 08 06 00 00 00)做CRC-32校验,校验码为’C7 58 D7 7D‘,与CRC校验值 (‘CB D6 DF 8A’) 不符,推测图像宽度或长度被改动。

  • 暴破获得真正的宽与高。

    在这里插入图片描述

  • 修改值,找出flag。

    在这里插入图片描述

这篇关于Bugku_隐写 [Study notes][MISC]的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!