在Windows软件中,绝大多数软件都是exe文件,然后有很多动态链接库dll构成。所以很多黑客就可以通过dll注入的形式入侵软件,达到入侵甚至盗取密码的功能,接下来本人介绍一种方法,可以防止非法dll注入的一种方法,学识有限,如有不足,敬请指教。

介绍的方法是通过hook系统的ldrLoadDll方法,然后判断dll的名称,防止恶意dll注入。

原理如下:

Inject Defense原理

BeginDefense:

1.定义一个BlackList 存放不允许载入的dll的集合

2.使用微软提供的第三方库Detour来获取windowsapi的地址

3.获取LdrLoadDll的地址 (LdrLoadDll即载入dll的函数:当有dll需要载入时,必须先调用LdrLoadDll方法)

4.使用DetourAttach函数去hook这个方法

5.在hook方法时候,判断进入的dll名称,如果dll名称与原先定的BlackList名称相同,则return none 即不让它执行WindowsAPI LdrLoadDll方法。 如果允许的话,则执行该方法。