如何使用Blackllist阻止dll注入/通过唯一标识dll?

我目前被分配写一段代码,将确定一个DLL是否被列入黑名单,如果是的话,它不应该被允许加载。 谷歌浏览器有这个function,所以我检查了谷歌浏览器的代码,并看到他们维护一系列黑名单的dll,他们从中保护自己。 我尝试了一些其他的东西,我试图改变被阻止的DLL的导入表,名称的DLL和许多其他的东西,然后试图注入铬,但不知何故铬能够唯一确定被注入的DLL是一个黑名单的DLL和防止它发生。

有没有人有任何想法或指针,如何可以实现?

谢谢,迪帕克:)

我会假设他们保持白名单,而不是一个黑名单,这就是为什么你修改程序集仍然不会导致DLL加载。

编辑:从你的评论,这其实并非如此! 它看起来像他们维护一个黑名单,并做一些神秘的NtMapViewOfSection 调用 ,以防止DLL加载(这让我感谢,我永远不必使用Windows API):

 #if定义(_WIN64)
 //在当前进程中截取NtMapViewOfSection。
 //不应该直接调用它。 这个功能提供了手段
 //检测正在加载的dll,所以如果需要的话我们可以修补它们。
 SANDBOX_INTERCEPT NTSTATUS WINAPI BlNtMapViewOfSection64(
     HANDLE部分,HANDLE进程,PVOID * base,ULONG_PTR zero_bits,
     SIZE_T commit_size,PLARGE_INTEGER偏移,PSIZE_T view_size,
     SECTION_INHERIT继承,ULONG allocation_type,ULONG保护);
 #万一
 //用我们的补丁版本替换默认的NtMapViewOfSection。
 #if定义(_WIN64)
   NTSTATUS ret = thunk-> Setup(:: GetmoduleeHandle(sandbox :: kNtdllName),
                              的reinterpret_cast(&__基址),
                               “NtMapViewOfSection”
                              空值,
                               &黑名单:: BlNtMapViewOfSection64,
                               thunk_storage,
                              的sizeof(沙箱:: ThunkData)
                              空值);

除了Chromium的方法外,还有一些第三方应用程序可以加强动态库的加载,例如Arxan GuardIT 。

.Net程序集也可以使用私钥进行强力签名 ,然后应用程序将仅加载由此密钥签名的dll签名。