freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

点我创作

试试在FreeBuf发布您的第一篇文章 让安全圈留下您的足迹
我知道了

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

图片隐写-gif
Maps 2023-05-08 11:50:54 51864
所属地 重庆

了解GIF文件的格式

GIF文件格式

GIF图像文件以数据块(block)为单位来存储图像的相关信息。一个GIF文件由表示图形/图像的数据块、数据子块以及显示图形/图像的控制信息块组成,称为GIF数据流(Data Stream)。数据流中的所有控制信息块和数据块都必须在文件头(Header)和文件结束块(Trailer)之间。

GIF文件格式采用了LZW(Lempe-ZivWalch)压缩算法来存储图像数据,定义了允许用户为图像设置背景的透明(transparency)属性。此外GIF文件格式可在一个文件中存放多幅彩色图形/图像。如果在GIF文件中存放有多幅图,它们可以像演幻灯片那样显示或者像动画那样演示。1683517451_6458700bd6de4b0ed5434.png!small?1683517452684

1683517461_645870152d9c72ab96e6f.png!small?1683517461803


GIF文件内部是按块划分的,包括控制块 (Control Block) 和数块Data Sub-blocks) 两种。控制块是控制数据块行为的,根据不同的控制块包含一些不同的控制参数;数据块只包含一些8-bit的字符流,由它前面的控制块来决定它的功能,每个数据块大小从0到255个字节,数据块的第一个字节指出这个数据块大小(字节数》,计算数据块的大小时不包括这个字节,所以一个空的数据块有一个字节,那就是数据块的大小0x00。下表是一个数据块的结构:1683517484_6458702cbc52046216bde.png!small?1683517485283


文件头部分(Header)

GIF署名(Signature)和版本号(Version)

GIF署名用来确认一个文件是否是GIF格式的文件,这一部分由三个字符组成:”GIF”;文件版本号也是由三个字节组成,可以为”87a"或”89a”具体描述见下表:1683517509_645870454c13a2417c3bf.png!small?1683517509844


GIF数据流部分(GIF Data Stream)

逻辑屏幕标识符(Logical Screen Descriptor)

这一部分由7个字节组成,定义了GIF图象的大小Logical Screen Width & Height)、颜色深度(Color Bits)、背景色(Blackground ColorIndex)以及有无全局颜色列表(Global Color Table)和颜色列表的索引数(ndex Count),具体描述见下表:1683517535_6458705f3a308796a2ff4.png!small?1683517535812


m- 全局颜色列表标志(Global Color Table Flag),当置位时表示有全局颜色列表,pixel值有意义

cr - 颜色深度(Color ResoluTion),cr+1确定图象的颜色深度

s- 分类标志(Sort Flag),如果置位表示全局颜色列表分类排列.

pixel- 全局颜色列表大小,pixel+1确定颜色列表的索引数(2的pixel+1次方)


全局颜色列表(Global Color Table)

全局颜色列表必须紧跟在逻辑屏幕标识符后面,每个颜色列表索引条目由三个字节组成,按R、G、B的顺序排列。1683517563_6458707b0755dd25ae37f.png!small?1683517563545


图形控制扩展(Graphic Control Extension)

1683517588_64587094bb8f53623f1ca.png!small?1683517589344


这一部分是可选的(需要89a版本),可以放在一个图象块(图象标识)或文本扩展块的前面,用来控制在它后面的第一个图象(或文本)的渲染(Render)形式,组成结构如下。1683517619_645870b315e1e39013692.png!small?1683517619663


处置方法(Disposal Method)指出处置图形的方法

0-不使用处置方法

2- 回复到背景色

1- 不处置图形,把图形从当前位置移去

3- 回复到先前状态


文件结尾部分

文件终结器(Trailer)

这一部分只有一个值为0的字节,标识一个GIF文件结束1683517641_645870c99ef25635f5d1e.png!small?1683517642134


常见隐写方式

GIF文件隐写题目主要有以下几类考点:


  • 修补文件头部
  • 空间轴隐藏信息
  • 时间轴隐藏信息

    修补文件头部

    CTF中有的时候会需要我们去修复图片,这对我们对于图片的文件结构要有了解。找到/gi的文件格式,然后对照这个破损的文件对其进行修补1683517684_645870f439bcbb93e13e4.png!small?1683517684844


    解决方式:

    使用16进制编辑器修复GIF文件头部,然后保存 1683517717_645871153d884207f6cc7.png!small?1683517718026


    空间隐藏信息

    由于 GIF 的动态特性,由一顿的图片构成,所以每一锁的图片,多赖图片间的结合,都成了隐藏信息的一种载体,

    解决方式


    • 使用StegsolvefJ开图片,Stegsolve Analyse-Frame Brower进行分帧
    • 可以使用conwert命令gif图片的每一赣分割开来
    • convert persistant.gif transparent white result.gif

    时间轴隐藏信息

    GIF文件每一间的时间间隔也可以作为信息隐藏的载体

    解决方法:

    通过工具或者脚本获取gif图每一顿的时间间隔

    通过identify命令清晰的打打印出每一顿的时间间隔 identify -format"%Tn”100.gif根据时间间隔的规律解决题目





# CTF
本文为 Maps 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
Maps LV.3
这家伙太懒了,还未填写个人描述!
  • 7 文章数
  • 4 关注者
音频隐写
2023-05-16
bnp和其他格式隐写
2023-05-08
图片隐写—png
2023-04-24
文章目录