文件结构
图片的结构
Gif
一个GIF文件的结构可分为文件头(File Header)、GIF数据流(GIF Data Stream)和文件终结器(Trailer)三个部分。
文件头部分
GIF署名(Signature)和版本号(Version)
GIF署名用来确认一个文件是否是GIF格式的文件,这一部分由三个字符组成:”GIF”;文件版本号也是由三个字节组成,可以为”87a”或”89a”.具体描述见下表:
对应到实际文件中:
GIF数据流部分(GIF Data Stream)
这部分不是按照顺序记录,详细顺序参照上面的Gif总结构表
图象标识符(Image Descriptor)
一个GIF文件内可以包含多幅图象,一幅图象结束之后紧接着下是一幅图象的标识符,图象标识符以0x2C(‘,’)字符开始,定义紧接着它的图象的性质,包括图象相对于逻辑屏幕边界的偏移量、图象大小以及有无局部颜色列表和颜色列表大小,由10个字节组成:
注释扩展(Comment Extension)
这一部分是可选的(需要89a版本),可以用来记录图形、版权、描述等任何的非图形和控制的纯文本数据(7-bit ASCII字符),注释扩展并不影响对图象数据流的处理,解码器完全可以忽略它。存放位置可以是数据流的任何地方,最好不要妨碍控制和数据块,推荐放在数据流的开始或结尾。具体组成:
文件结尾部分
文件终结器(Trailer)
这一部分只有一个值为0的字节,标识一个GIF文件结束.
对应到实际中:
参考文章
- [Gif文档](https://dev.gameres.com/Program/Visual/Other /GIFDoc.htm)
JPG
JPG/JPEG内部存储是块状类型(即文件内部分为若干块),这些块由ff开头,ff后紧跟的一个标记符指明了这个块的类型。
0xffd8
和 0xffd9
为 JPG/JPEG 文件的开始结束的标志。
这些分块按出现顺序分别是:
文件开始&结束
FFE0 APP0 图像识别信息
- FFE0:定义交换格式和图像识别信息
- 4a46 4946 00:JFIF格式标识符
- 01 01:版本号(第一个01是主版本好,第二个01是次版本号)
- 01:单位(00=无单位;01=点数/英寸;02=点数/厘米)
- 0078:为水平分辨率
- 0078:为竖直分辨率
- 00:水平点数
- 00:竖直点数
TIPs
- jpg文件缺少文件尾在windows下也能被正确打开。(bugku中的这是一张单纯的图片)
参考
PNG
PNG文件结构很简单,主要有数据块(Chunk Block)组成,最少包含4个数据块。
PNG图像标识符
根据PNG文件的定义来说,其文件头位置总是由位固定的字节来描述的:
IHDR数据块
文件头数据块IHDR(header chunk):它包含有PNG文件中存储的图像数据的基本信息,并要作为第一个数据块出现在PNG数据流中,而且一个PNG数据流中只能有一个文件头数据块。
文件头数据块由13字节组成,它的格式如下表所示:
- 00 00 00 0D:IHDR头块长为13
- 49 48 44 52:IHDR标识
- 00 00 13 40:图像的宽
- 00 00 0C C0:图像的高
- 44 6D AD B8:CRC校验
IEND图像结束数据
它用来标记PNG文件或者数据流已经结束,并且必须要放在文件的尾部。
如果我们仔细观察PNG文件,我们会发现,文件的结尾12个字符看起来总应该是这样的:
由于数据块结构的定义,IEND数据块的长度总是0(00 00 00 00,除非人为加入信息),数据标识总是IEND(49 45 4E 44),因此,CRC码也总是AE 42 60 82。
压缩包
- ZIP Archive (zip):文件头:504B0304 文件尾:50 4B 01 02或50 4B 05 06
- RAR Archive (rar),文件头:526172211A070100 文件尾:D7011D77565103050400
rar
rar 无加密状态下,压缩包里面每个文件前都有文件头表示 0x74
ELF(文件格式) 可执行与可链接格式 文件头:7F454C46
Windows Bitmap (bmp),文件头:424DC001
TIFF (tif),文件头:49492A00
CAD (dwg),文件头:41433130
Adobe Photoshop (psd),文件头:38425053
Rich Text Format (rtf),文件头:7B5C727466
XML (xml),文件头:3C3F786D6C
HTML (html),文件头:68746D6C3E
Email [thorough only] (eml),文件头:44656C69766572792D646174653A
Outlook Express (dbx),文件头:CFAD12FEC5FD746F
Outlook (pst),文件头:2142444E
MS Word/Excel (xls.or.doc),文件头:D0CF11E0
MS Access (mdb),文件头:5374616E64617264204A
WordPerfect (wpd),文件头:FF575043
Adobe Acrobat (pdf),文件头:255044462D312E
Quicken (qdf),文件头:AC9EBD8F
Windows Password (pwl),文件头:E3828596
RAR Archive (rar),文件头:52617221
Wave (wav),文件头:57415645
AVI (avi),文件头:41564920
Real Audio (ram),文件头:2E7261FD
Real Media (rm),文件头:2E524D46
MPEG (mpg),文件头:000001BA
MPEG (mpg),文件头:000001B3
Quicktime (mov),文件头:6D6F6F76
Windows Media (asf),文件头:3026B2758E66CF11
MIDI (mid),文件头:4D546864