CreateRemoteThread - DLL Injection
Liste der Anhänge anzeigen (Anzahl: 1)
CreateRemoteThread - DLL Injection
Anbei eine Demo zur API-Funktion CreateRemoteThread bzw. wie man mittels einer DLL Code von einer anderen Anwendung ausführen lässt. 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:28 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz