常见文件格式特征

txt

纯文本文件格式,即只有文本没有任何文件标识和结构,所存内容即为文件格式。与之对应的是富文本格式,由未格式化文本、控制字、控制符号等组成,能包含文本图像颜色等。
以下是在winhex中查看的一个txt格式的文档的内容

doc/docx

是一种富文本格式。是微软的office word软件创建的文件格式。docx是在doc的基础上加入了xml,并且以一个zip压缩文件的形式存在。所以可以将docx的文件解压缩。
这就是一个docx的文档用解压软件打开后的内容

用winhex打开,其文件头是50 4B 对应ascii码为PK。这个也是zip的文件头

png

是无损压缩的图片格式。
一个png文件由一个文件头标志和若干个数据块顺序排列构成。开始为16进制89,这个超出了ascii范围,为了防止被解析为文本文件。
每一个数据块由四个部分组成,第一个部分占四个字节数据部分长度,4个字节类型,不固定具体的数据信息,最后四个字节表示校验码

其中叫做INDR数据块的数据部分需要特别关注
其中色深(每一个像素所占的位数)表示支持的颜色种类,如04支持2^4种。

用winhex打开一个png文件
其中蓝色部分框部分为数据部分所占长度D,即13个字节。而数据部分,即棕色框确实为13个字节。
绿色框部分为类型,即该数据块为IHDR。
棕色框部分,第一条红线和第二条红线为宽度和高度,即5F 6B十进制为95 107,查看该图片的详细信息确实为95像素和107像素的。
棕色划线部分为校验和。

jpg/jpeg

jpg和jpeg是一种格式。属于有损压缩的图片格式。有多个段组成,每个段由FF开头,之后的一个字节代表该段的类型。其中FFD8(图像起始位置)FFE0(文件详细信息)FFC0(框架起始位置)FFDA(扫描起始位置)FFD9(文件结束符)
用winhex打开一个jpg文件如下

jpeg图像压缩原理

  • 将图像分成多个 8*8的像素块。因为在8*8的像素的方格中,像素是非常相似的。
  • 对每一个像素块进行离散余弦逆变换(DCT),产生了一个新的8*8的块。在每一个块中,像素点间的差异大则弦波频率高,称为高频区,差异小则弦波频率低,称为低频区。通过DCT变换后,新块中的高频系数越接近右下,低频系数越接近左上
  • 然后进行量化:因为得到的新块还不能直接进行压缩。因为人对高频识别较差,所以可以去除大量高频系数,所以将新块除以一个特定的矩阵,再取整,使高频系数基本为0
  • 通过熵编码等对图像进行压缩

供参考的两篇文章
https://blog.csdn.net/ljh618625/article/details/102760728
(https://www.cnblogs.com/Arvin-JIN/p/9133745.html)[https://www.cnblogs.com/Arvin-JIN/p/9133745.html]

bmp

不采用任何其它的压缩方式,保留图像的原汁原味
由文件头、信息头、调色板、数据四部分组成
文件头占14个字节

字节数 意义
2个字节 位图的类别
4个字节 位图的大小
4个字节 两个保留位
4个字节 文件头到实际的数据之间的偏移量(以小端存储)

信息头通常40个字节

字节数 意义
4个字节 文件大小
4字节 宽度
4字节 高度
2个字节 目标设备的颜色平面数
2个字节 一个像素点占几位
4个字节 压缩类型(一般为0不压缩)
4个字节 图像的大小
4个字节 水平分辨率
4个字节 垂直分辨率
4个字节 位图使用调色板的实际索引数(0是使用所有索引)
4个字节 对图像显示有重要影响的索引数

通过高度的正负(负值以补码形式表示)可以判断位图是倒向(正)还是正向(负)

gif

无损压缩。并不存储颜色本身,而是该点的颜色对应的颜色列表的索引值。可以存储多个图像和控制图像的行为的控制块,从而实现动画效果。由文件头、gif数据流、终结器组成。

在kali中通过file命令可以判断文件类型
常见文件头,文件尾总结。这张图截自一个文档,出处找不到了。

posted @ 2020-02-22 16:47  启林O_o  阅读(2148)  评论(0编辑  收藏  举报