![]() |
CreateRemoteThread - DLL Injection
Liste der Anhänge anzeigen (Anzahl: 1)
CreateRemoteThread - DLL Injection
Anbei eine Demo zur API-Funktion ![]() Das Beispiel nutzt dafür die notepad.exe und lässt von ihr eine Messagebox anzeigen, die den Pfad ausgibt, der den Code ausführt. Der relevante Code:
Delphi-Quellcode:
Der ganze Code kann in der Demo im Anhang nachvollzogen werden.
const
DLLFILENAME = 'MsgBox.dll'; var ProcessID : Integer; hProcess : THandle; DLLPath : string; pDLLPath : Pointer; BytesWritten : Cardinal; ThreadID : Cardinal; begin About; DLLPath := ExtractFilePath(ParamStr(0)) + '\' + DLLFILENAME; ProcessID := GetProcessID('notepad.exe'); if ProcessID <> 0 then begin hProcess := GetProcessHandleFromID(ProcessID); if hProcess <> 0 then begin // alloc memory in remote process pDLLPath := VirtualAllocEx(hProcess, nil, Length(DLLPath), MEM_COMMIT, PAGE_EXECUTE_READWRITE); if Assigned(pDLLPath) then begin // write DLL Path into the allocated memory if WriteProcessMemory(hProcess, pDLLPath, PChar(DLLPath), Length(DLLPath), BytesWritten) then begin // create remote thread and load library if CreateRemoteThread(hProcess, nil, 0, GetProcAddress(GetModuleHandle('kernel32.dll'), 'LoadLibraryA'), pDLLPath, 0, ThreadID) <> 0 then begin CloseHandle(hProcess); Writeln('DLL injected...'); end else Writeln(GetLastError); end else Writeln(GetLastError); end else Writeln(GetLastError); end else Writeln(GetLastError); end else Writeln(GetLastError); Readln; end. |
Re: CreateRemoteThread - DLL Injection
Liste der Anhänge anzeigen (Anzahl: 1)
Kleiner Hinweis: Wer bei AntiVir (wahrscheinlich auch bei anderen Scannern) eine hohe Heuristik eingestellt hat, wird beim Entpacken des Archives eine Virenmeldung erhalten. (Siehe Anhang)
|
Re: CreateRemoteThread - DLL Injection
Hm, hier hat der Virenscanner nicht angeschlagen. Aber wahrscheinlich weiß er, dass der liebe Luckie nichts böses Programmiert. ;)
|
Re: CreateRemoteThread - DLL Injection
Wie gesagt: Ich hab meine Heuristik auch hoch eingestellt und da meckert er. Verständlich, diese Art der Injection könnte ja auch ein Virus machen.
|
Re: CreateRemoteThread - DLL Injection
#1: Length(DLLPath)+1 bzw. besser DllPath+#0
#2: BytesWritten = Length(DLLPath) #3: PAGE_READ #4: GetProcessHandleFromID -> OpenProcess mit benötigten Rechten (nervig wenn man immer 100 Zusatzfunktionen braucht) #5: selbe gilt für FindProcess -> lieber beispiel mit GetWindowThreadProcessID (oder wenigsten verlinken) #6: CreateRemoteThread gibt ThreadHandle zurück -> schließen? #7: CloseHandle(hProcess) ausführen auch wenn irgendwas fehltschlägt, also in der IF wo handle <> 0 geprüft wird #8: WaitForSingleThread warten und ggf Base auslesen mittels GetExitCodeThread Wenig Code, aber viel was ich anders machen würde, jedenfalls falls es in die CodeLib kommt |
DP-Maintenance
Dieses Thema wurde von "Dax" von "Neuen Beitrag zur Code-Library hinzufügen" nach "Tutorials und Kurse" verschoben.
In dieser Form eher ein Mini-Tutorial |
Re: CreateRemoteThread - DLL Injection
#1: Length(DLLPath)+1 bzw. besser DllPath+#0
OK, gefixt. #2: BytesWritten = Length(DLLPath) Was meinst du damit? Sollte man das noch überprüfen oder wie? #3: PAGE_READ Wo soll das hin? #4: GetProcessHandleFromID -> OpenProcess mit benötigten Rechten (nervig wenn man immer 100 Zusatzfunktionen braucht) Siehe Code, das ist nur ein Wrapper, aber gut braucht man nicht. #5: selbe gilt für FindProcess -> lieber beispiel mit GetWindowThreadProcessID (oder wenigsten verlinken) Das ist schlecht, da man den Fenstertitel kennen muss und der kann sich ändern. Genau deswegen habe ich es nicht so gemacht. #6: CreateRemoteThread gibt ThreadHandle zurück -> schließen? :oops: #7: CloseHandle(hProcess) ausführen auch wenn irgendwas fehltschlägt, also in der IF wo handle <> 0 geprüft wird Gemacht. #8: WaitForSingleThread warten und ggf Base auslesen mittels GetExitCodeThread Gut könnte man noch machen, aber mein Thread gibt ja nichts zurück. Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:03 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