windows的各个进程的地址空间是相互隔离的,所以一个进程代码是无法到另一个进程的地址空间去运行的.但是通过在进程中安装全局钩子的方法,钩子函数所在的DLL就有可能被操作系统加载到其它进程的地址空间中去,进而实现了DLL注入.实现了DLL注入之后,这个DLL的代码就可以在另一个进程的地址空间里做任何事.
下面简单介绍一下利用钩子注入DLL的步骤
1.调用SetWindowsHookEx安装系统范围内的钩子.
2.将钩子函数的实现写在DLL里
这样,其它接收与这个钩子相关消息的进程就会自动加载这个钩子函数所在的DLL,从而实现了DLL注入.
防范的方法简单的有2:
1.不让钩子生效,那么DLL也就不会注入了.所以可以在程序里安装一个类型相同的局部钩子,由于局部钩子先执行,所以可以将消息不继续传递给下一个钩子.
2.通过HOOK API的方法禁止LoadLibrary的调用.(这个方法副作用太多,不太现实)