Hallo,
habe zu der Routine aus Beitrag #20 mal eine Frage.
Und zwar habe ich diese Routine so bei mir implementiert.
Allerdings schmiert meine Testanwendung (Notepad) beim Aufruf der folgenden Codezeile ab:
th := createremotethread(hproc, Nil, 0, getprocaddress(getmodulehandle('kernel32.dll'), 'FreeLibrary'), Pointer(result), 0, hremthread);
Die Injizierung hat vorher problemlos funktioniert.
Muss ich in der
DLL noch irgendetwas implementieren?
Habe schon folgendes probiert:
Delphi-Quellcode:
Procedure DllMain(Reason: Integer);
Var
hThread: Cardinal;
Begin
Case Reason Of
DLL_PROCESS_ATTACH: CreateThread(Nil, 0, TFNThreadStartRoutine(@CreateIt), Nil, 0, hThread);
DLL_THREAD_ATTACH: ;
DLL_THREAD_DETACH: ;
DLL_PROCESS_DETACH: ;
End;
End;
[...]
Begin
DllProc := @DllMain;
DllProc(DLL_PROCESS_ATTACH);
End.
Delphi-Quellcode:
Procedure DllMain(Reason: Integer);
Var
hThread: Cardinal;
Begin
Case Reason Of
DLL_PROCESS_ATTACH: CreateThread(Nil, 0, TFNThreadStartRoutine(@CreateIt), Nil, 0, hThread);
DLL_THREAD_ATTACH: ;
DLL_THREAD_DETACH: ;
DLL_PROCESS_DETACH: CreateThread(Nil, 0, TFNThreadStartRoutine(@DestroyIt), Nil, 0, hThread);
End;
End;
Procedure DestroyIt;
Begin
//Alte WndProc wieder zurücksetzen
setWindowLong(xNotepad, GWL_WNDPROC, LongInt(@pWndProc));
End;
[...]
Begin
DllProc := @DllMain;
DllProc(DLL_PROCESS_ATTACH);
End.
Delphi-Quellcode:
Procedure DllMain(Reason: Integer);
Var
hThread: Cardinal;
Begin
Case Reason Of
DLL_PROCESS_ATTACH: CreateThread(Nil, 0, TFNThreadStartRoutine(@CreateIt), Nil, 0, hThread);
DLL_THREAD_ATTACH: ;
DLL_THREAD_DETACH: ;
DLL_PROCESS_DETACH: CreateThread(Nil, 0, TFNThreadStartRoutine(@DestroyIt), Nil, 0, hThread);
End;
End;
Procedure DestroyIt;
Begin
//Alte WndProc wieder zurücksetzen
setWindowLong(xNotepad, GWL_WNDPROC, LongInt(@pWndProc));
FreeLibrary(HInstance);
End;
[...]
Begin
DllProc := @DllMain;
DllProc(DLL_PROCESS_ATTACH);
End.
Bringt aber leider alles nichts - Notepad schmiert weiterhin ab