假如 你对计算机安全有所明白 ,那么各种各样的注册表启动项应该会有所明白 ,即日 我会细述一个很著名的启动项:AppInit_Dlls键值。
AppInit_Dlls键值位于注册表 HKLM\Microsoft\Windows NT\CurrentVersion\Windows下面,相对于其他的注册表启动项来说,这个键值的特殊之处在于任何运用 到User32.dll 的EXE、DLL、OCX等类型的PE文件都会读取这个地点 ,并且根据约定的规范将这个键值下指向的DLL文件实行 加载,加载的方式是调用 LoadLibrary。
验证要领 有许多 ,最基本 想到的就是运用 调试器,在LoadLibrary调用的时刻 下断点,你会发觉 User32.DLL读取了这个键值并且运用 了LoadLibrary去调用这个键值指向的DLL文件。一个更好的要领 就是看看 KB197571 的推选 了。
AppInit_Dlls的键值是一个特别 危险的键值,从某种程度上来说,这是一个Windows最基本 被人使用 的漏洞,因为只要有任何的恶意软件在这里实行 了修改,那么就意味着任何运用 到User32.DLL的进程都会被AppInit_DLLs指向的DLL所注入。因为进程内部的DLL是共享整个进程空间的,因此意味着进程里面的DLL是能够 控制整个进程的行为的。由于User32.DLL是一个特别 特别 通用的DLL,它提供了大多数Win32用户界面、消息有关 的功能,只有极少数的程序不会运用 User32.DLL,因此一旦有恶意软件修改了AppInit_Dlls键值,那么整个系统都有可能处于特别 危险的状态。
众所周知,Windows服务程序的启动时机是能够 特别 早的,往往在用户登录之前就完成启动了,而这个时刻 最多见 的Run键值还不必须 被处理完,并且 Windows服务程序拥有相当高的权限(默认是Local System,能够 对系统里面所有的资源实行 操作),因此假如 一个恶意软件被加载到Windows服务里面,那么是会特别 危险的。前文提到,任何进程运用 了User32.DLL,都会对AppInit_Dlls键值指向的DLL实行 加载,假如 是一个Windows服务程序,也不例外!
由于AppInit_Dlls是一种系统全局性的Hook(system-wide hook),要规避此类的Hook的确很难处 ,虽然运用 驱动程序实行 保卫 能够规避此类疑问 ,但也不是非要运用 驱动程序实行 处理的。前文说过,只有当运用 到User32.DLL这个模块的时刻 才会触发读取AppInit_Dlls指向的DLL,假如 不运用 User32.DLL,那么AppInit_Dlls是不会被运用 到的。但是要让一个程序不运用 User32.DLL会变得特别 难处 (命令行窗口没有运用 User32.DLL),因为任何的窗口、消息都和这个模块有关 ,为了保证有良好的用户体验,100%的窗口程序都和这个模块有关 。从开发角度来说,最好的一种处理 方法 就是将程序功能逻辑和界面逻辑完全分离,功能逻辑模块负责功能,界面逻辑模块负责界面显示,2者之间采用IPC机制实行 交互,功能逻辑模块不依靠User32.DLL,,并且 作为独立进程实行 处理,这样就能够 规避AppInit_Dlls造成的Hook了。
tag: windowsxp,windowsxp操作系统知识,windowsxp使用教程,电脑培训学习 - 操作系统 - windowsxp