Win7中AppInit_DLLs的变化
在Windows中提供了这样一个机制:在制定的注册表位置(HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Windows:AppInit_DLLs)指定一个virus.dll文件,然后启动桌面应用程序app.exe。如果这个exe使用到了user32.dll,那么app.exe的进程将加载先前指定的这个virus.dll(任何使用到user32.dll的程序都会加载这个dll)。具体见这篇KB
实际用户环境中的情况是,绝大多数使用了应用程序会使用user32.dll,而这个机制很容易被病毒利用,加载自己后进行“病毒行为”。犹如先前提到的自动运行机制,这些系统机制都为病毒传播带来了便利。
从Vista开始,windows对于这个键值的限制加强了。vista中默认禁用了AppInit_DLLs,方法是在相同的注册表位置增加了一个LoadAppInit_DLLs,值设置为0(1为启用)。
windows7沿用了这个机制,不仅如此,对于windows7和windows2008 R2,又新增了一个值:RequireSignedAppInit_DLLs 用于设置只允许加载有数字签名的dll。在win7中这个值默认没有启用,在windows2008 R2中这个值设置为1,强制进行数字签名检查增加安全性。
新一变化即在兼容性和安全性间找到了一个平衡,又将杜绝病毒利用这一机制危害系统。
我始终觉得注册表不是什么好东西。