文件类型识别----魔数
魔数简介:
在识别文件类型时,我们很多人都是通过文件的后缀来识别的,如苍老师.mp4, 波老师.avi, 玛利亚.jpg。 使用后缀名识别文件类型不是特别准确,尤其是后缀民可以手动修改的情况下。 另外一种识别文件名的方式是: 利用文件的头部信息中的标记,我们称这个标记为魔数。也许这个解析不是特准确,但它对识别文件类型比较准确。
常见文件类型魔数表:
类别 |
文件类型 |
Magic数 |
起始偏移 |
结束偏移 |
Exe, dll |
Windows可执行文件 |
"MZ" |
0 |
2 |
Linux可执行文件 |
"\x7F\x45\x4c\x46" |
0 |
4 |
|
Java类 |
"\xCA\xFE\xBA\xBE" |
0 |
4 |
|
文 档 类
|
Office2003, WPS |
"\xD0\xCF\x11\xE0\xA1\xB1\x1A\xE1" |
0 |
8 |
Office2003, WPS |
"WPS2001" |
2 |
9 |
|
Office2003, WPS |
"\x64\x6f\x63\x50\x72\x6f\x70\x73" |
30 |
38 |
|
Office2007 |
"_Types\x5d\x2exml" |
38 |
49 |
|
mdb |
"\x00\x01\x00\x00Standard Jet DB" |
0 |
20 |
|
accdb |
"\x00\x01\x00\x00Standard ACE DB" |
0 |
20 |
|
rtf |
"\{\\rtf" |
0 |
5 |
|
hlp |
"\x3F\x5F\x03\x00" |
0 |
4 |
|
hlp |
"\x4C\x4E\x02\x00" |
0 |
4 |
|
chm |
"ITSF" |
0 |
4 |
|
mht |
"From:" |
0 |
5 |
|
reg |
"REGEDIT" |
0 |
7 |
|
reg |
"Windows Registry" |
0 |
16 |
|
reg |
"R\x00e\x00g\x00i\x00s\x00t\x00r\x00y" |
18 |
33 |
|
|
"%PDF-" |
0 |
5 |
|
eps |
"%!PS-Adobe" |
0 |
10 |
|
Adobe FrameMaker |
"<MakerFile" |
0 |
10 |
|
压 缩 类
|
rar |
"Rar!" |
0 |
4 |
zip |
"PK\003\004" |
0 |
4 |
|
zip |
"PK00PK\003\004" |
0 |
8 |
|
7z |
"7z\xBC\xAF\x27" |
0 |
5 |
|
arj |
"\x60\xEA" |
0 |
2 |
|
bz2 |
"BZh" |
0 |
3 |
|
gzip |
"\037\213" |
0 |
2 |
|
gzip |
"\x1F\x8B\x08\x08" |
0 |
4 |
|
tz |
"TZ" |
0 |
2 |
|
compress |
"SZDD" |
0 |
4 |
|
cab |
"MSCF" |
0 |
4 |
|
rpm |
"\xED\xAB\xEE\xDB" |
0 |
4 |
|
ace |
"\x2A\x2A\x41\x43\x45\x2A\x2A" |
7 |
14 |
|
图 片 类
|
bmp |
"BM" |
0 |
2 |
jpeg |
"\377\330\377" |
0 |
3 |
|
jpeg |
"JFIF" |
6 |
10 |
|
jpeg |
"Exif" |
6 |
10 |
|
png |
"\x89PNG" |
0 |
4 |
|
gif |
"GIF" |
0 |
3 |
|
swf |
"FWS" |
0 |
3 |
|
swf |
"CWS" |
0 |
3 |
|
flp |
"FLhd" |
0 |
4 |
|
flp |
"flash_project" |
4 |
17 |
|
dwg |
"AC10" |
0 |
4 |
|
tiff |
"MM\x00\x2B" |
0 |
4 |
|
tiff |
"II*" |
0 |
3 |
|
音 视 频 类 |
rm |
".RMF" |
0 |
4 |
rm |
".RMX" |
0 |
4 |
|
rm |
"PROP" |
18 |
22 |
|
flv |
"FLV" |
0 |
3 |
|
avi |
"AVI LIST" |
8 |
16 |
|
wma |
"\x30\x26\xb2\x75\x8e\x66\xcf\x11" |
0 |
8 |
|
wav |
"WAVEfmt" |
8 |
15 |
|
mp4 |
"ftypmp41" |
4 |
12 |
|
mp4 |
"ftypmp42" |
4 |
12 |
|
mp4 |
"ftypisom" |
4 |
12 |
|
3gp |
"ftyp3gp4 |
4 |
12 |
|
3gp |
"ftypmmp4" |
4 |
12 |
|
mp3 |
"\xff\xff" |
11 |
1 |
|
mp3 |
"\x49\x44\x33" |
0 |
3 |
|
mtv |
"AMV" |
0 |
3 |
|
m4a |
"ftypM4A\x20" |
4 |
12 |
|
m4a |
"ftypM4V\x20" |
4 |
12 |
|
au |
"dns" |
0 |
3 |
|
au |
"\x2E\x73\x6E\x64" |
0 |
4 |
|
mdi |
"EP" |
0 |
2 |
|
其他 |
vhd |
"conectix" |
0 |
8 |
gho |
"\xFE\xEF\x01" |
0 |
3 |
|
nri |
"\x0ENeroISO" |
0 |
8 |
|
pf |
"SCCA" |
4 |
8 |
|
hqx |
"(This file must be converted with BinHex 4.0)" |
0 |
45 |
|
|
Unknow |
|
-1 |
0 |
- 注1: 上述表格中,有的为"\xAA" : 指的为十六进制的0xAA, 因为该数为非打印的字符,因此使用十六进制进行表示;还有一部分为“\223” : 指的为八进制数223(O), 原因和上述十六进制相同。
- 注2:用字符串来表示的优点有很多:1)方便扩展 2)以字符串常量的方式存储在字符串常量区 3)无论采用哪种方式存储,比较时仍然是二进制形式,所以匹配时和单独使用十六进制是相同的效果。
3. 如何查看一个文件类型的魔数信息
可使用的软件很多,我自己常用的是UltraEdit, 还有notepad++也可以,只不过需要安装个16进制的插件。
例如:
pdf类型:
wps创建的docx类型: