如何使用Blackllist/通过唯一标识dll来阻止dll注入
how to block dll injection using a Blackllist/by identifying a dll uniquely?
我目前被指派编写一段代码,该代码将确定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。
相关文章:
- 读取进程内存多级指针(DLL 注入)
- DLL 注入不断失败,出现不一致的错误
- DLL 注入记事本
- 当我将 DLL 注入现有进程时,DLLMain 不执行任何操作
- 如何获取 dll 注入到的进程的名称
- Dll 注入 - LoadLibraryA 失败
- 通过 dll 注入在主线程中执行代码
- 手动 DLL 注入
- DLL注入,C ++,DLL没有SVChost权限的原因
- DLL 注入编译 "unresolved external symbol" Visual Studio C++
- C++ - DLL 注入器中未解析的外部
- C++Dll注入——Hello world Dll只有在注入到注入它的相同.exe中时才能工作
- DLL注入仅在没有从视觉工作室开始时起作用
- C++ - DLL 注入和调用函数
- 如何将DLL注入Delphi程序
- DLL 注入:DrawText 和 TextOut 不会返回所有文本
- Dll 注入 - 在另一个进程中编写本机代码
- GetFullPathNameA的Dll注入不起作用
- 如何使用Blackllist/通过唯一标识dll来阻止dll注入
- 如何将dll注入另一个进程