2016-04-06 3 views
2

私は現在、dllがブラックリストに載っているかどうかを判断するコードを書くように割り当てられています。もしそうなら、それは読み込まれるべきではありません。 Google Chromeにはこの機能があるので、Google Chromeのコードをチェックして、彼らが自分自身を守るブラックリストのdllの配列を維持しているのを見た。私はブロックされたdllのインポートテーブル、dllの名前など多くのものを変更しようとしたが、それをクロムに注入しようとしたようないくつかのことを試したが、何とかクロムは注入されたdllがブラックリストに載ったdllであることを一意に識別できる。それが起こるのを防ぐ。dllを一意に識別することによって、Blackllistを使用してdll注入をブロックする方法はありますか?

どのようにこれを達成するためのアイデアやポインターがありますか?

おかげで、 ディーパック:)

+1

[Dll C++からのDll注入を防ぐ](http://stackoverflow.com/questions/9450372/prevent-dll-injection-from-an-dll-c) – RJFalconer

答えて

2

私はむしろ、アセンブリへのご変更はまだDLLをロードすることはありませんでした理由は、ブラックリスト、より、彼らはホワイトリストを維持することを前提としています。

編集:あなたのコメントから、これは事実ではありません! 彼らはブラックリストを維持し、(私は、WindowsのAPIを使用する必要はありません、私は感謝してます)、DLLの負荷を防ぐためにNtMapViewOfSectionの一部arcane invocationを行うように見えます:

クロムのアプローチ以外
 
#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のみをロードします。

+0

いいえ、ホワイトリストを保持していません。 https://code.google.com/p/chromium/codesearch#chromium/src/chrome_elf/blacklist/blacklist.cc&l=24を確認しました。彼らは何らかの形で修正後もブラックリストに載ったdllを特定することができます... –

+0

あなた自身のリンクを大まかに見ると、このNtMapViewOfSection Windows関数に魔法があることがわかります。私はwinapiの開発者ではないので、これがなぜ機能するのかについてはコメントできませんが、それは彼らがやっていることです。さらに掘り下げたい場合は、関連するスニペットを追加しました。 – RJFalconer

関連する問題