分享一则冷知识:在Windows 95时代,系统如何判断一个程序是否为安装程序?方法简单得令人难以置信——完全依靠“猜名字”的策略。
事情源于7月7日,微软资深工程师雷蒙德·陈在官方博客中回顾了这段历史。尽管Windows 95已经具备拦截有缺陷的第三方安装程序、防止其擅自降级系统组件的能力,但一个更棘手的问题随之而来:系统如何准确判断当前正在运行的程序是否真的是一个安装程序?

为了解决这一难题,微软采用了一套在今天看来相当“原始”的启发式判定机制。核心逻辑非常直接:系统会监测运行中程序的文件名——如果文件名包含 setup、installer、inst 等关键词,就默认它极有可能是安装程序。此外,这套机制还贴心地纳入了其他语种的变体,例如意大利语的 imposta、土耳其语的 ayarla、希伯来语的 felrak。
但如果文件名中不包含这些关键词怎么办?别担心,还有备用方案。系统会进一步检查该可执行文件的完整存储路径中是否包含 setup 一词。背后的逻辑相同:正规的安装程序,其文件路径通常都会带有一些标识,以便系统能够“识别”出来。
有趣的是,在这两种判定场景下,系统并不会立即对文件进行校验,而是延迟到下次开机时再执行。为什么这样做?陈解释说,部分安装程序在检测到系统文件被占用、无法直接替换时,会调用 ExitWindowsExec 函数退出Windows,切换回MS-DOS环境运行批处理脚本,之后再重启Windows。因此,必须等到系统重启后,才能捕获那些通过脚本非法篡改的系统文件。
当然,凡事都有例外。当通过INF文件安装多媒体驱动时,Windows 95会进行实时校验——当时负责多媒体驱动开发的团队获得了特殊豁免权,可以直接绕过这套延迟机制。
回过头来看,Windows 95凭借这样一套简陋的“猜名字”逻辑来识别安装程序,确实显得有些粗糙。但考虑到那是上世纪90年代的技术水平,倒也可以理解。反观今天,恶意程序的攻击手段已经变得何等复杂与成熟?可想而知,Windows 11等现代操作系统早已抛弃了这种方法,转而采用更精密、更先进的识别方案。
