各类常见文件16进制头文件

常见文件16进制文件头汇总!!

文件类型 文件头标识 文件尾标识
.7z 37 7A BC AF 27 1C
.GIF 47 49 46 38 00 3B
.jpg FF D8 FF FF D9
.png 89 50 4E 47 AE 42 60 82
.rar 52 61 72 21 C4 3D 7B 00 40 07 00
.zip 50 4B 03 04 50 4B
.pdf 25 50 44 46 2D 31 2E

0x00 zip压缩包伪加密分析

zip压缩包16进制数据块的简单分析(详细分析的相关文章非常多,这里不再分析)

需要重点注意三个数据标记块:

0000 第一块:压缩源文件数据块

(并非所有zip都是这样,但是字节位置代表信息一样)
50 4B 03 04 : 头文件标记块(固定)
14 00 : 解压文件所需要的pkware版本
01 00 : 全局方式位标记(包含压缩包是否加密,该例子中为加密状态,第二个数 字是计数则表示加密,偶数为不加密,包括00)
00 00 : 压缩方式
7A 6D : 最后修改文件时间
9D 54 : 最后修改文件日期
E5 93 8C DD : CRC-32校验码
15 00 00 00 : 压缩后尺寸
09 00 00 00 : 未压缩尺寸
08 00 : 文件名长度
00 00 : 扩展记录长度

0001 第二块:压缩源文件目录区


50 4B 01 02 : 目录中文件文件头标记
3F 00 : 压缩使用的pkware版本
14 00 : 解压文件所需pkware版本
01 00 : 全局方式位标记(跟数据块一样,这里表示有密码)
00 00 : 压缩方式
7A 6D : 最后修改文件时间
9D 54 : 最后修改文件日期
E5 93 8C DD : CRC-32校验
15 00 00 00 : 压缩后尺寸
09 00 00 00 : 未压缩尺寸
......

0002 第三块:压缩源文件目录结束标志

50 4B 05 06 : 目录结束标志

0003 伪加密的辨别方法

0b00 无加密

压缩源文件数据区的全局加密为00 00(或者是其他偶数的数值),即图示中第二个方框中的内容

同时压缩源文件目录区的全局方式位标记也为00 00(或者是其他偶数的数值)(同样是图示中的第二个方框中内容)

0b01 伪加密

压缩源文件数据区的全局加密为00 00 (或者是其他偶数的数值),同时压缩源文件目录区的全局方式位标记为01 00(或者是其他奇数数值)。发现伪加密时,只要将目录区的数值更改为非加密数值即可

0b10 真加密

压缩源文件数据区的全局加密为01 00 (或者是其他奇数数值),且压缩源文件目录区的全局方式位标记为01 00 (或者是其他奇数数值)

0x01 RAR文件头详细解析

以上表格中给出的为rar4的16进制文件格式,最新的rar5则有不同的16进制文件格式

头:52 61 72 21 1A 07 01 00

尾:1D 77 56 51 03 05 04 00

rar5格式的16进制文件并非像rar4一样相对固定,数块的位数(大小)是动态变化的,下面主要解析rar4格式的16进制文件(rar4文件现在比较少见,分析使用攻防世界中MISC的simpleRAR题目的文件)

rar文件通常包含 标记块压缩文件头块文件头块注释头块,每一块中都包含以下内容:

名称 大小 说明
HEAD_CRC 2字节 所有块或块部分的CRC
HEAD_TYPE 1字节 块类型
HEAD_FLAGS 2字节 块标记
HEAD_SIZE 2字节 块大小

块类型的类型有以下几个:

标记块:HEAD_TYPE=0x72
压缩文件头:HEAD_TYPE=0x73
文件头:HEAD_TYPE=0x74
旧风格的注释头:HEAD_TYPE=0x75
旧风格的用户身份信息:HEAD_TYPE=0x76
旧风格的子块:HEAD_TYPE=0x77
旧风格的恢复记录:HEAD_TYPE=0X78
旧风格的用户身份信息:HEAD_TYPE=0X79
子块:HEAD_TYPE=0x7A
最后的结束块:HEAD_TYPE=0x7B

下面分析几个数据块

0000 标记块

56 61 : HEAD_CRC,两个字节,所有rar文件都有
72 : 块类型(HEAD_TYPE),标记块
21 1A : 块标记(HEAD_FLAGS),两个字节
07 00 : 块大小,即56 61 72 21 1A 07 00 一共7个字节

0001 压缩文件头

CF 90 : 压缩文件头CRC校验值
73 : 头类型,为压缩文件头
00 00 : 位标记块
0D 00 : 文件头大小即000D,13字节
后面还有6个保留字节

0002 文件头

D5 56 : HEAD_CRC,文件头的CRC校验码
74 : HEAD_TYPE,块类型,74表示文件头
20 90 : HEAD_FLAGS
2D 00 : HEAD_SIZE,文件头全部大小
10 00 00 00 :PACK_SIZE,已压缩文件大小
10 00 00 00 :UNP_SIZE,未压缩文件大小
02:HOST_OS,1字节,保存压缩文件使用的操作系统,02代表windows
C7 88 67 36 :FILE_CRC,4字节,文件的CRC值

0003 结尾块

C4 3D 7B 00 40 07 00 : 固定的结尾块

(所以按照此分析,攻防世界该题目的secret.png的文件头表示应该改成74)

0x02 .png文件分析

png文件涉及到高度、宽度的隐写,要分析16进制文件中的高度宽度的位置:

89 50 4E 47 0D 0A 1A 0A : 开头8个字节,表示png文件
接下来是IHDR数据块
00 00 00 0D : 表示IHDR数据块长度为13字节
48 49 44 52 : IHDR标识
00 00 02 C4 : 表示图像宽,708像素(隐写的关键)
00 00 01 61 : 表示图像高度,353像素(隐写关键)
08 : 色深,表示2^8=256色图像
06 : 颜色类型
00 : PNG Spec规定此处总为0(非0值为将来使用更好的压缩方法预留),表示使压缩方法(LZ77派生算法)
00 : 同上
00 : 非隔行扫描
77 6C BC 43 : CRC校验码

图像宽度与高度不一定是正确的,可以用CRC校验码进行计算得出,所以图片隐写可以算出真实的高度后进行修改。