2016-11-09 3 views
0

Ich verwende SetWindowsHookEx, um eine DLL in einen anderen Prozess zu injizieren. Wenn das Injektorprogramm jedoch endet, wird die DLL aus dem anderen Prozess entladen. Gibt es überhaupt für mich, das Entladen zu stoppen? Grundsätzlich möchte ich, dass die DLL permanent persistiert, unabhängig davon, ob das Injektorprogramm noch läuft. Wenn ich in der Lage bin, die Anzahl der DLL-Referenzen innerhalb der DLL zu erhöhen, könnte das funktionieren. Aber ich habe keinen Weg gefunden.SetWindowsHookEx DLL entladen

+1

für erhöhen die dll Referenzzähler arbeiten - 'LdrAddRefDll (0, & __ Imagebase);' – RbMm

+0

Dank. Ich stelle Ihren Vorschlag in Visual Studio, aber diese Namen sind nicht bekannt. Gibt es eine Include-Datei, die ich verwenden muss? – user118708

+0

deklarieren Sie es selbst und verwenden Sie ntdll.lib – RbMm

Antwort

2

existieren 2 Weg 1.) am effektivsten - verwenden Sie LdrAddRefDll - dies tun genau das, was Sie in kürzester Zeit brauchen. Sie müssen ntdll.lib (oder ntdllp.lib) zum Verknüpfen verwenden.

LdrAddRefDll(0, (HMODULE)&__ImageBase); 

2) nicht schön und effektiv, aber

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

Danke. Ich war in der Mitte des Schreibens 2). Jetzt werde ich einfach kopieren und einfügen :). Was für 1), das sieht kompliziert aus. Ich werde es verwenden, wenn 2) nicht funktioniert. – user118708

+0

sowohl 1 als auch 2 funktionieren natürlich. beide fügen einen Verweis auf dll hinzu, die sie vor dem Entladen halten - brauchen jetzt zusätzliche FreeLibrary. aber 1 - mach das direkt. 2 übersetze zuerst & __ ImageBase, dann übersetze den Namen in __ImageBase und füge schließlich die Referenz – RbMm

+0

Erfolg hinzu. Ich habe 2 verwendet, weil ich die Linker-Einstellungen nicht ändern musste - ich weiß nicht einmal, wo das ist. DLL_PROCESS_ATTACH hat mir das DLL-Handle gegeben, das ich in GetModuleFileName füttere. Das Modul wurde aus einem neuen Thread im Falle von Dead Locks in DllMain geladen. – user118708