“扩展名是上个世纪微软最大的骗局…”,在windows占有大部分市场的今天,在这个骗局四起的年代,我不得不以这一句话来作为开场白。
早在DOS时代(如果你一开始接触的就是windows,那么非常高兴的祝贺你,你没有吃过那些视窗系统下无法体会到的苦,不过为了清楚一些事情,还是建议了解一下相关知识),8.3格式是规范整个文件名体系的标准,它由不多于8个字符的主文件名加不多于3个字符的扩展名组成,那时的计算机仅仅是做一些单任务,用户交互的媒介也不如windows系统那样丰富,数据存储相当简单,更重要的是,命令行的操作方式限制了更加复杂的文件格式识别机制,因此使用扩展名来区分文件类型可以极大的简化程序的操作,提高使用效率。
而当计算机步入多媒体时代的之后,其数据复杂度远远超过了基于8.3文件名格式的DOS,文件识别也从字符形式转到图形形式,使用扩展名区分文件格式的做法几乎成了掩耳盗铃。windows为了使用图形方式区分文件格式,采用了注册表+扩展名方法,针对不同的扩展名,windows系统为其在注册表中指定不同的显示方式(即不同的ICON图标)。
但是windows系统忽略了一个关键的问题,那就是:文件扩展名可以让用户随意更改。这就为欺骗埋下了伏笔,尤其是windows平台下众多第三方软件出现之后,扩展名更是形同虚设,复杂的数据格式早已不是扩展名所能表达的了。但直到如今,windows系统还是保持了一贯的文件识别方式,殊不知这种白痴的区分让多少用户掉进了阴沟。很多从windows认识计算机,且认为windows就是计算机的用户,几乎无一例外的认为,扩展名是文件格式的唯一标识,什么样的扩展名就是什么样的文件,这似乎也是很多低级的软件、病毒能够轻而易举蒙骗windows用户的原因,见过的例子数不胜数,笑话也可以给大家收集一箩筐。但今天我不是来讲笑话的,也不是来嘲笑这些无知的用户如何如何的,而是要带大家深入敌后,看看扩展名背后会隐藏着什么东西。
一般情况下,比较安全且快捷的识别方式是使用文件头,即在文件内容前若干字节写入固定的标识,来决定文件格式。一般这个标识使用文本编辑器打开就能很容易的看出来(多数是纯文本格式,但也有些是不可识别的字符),下面我就列举一些常见的文件格式(均为不可直接识别的文件格式,文本类型文件在此不做说明),来帮你识别扩展名背后真正的文件类型。
文件头字符 类型说明
GIF89a GIF图象格式(89a为编码版本号,也可能不同)
BM BMP图象
%PDF Adobe PDF格式
{/rtf1/ rtf富文本格式
邢唷 Microsoft Office文件格式(2003之前版本)
????JFIF JPG图象格式(????为四个不可识别符号)
MZ exe可执行文件或者dll运行库或者OCX运行库或者bpl代码包
Rar! WinRAR压缩包
塒NG PNG图象
RIFF????WAVEfmt WAV音频(????为四个不可识别符号)
PK ZIP压缩包
????Standard Jet DB access数据库(????为四个不可识别符号)
8BPS PhotoShop工程文件
FWS(或CWS) flash文件
.RMF RM视频文件
RIFFjB??AVI 标准AVI视频(??为不可识别符号)
MThd MIDI音频
漱壕 JAVA的.class文件
NES FC游戏ROM
后记:目前,图形化操作系统除了windows之外,几乎都采用了文件内容识别方式,这其中包括Symbian系统等。