2016-11-09 1 views
0

私はSetWindowsHookExを使用して、dllを別のプロセスに注入しています。しかし、インジェクタプログラムが終了すると、dllは他のプロセスからアンロードされます。とにかく私が荷降ろしをやめることはありますか?基本的には、インジェクタプログラムがまだ動作しているかどうかにかかわらず、dllを永続的に保持します。 DLL内からdll参照カウントを増やすことができれば、それはうまくいく可能性があります。しかし、私は方法を見つけていない。SetWindowsHookEx DLLのアンロード

+1

を働く - 'LdrAddRefDll(0、&__ IMAGEBASE);' – RbMm

+0

感謝。私はあなたの提案をVisual Studioに書いていますが、これらの名前はわかりません。インクルードファイルはありますか? – user118708

+0

自分で宣言し、ntdll.libを使用してください – RbMm

答えて

2

が存在する2方法 1.)最も効果的 - 使用するLdrAddRefDll - これはあなたが必要とするものを正確には最短で行います。リンクにはntdll.lib(またはntdllp.lib)を使用する必要があります。素敵で有効ではない

LdrAddRefDll(0, (HMODULE)&__ImageBase); 

2)が、DLLの参照カウント増やすため

WCHAR sz[MAX_PATH]; 
if (GetModuleFileName((HMODULE)&__ImageBase, sz, RTL_NUMBER_OF(sz))) 
{ 
    LoadLibrary(sz); 
} 
+0

ありがとうございます。私は書いている途中でした2)。今私はちょうどコピーし、貼り付けます:)。 1)については、それは複雑に見えます。私は2)が動作しない場合、私はそれを使用します。 – user118708

+0

もちろん、1と2の両方が有効です。両方とも、アンロードからそれを保持するdllへの参照を追加 - 今すぐ余分なFreeLibraryが必要です。しかし、1 - これを直接行います。 2最初に&__ ImageBaseを名前に変換し、名前を同じ__ImageBaseに変換し、最後に参照を追加します – RbMm

+0

成功。私はリンカの設定を変更する必要がなかったので2を使用しました - 私はそれがどこであるか分かりません。 DLL_PROCESS_ATTACHは私にGetModuleFileNameにフィードするdllハンドルを与えました。モジュールは、DllMainのデッドロックの場合に新しいスレッドからロードされました。 – user118708

関連する問題