我會認爲他們保持一個白名單,而不是黑名單,這就是爲什麼你修改組件仍沒有引起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);
比鉻的做法其他還有一些第三方應用程序存在以加強動態庫的加載,例如Arxan GuardIT。
.Net程序集也可以用私鑰加密strongly-signed,那麼應用程序將只加載由此密鑰簽名的dll簽名。
可能的重複[防止DLL注入從DLL C++](http://stackoverflow.com/questions/9450372/prevent-dll-injection-from-an-dll-c) – RJFalconer