![]() |
Re: DLL-Injection mit Freelibrary
Mit der uallCollection kannst du die DLL auch injektieren.
|
Re: DLL-Injection mit Freelibrary
Ich hab das Problem selbst gelöst und zwar hatte ich statt dem Threadhandle die Threadid genommen, naja Dummheit... :P Allerdings kann ich die DLL, welche injiziert wurde, trotzdewm nicht löschen. Und das geht auch bei dem spanischen Quelltext nicht. Erst wenn ich die Anwenung, in welche die DLL injiziert wurde, beende, kann ich sie wieder löschen... Ich vermute, dass Freelibrary nicht richtig ausgeführt wird, da bei meiner Button2-Procedure immer wieder die DLL gefunden wird, ein Thread wird jedoch "erstellt".
|
Re: DLL-Injection mit Freelibrary
Hab noch nen kleinen Fehler bei mir entdeckt: Man darf die Adresse nicht mit WriteProcessMemory usw. in den Prozess reinschreiben, sondern dies reicht aus:
Delphi-Quellcode:
Dadurch kommt bei mir eine Frage auf! Wieso muss ich das Handle der DLL nicht in den Prozess hineinschreiben, wie den Namen der DLL beim Starten? Und warum funktioniert die Methode mit WriteProcessMemoy usw. nicht? Für mich ist dies irgendwie unlogisch...
createremotethread(hproc,nil,0,getprocaddress(getmodulehandle('kernel32.dll'),'FreeLibrary'),Pointer(hdll),0,TID);
|
Re: DLL-Injection mit Freelibrary
Ganz einfach: Das Pointer-Argument von CreateRemoteThread wird direkt an FreeLibrary übergeben. Und FreeLibrary kann mit einem Zeiger auf das Handle nichts anfangen, deshalb muss das Handle direkt, zum Zeiger gecastet, übergeben werden.
|
Re: DLL-Injection mit Freelibrary
Wieso kann man der LoadlibraryA-Function den Stringwert nicht direkt übergeben, sondern muss ihn über WriteProcessMemory in den anderen Prozess schreiben. Ich glaube irgendeine Funtionalität habe ich noch nicht verstanden oder falsch "interpretiert". :?: :?: :?:
|
Re: DLL-Injection mit Freelibrary
LoadLibrary erwartet als Parameter einen Zeiger auf einen Null-terminierten String, FreeLibrary erwartet einen HModule-Parameter.
|
Re: DLL-Injection mit Freelibrary
Was waren nochmal die legitimen Anwendungsgebiete für DLL-Injection? :gruebel:
|
Re: DLL-Injection mit Freelibrary
LÖegitime Anwendungen wären z.B. fehlerhafte 16-Bit-Anwenungen wieder zu,m Laufen zu bringen oder der Compiler benutzt auch DLL-Injection. Ich brauch es lediglich zum Verbessern des Verständnis für Programmierung. :wink:
|
Re: DLL-Injection mit Freelibrary
Zitat:
|
Re: DLL-Injection mit Freelibrary
wenns auch schon sehr alt ist:
Delphi-Quellcode:
function InjectIntoProcess(lpProcessID: Cardinal; lpDllname: String): cardinal;
var hProc: Cardinal; hRemThread:cardinal; addr:pointer; cWPM: Cardinal; th: integer; begin result := 0; SetLastError(ERROR_SUCCESS); hProc := OpenProcess(PROCESS_ALL_ACCESS, false, lpProcessID); addr:=VirtualAllocEx(hProc, nil, length(lpDllname)+1, MEM_COMMIT, PAGE_EXECUTE_READWRITE); WriteProcessMemory(hProc, addr, PChar(lpDllName), length(lpDllName)+1, cWPM); th := CreateRemoteThread(hProc, nil, 0,GetProcaddress(getmodulehandle('kernel32.dll'),'LoadLibraryA') , addr, 0, hRemThread); if (th > 0) then begin // warten bis thread beendet (dll im fremden prozess geladen) WaitForSingleObject(th,INFINITE); // den exitcode bekommen = EAX register von LLA = baseadresse der dll = dllhandle GetExitCodeThread(th,result); closehandle(th); // dll wieder entladen th := createremotethread(hproc,nil,0,getprocaddress(getmodulehandle('kernel32.dll'),'FreeLibrary'),Pointer(result),0,hremthread); if (th > 0) then closehandle(th); end; CloseHandle(hProc); end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:37 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