2016-04-06 7 views
2

Ich wurde im Moment beauftragt, einen Code zu schreiben, der bestimmt, ob eine DLL auf der Blacklist steht, und wenn ja, sollte sie nicht geladen werden dürfen. Google Chrome verfügt über diese Funktionalität. Daher habe ich den Google Chrome-Code überprüft und festgestellt, dass sie eine Reihe von Blacklist-DLLs verwalten, von denen sie sich schützen. Ich versuchte ein paar andere Dinge wie ich versuchte, die Import-Tabelle der blockierten DLL, Namen der DLL und viele andere Sachen zu ändern und dann versuchte es in Chrome zu injizieren, aber irgendwie Chrom ist eindeutig zu identifizieren, dass die DLL injiziert wird eine Blacklist Dll und verhindert, dass es passiert.Wie blockiere ich die DLL-Injektion mit einem Blacklist/indem ich eine DLL eindeutig identifiziere?

Hat jemand irgendwelche Ideen oder Hinweise, wie dies erreicht werden kann ??

Danke, Deepak :)

+1

Mögliche Duplikate von [Prevent Dll Injektion von einem Dll C++] (http://stackoverflow.com/questions/9450372/prevent-dll-injection-from-an-dll-c) – RJFalconer

Antwort

2

Ich würde davon ausgehen, dass sie eine weiße Liste, sondern als eine schwarze Liste, halten die immer noch, warum Ihre Änderungen an Baugruppen sind haben die DLL zu laden, nicht verursachen.

Edit: Von Ihrem Kommentar ist dies in der Tat nicht der Fall! Es sieht aus wie sie eine schwarze Liste und tun einige arcane invocation von NtMapViewOfSection zu verhindern, dass die dll Last (das macht mich dankbar, dass ich nie verwenden Windows-API) halten:

 
#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); 

Anders als Chromium Ansatz Es gibt auch eine Reihe von Anwendungen von Drittanbietern, die das Laden von dynamischen Bibliotheken, z Arxan GuardIT.

.NET-Assemblies Sie auch strongly-signed mit einem privaten Schlüssel sein können, dann wird die Anwendung nur DLLs laden Unterzeichnet von diesem Schlüssel signiert.

+0

Nein, sie pflegen keine Whitelist . Ich habe das https://code.google.com/p/chromium/codesearch#chromium/src/chrome_elf/blacklist/blacklist.cc&l=24 überprüft. Sie können eine DLL auf der schwarzen Liste auch nach der Änderung identifizieren ... –

+0

So ein flüchtiger Blick auf Ihren eigenen Link zeigt, dass die Magie in dieser NtMapViewOfSection Windows-Funktion ist. Ich bin kein winapi-Entwickler, kann also nicht sagen, warum das funktioniert, aber das machen sie. Ich habe die relevanten Snippets hinzugefügt, um zu antworten, wenn Sie weiter graben wollen. – RJFalconer

Verwandte Themen