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

时间:2016-04-06 11:38:04

标签: c++ windows google-chrome dll dll-injection

我当前已被分配编写一段代码,用于确定是否将dll列入黑名单,如果是,则不应允许加载。谷歌浏览器具有此功能,因此我检查了谷歌Chrome的代码,并看到他们维护了一系列黑名单的dll,他们从中保护自己。我尝试了一些其他的东西,比如我试图更改阻止的dll的导入表,dll的名称和许多其他东西,然后尝试将其注入chrome,但不知何故chrome能够唯一地识别被注入的dll是黑名单dll和防止它发生。

有没有人对如何实现这一点有任何想法或指示?

谢谢, 迪帕克:)

1 个答案:

答案 0 :(得分:2)

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

编辑:从你的评论来看,事实并非如此! 看起来他们维护一个黑名单,并做一些arcane invocation的NtMapViewOfSection来防止dll加载(这让我感激我从来没有使用过Windows API):

#if defined(_WIN64)
// Interception of NtMapViewOfSection within the current process.
// It should never be called directly. This function provides the means to
// detect dlls being loaded, so we can patch them if needed.
SANDBOX_INTERCEPT NTSTATUS WINAPI BlNtMapViewOfSection64(
    HANDLE section, HANDLE process, PVOID *base, ULONG_PTR zero_bits,
    SIZE_T commit_size, PLARGE_INTEGER offset, PSIZE_T view_size,
    SECTION_INHERIT inherit, ULONG allocation_type, ULONG protect);
#endif
// Replace the default NtMapViewOfSection with our patched version.
#if defined(_WIN64)
  NTSTATUS ret = thunk->Setup(::GetModuleHandle(sandbox::kNtdllName),
                              reinterpret_cast(&__ImageBase),
                              "NtMapViewOfSection",
                              NULL,
                              &blacklist::BlNtMapViewOfSection64,
                              thunk_storage,
                              sizeof(sandbox::ThunkData),
                              NULL);

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

.Net程序集您也可以strongly-signed使用私钥,然后应用程序将只加载由此密钥签名的dll签名。