![]() |
Re: DLL-Injection mit Freelibrary
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:
Delphi-Quellcode:
Die Injizierung hat vorher problemlos funktioniert.
th := createremotethread(hproc, Nil, 0, getprocaddress(getmodulehandle('kernel32.dll'), 'FreeLibrary'), Pointer(result), 0, hremthread);
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:
Bringt aber leider alles nichts - Notepad schmiert weiterhin ab :(
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. |
Re: DLL-Injection mit Freelibrary
Habe ergänzend noch herausgefunden, das alles lecker ist, wenn ich darauf verzichte, die WndProc von Notepad umzubiegen:
Delphi-Quellcode:
Bringt mich persönlich nicht weiter, aber vielleicht denjenigen, der mir bei diesem Problem helfen kann.//pWndProc := Pointer(GetWindowLong(oNotepad, GWL_WNDPROC)); //setWindowLong(oNotepad, GWL_WNDPROC, LongInt(@NewWndProc)); |
Re: DLL-Injection mit Freelibrary
Warum erzeugst du für jeden Piep einen neuen Thread? Beim Zurücksetzen der WndProc musst du LongInt(pWndProc) angeben.
|
Re: DLL-Injection mit Freelibrary
Zitat:
Zitat:
Dachte, es liegt vielleicht daran, dass es nur innerhalb von Threads funktioniert. Ein Einfacher Aufruf von
Delphi-Quellcode:
tut's auch.
DLL_PROCESS_DETACH: DestroyIt;
Fazit: es funktioniert - danke Dir :thumb: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:11 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz