文件基础格式

常见文件头、文件尾

文件格式 文件头 文件尾
JPEG FF D8 FF FF D9
PNG 89 50 4E 47 0D 0A 1A 0A 00 00 00 0D AE 42 60 82
GIF 47 49 46 38 00 3B
ZIP 50 4B 03 04 50 4B
RAR 52 61 72 21
tar.gz 1F 8B 08
pyc 03 F3 0D 0A
MP3 FF FB 92
pdf 255044462D312E

PNG

  • 图种:jpg 图片有文件尾标识 FF D9,而图片查看器只读取 FF D9 之前的数据显示为图片,因此 FF D9 之后的空间能够存放隐藏数据;png 的末尾 00 00 00 00 49 45 4e 44 ae 42 60 82 充当文件尾标识,情况类似

  • LSB隐写:将数据藏匿在最低有效位,因此只适合 无损压缩 png无压缩 bmp 图片格式

png 文件主要由4大块(Chunk)组成:

文件头数据块IHDR(header chunk)
调色板数据块PLTE(palette chunk)
图像数据块IDAT(data chunk)
图像结束数据块IEND(trailer chunk)

IDHR块

IHDR Chunk又称为图片文件头数据块(image header chunk),是 png 图片的第一个chunk,一张 png 图片有且仅有一个IHDR Chunk

img

png 文件头标识 89 50 4E 47 0D 0A 1A 0A

图片宽度为 00 00 01 f4,即 500 像素

高度为 00 00 01 a4,即 420 像素

CRC码为 cb d6 df 8a

PNG CRC爆破

import binascii
import struct

misc = open("2.png","rb").read()

for h in range(1024):
 data = misc[12:20] + struct.pack('>i',h)+ misc[24:29]
 crc32 = binascii.crc32(data) & 0xffffffff
 if crc32 == 0xcbd6df8a:
     print h

IDAT块

图像数据块IDAT(image data chunk):它存储实际的数据,在数据流中可包含多个连续顺序的图像数据块。

IDAT存放着图像真正的数据信息,因此,如果能够了解IDAT的结构,用户就可以很方便的生成PNG图像

IEND块

每个正常的 png 图片文件的IEND Chunk都是固定

00 00 00 00 49 45 4e 44 ae 42 60 82

每个 png 文件的IEND Chunk都是 00 00 00 00 49 45 4e 44 ae 42 60 82,占12字节,它作为 png 文件的文件尾标识

BMP

BMP文件由4部分组成:

  1. 位图文件头(bitmap-file header)

  2. 位图信息头(bitmap-informationheader)

  3. 颜色表(color table)

  4. 颜色点阵数据(bits data)

24位真彩色位图没有颜色表,所以只有1、2、4这三部分

位图信息头

名称 占用空间 内容 实际数据
biSize 4字节 位图信息头的大小,为40 0x28(40)
biWidth 4字节 位图的宽度,单位是像素 0x200(512)
biHeight 4字节 位图的高度,单位是像素 0x200(512)
biPlanes 2字节 固定值1 1
biBitCount 2字节 每个像素的位数 1-黑白图,4-16色,8-256色,24-真彩色 0x18(24)

暂无评论

发送评论 编辑评论


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