![]() |
dll-injection
Hallo Leute,
ich versuch momentan ne dll zu injecten wenn ich die mit der uall collection injecte startet die dll, wenn ich versuche die dll mit einer anderen Funktion zu injecten passiert nix. die hab ich probiert: ![]() ![]() Beide scheinen wohl zu injecten nur bei starten der dll gibts wohl irgendwie Probleme, ich vermute das Problem daher in der CreateRemoteThread bzw CreateRemoteThreadX. mfG FLaSH |
Re: dll-injection
Moin,
mit etwas mehr Informationen kann man dir vll. helfen... aber so ohne Code und wissen um was für eine DLL es dabei geht wird das leider nix... :-) |
Re: dll-injection
Hallo,
Zitat:
Grüsse Rainer |
Re: dll-injection
Also ich hab mir ne dll geschrieben die ich versuche zu injecten.
Die läst sich mit der uall collection prima injecten. -function InjectLibrary(dwProcessID: DWord; pLibraryName: PChar): Boolean; stdcall; ![]() wenn ich nun mit eine andere Prozedur versuche zu injecten dann startet die dll nicht
Delphi-Quellcode:
da scheint irgendwas zu fehlen , die funktion wird fehlerfrei durchgeführt
procedure InjectDll(PID: dword; DLL: pChar);
var BytesWritten, hProcess, hThread, TID: Cardinal; Parameters: pointer; pThreadStartRoutine: Pointer; begin hProcess := OpenProcess(PROCESS_ALL_ACCESS, False, PID); Parameters := VirtualAllocEx( hProcess, nil, Length(DLL), MEM_COMMIT, PAGE_READWRITE); WriteProcessMemory(hProcess,Parameters,Pointer(DLL),Length(DLL),BytesWritten); pThreadStartRoutine := GetProcAddress(GetModuleHandle('KERNEL32.DLL'), 'LoadLibraryA'); hThread := CreateRemoteThread(Process, nil, 0, pThreadStartRoutine, Parameters, 0, TID); CloseHandle(hProcess); end; zur dll ist ne einfach dialog dll:
Delphi-Quellcode:
library injectdll;
uses SysUtils, Dialogs, Classes,Windows; {$R *.RES} begin ShowMessage('blub'); end. |
Re: dll-injection
ich würde mal sagen, dass deiner DLL die Export-Declaration(en) fehlen.
|
Re: dll-injection
ja gut wenn ich die dll normal benutzen würde müste ich das machen aber zum injecten braucht man das wohl nicht
mit uallhook gehts ![]() |
Re: dll-injection
So hab noch mal bischen rumgeguckt also ich hab noch gesehen das man privilegien setzen kann,um in fremde Prozesse zu injecten.
gut das hab ich gemacht aber starten tut da immernoch nichts. Wird noch was benötigt damit ein Thread mit der Dll startet ? |
Re: dll-injection
Ich verstehe nicht?
Die uallcollection hast du doch samt Source oder nicht? Schau dort doch mal nach? |
Re: dll-injection
Ja, die uall collection ist mit Source , ich wollte aber eigentlich ne eigene funktion nehmen damit ich auch nachvollziehen kann wie das geht.
Nun hab ich 2 Delphi Seiten (leider nicht de) und ne Wiki Page(nur c++) gefunden die beschreiben wie man ne dll injection macht und die machen das kürzer/bischen anders als bei uall. Nur wie gesagt das will alles nicht richtig laufen :wall: |
Re: dll-injection
Eine DLL-Injizierung ist wirklich nicht schwer. Du musst lediglich den Zielprozess veranlassen,
die DLL zu laden. Mit der API CreateRemoteThread können wir einen Thread in einem Zielprozess starten. Du musst also einen Thread für LoadLibraryA erstellen. Den Pfad zur DLL Datei, welchen ja LoadLibraryA braucht, musst du als Parameter beim Aufruf von CreateRemoteThread übergeben. Du allozierst also einfach einen "zufälligen" Speicherbereich. In diesen speicherst du den Pfad zur DLL Datei. Den Zeiger zur Adresse des Speicherbereichs, sowie die Addresse zu LoadLibraryA (einfach mit GetProcAddress die Adresse holen) übergibst du dann an CreateRemoteThread.
Delphi-Quellcode:
1. Mit OpenProcess eine Verbindung zum Zielprozess erstellen.
CreateRemoteThread(
hProcess: Cardinal; //Handle zum Zielprozess lpThreadAttributes: Pointer; dwStackSize: Cardinal; lpStartAddress: Pointer; //Adresse von LoadLibraryA lpParameter: Pointer; //Adresse zum allozierten Speicherbereich dwCreationFlags: Cardinal; var lpThreadId: Cardinal );stdcall; 2. Einen Speicherbereich im Kontext des Zielprozesses allozieren. 3. In den Speicherbereich den Pfad zur DLL Datei mit WriteProcessMemory schreiben. 4. Per CreateRemoteThread einen Thread für LoadLibraryA erstellen. 5. Das Handle zum Zielprozess mit CloseHandle wieder schliessen. Ich hoffe, ich konnte dir helfen. Postskriptum: Falls du eine ausführlichere Beschreibung lesen willst: ![]() MfG: sk0r |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:38 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 by Thomas Breitkreuz