Dll劫持原理
由于输入表中只包含DLL名而没有它的路径名,因此加载程序必须在磁盘上搜索DLL文件。
首先会尝试从当前程序所在的目录加载DLL,如果没找到,则在Windows系统目录中查找,最后是在环境变量中列出的各个目录下查找。
利用这个特点,先伪造一个系统同名的DLL,提供同样的输出表,每个输出函数转向真正的系统DLL。程序调用系统DLL时会先调用当前目录下伪造的DLL,完成相关功能后,再跳到系统DLL同名函数里执行。这个过程用个形象的词来描述就是系统DLL被劫持(hijack)了。
——主要会遇到针对当前目录下类型的Dll劫持。
dll的路径搜索顺序
- 应用程序加载的目录
- 系统目录(使用GetSystemDirectory获取该路径)
- 16位系统目录
- Windows目录(使用GetWindowsDirectory获取该路径)
- 当前目录
- PATH环境变量中列出的目录
默认情况下HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\SafeDllSearchMode处于开启状态;如果手动设置为 0,关闭该安全选项,搜索顺序为:在以上顺序基础上,将5.当前目录修改至2.系统目录的位置,其他顺移。
未使用安全搜索设置时,第二加载项就是当前目录。