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

how to block dll injection using a Blackllist/by identifying a dll uniquely?

本文关键字:dll 注入 标识 唯一 Blackllist 何使用      更新时间:2023-10-16

我目前被指派编写一段代码,该代码将确定dll是否被列入黑名单,如果是,则不应允许加载。谷歌Chrome有这个功能,所以我检查了谷歌Chrome的代码,发现他们维护了一系列被列入黑名单的dll,以保护自己。我尝试了其他一些事情,比如我试图更改被阻止的dll的导入表、dll的名称和许多其他东西,然后试图将其注入chrome,但不知何故,chrome能够唯一地识别被注入的dll是列入黑名单的dll,并防止其发生。

有人对如何实现这一目标有什么想法或建议吗??

谢谢,Deepak:)

我认为他们维护的是白名单,而不是黑名单,这就是为什么你对程序集的修改仍然没有导致dll加载的原因。

编辑:从你的评论来看,事实并非如此!看起来他们维护了一个黑名单,并对NtMapViewOfSection进行了一些神秘的调用,以防止dll加载(这让我很庆幸我从未使用过Windows API):

#如果已定义(_WIN64)//在当前进程中截获NtMapViewOfSection。//永远不应该直接调用它。此功能提供了//检测正在加载的dll,以便在需要时对其进行修补。SANDBOX_INTERCEPT NTSTATUS WINAPI BlNtMapViewOfSection64(HANDLE部分,HANDLE过程,PVOID*基础,ULONG_PTR零比特,SIZE_T commit_SIZE,PLARGE_INTEGER偏移量,PSIZE_T视图_SIZE,SECTION_INHERIT INHERIT、ULONG allocation_type、ULONG-protect);#endif
//用我们的修补版本替换默认的NtMapViewOfSection。#如果已定义(_WIN64)NTSTATUS ret=thunk->Setup(:GetModuleHandle(沙盒:kNtdllName),interpret_cast(&__ImageBase),"NtMapViewOfSection",NULL,&黑名单::BlNtMapViewOfSection64,thunk_ storage,sizeof(沙盒::ThunkData),NULL);

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

.Net程序集。如果您也可以使用私钥进行强签名,则应用程序将仅加载由该密钥签名的dll。