Prozesse aus Speicherpuffern erstellen
In diesem Beitrag untersuchen wir eine Technik, um Prozesse direkt aus Speicherpuffern zu erzeugen, ohne dass dies erforderlich ist Dateispeicherung. Dies können nützliche Szenarien sein, die Code-Injektion oder sicheres Patchen beinhalten, wie in der bereitgestellten Hintergrundgeschichte.
Die technische Aufschlüsselung
Windows stellt die CreateProcess-API mit dem CREATE_SUSPENDED-Flag bereit. Dadurch können Prozesse angehalten bleiben, bis die ResumeThread-Funktion aufgerufen wird. Dieses Fenster bietet die Möglichkeit, den Prozessspeicher und den Kontext vor der Ausführung zu manipulieren.
-
Prozess anhalten und überprüfen: Unterbrechen Sie den Prozess mit CreateProcess(CREATE_SUSPENDED) und rufen Sie den Kontext des angehaltenen Threads mit ab GetThreadContext.
-
Basisadresse identifizieren: Das EBX-Register enthält einen Zeiger auf die Process Enviroment Block (PBE)-Struktur. Die ImageBaseAddress befindet sich bei Offset 8 innerhalb der PBE.
-
Bereiten Sie die In-Memory-EXE-Datei vor: Wenn die Basisadressen des angehaltenen Prozesses und der In-Memory-EXE-Datei übereinstimmen und die In-Memory-EXE-Datei übereinstimmen EXE kleiner oder gleich groß ist, schreiben Sie es mit WriteProcessMemory direkt in den Speicher des angehaltenen Prozesses.
-
Magic Required: Wenn die Bedingungen in Schritt 3 nicht erfüllt sind, heben Sie die Zuordnung des Originalbilds auf ( ZwUnmapViewOfSection), weisen Sie Speicher mit VirtualAllocEx zu und schreiben Sie die speicherinterne EXE-Datei mit WriteProcessMemory.
-
PEB und Thread-Kontext patchen: Aktualisieren Sie die ImageBaseAddress des angehaltenen Prozesses mit der Basisadresse der speicherinternen EXE-Datei , patchen Sie die EntryPoint-Adresse des Thread-Kontexts und speichern Sie den geänderten Kontext mit SetThreadContext.
-
Ausführung fortsetzen: Setzen Sie den angehaltenen Prozess mit ResumeThread fort, um die In-Memory-EXE-Datei auszuführen.
Fazit
Durch Befolgen dieser Schritte ist es möglich, Prozesse aus Speicherpuffern zu erstellen, was Flexibilität bei der Codeinjektion und sicheren Patching-Szenarien bietet.
Das obige ist der detaillierte Inhalt vonWie können Prozesse direkt aus Speicherpuffern ohne Dateispeicherung erstellt werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!
Stellungnahme:Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn