之所以病毒释放usp10.dll,是用了DLL劫持技术,该病毒全盘查找有exe文件的文件夹,释放usp10.dll 当exe运行时,系统会根据他的导入表为他加载他需要的DLL,而查找这个DLL是有优先级的,即先从当前目录中查找,如果当前目录不存在,再从 windows/system32/中查找,病毒就通过了这点小技巧劫持了系统的usp10.dll,运行了自身。 这也是病毒实行反复感染的手段,即使你重装了系统盘,当你运行其他的盘的可执行文件时,就运行了病毒,我们是不是有什么手段破坏这个加载次序。 先看看微软的知识库里的knowdlls的解释
引用:
With the KnownDLLs registry entry, Windows NT uses the following search order to locate the DLL:
1. The /WINNT/SYSTEM32 directory.
2. The directory of the executable for the process that is loading the DLL.
3. The current directory of the process that is loading the DLL.
4. The /WINNT directory. 5. A directory listed in the PATH environment variable.
引用:
操作系统提供的某些DLL得到了特殊的处理。这些DLL称为已知的DLL。它们与其他DLL基本相同,但是操作系统总是在同一个目录中查找它们,以便对它 们进行加载操作。在注册表中有下面的关键字: HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Control/Session Manager/KnowDlls 当LoadLibrary或LoadLibraryEx被调用时,这些函数首先查看是否传递了包含.dll扩展名的DLL名字。如果没有传递,那么它们将 使用通常的搜索规则来搜索DLL。如果确实设定了.dll扩展名,那么这些函数将删除扩展名,然后搜索注册表关键字KnownDLL,以便确定它是否包含 匹配的值名字。如果没有找到匹配的名字,便使用通常的搜索规则。但是,如果找到了匹配的值名字,系统将查找相关的值数据,并设法使用值数据来加载DLL。 系统也开始在注册表中的DllDirectory值数据指明的目录中搜索DLL。按照默认设置,DllDirectory默认的值的数据 是%SystemRoot%/System32。
代码:
Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Control/Session Manager/KnownDLLs]
"usp10"="usp10.dll"
"DllDirectory"=hex(2):25,00,53,00,79,00,73,00,74,00,65,00,6d,00,52,00,6f,00,6f,/ 00,74,00,25,00,5c,00,73,00,79,00,73,00,74,00,65,00,6d,00,33,00,32,00,00,00
新建一个记事本文档,输入上面的代码,保存reg格式,导入文件就ok了,重新启动电脑,这样病毒就不会通过其他的可执行文件感染了