PNG文件隐写分析

组成

png是由一个png文件签名[137,80,78,71,13,10,26,10]以及多个chunk组成的,如果你要校验一个文件是不是png文件,则可以直接校验前八个字节是不是[137,80,78,71,13,10,26,10]。
png结构如下:


可以看到除了header外,还有一个chunk列表,这个chunk就是png存储数据的位置。其中chunk的开头固定是类型(chunk_type)为IHDR的chunk块,结尾固定是类型(chunk_type)为IEND的chunk。

chunk的结构如下:


实现png数据隐写关键的点在于这个chunk_type,png固定使用的chunk_type在下图:

那么我们只要不和固定的chunk_type撞上,并符合chunk_type定义的规则,即可实现数据隐写。

chunk_type定义规则

png文件通过4个字节定义chunk的类型,通过每个字节的第5个bit位(大写的英文字符是0,小写的英文字符是1,也就是通过大小写区分不同的特性),我们以tEXt为例:


通过上面的定义可以发现,我们可以定义一个第三位大写的的chunk_type来确保我们写入的文件可以被解码器安全的读取,例如ruSt

示例

加密

将数据加密到一个新文件中

#命令   方法    源文件        chunk_type   消息         目标文件
pngsec encode .\chunk_test.png ruSt 这是一个隐藏的消息 chunk_encode.png

解密

#命令   方法    源文件          chunk_type
pngsec decode .\chunk_encode.png ruSt

打印

#命令   方法    源文件
pngsec print .\chunk_encode.png

开头

可以看到是IHDR开头

结尾

结尾是IEDN加上我们刚刚添加的ruSt

参考文档

png文件规范
工具地址

彩蛋

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇