Heim > Backend-Entwicklung > C++ > Hauptteil

Wie können Prozesse direkt aus Speicherpuffern ohne Dateispeicherung erstellt werden?

DDD
Freigeben: 2024-11-02 00:12:02
Original
648 Leute haben es durchsucht

How Can Processes Be Created Directly From Memory Buffers Without File Storage?

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.

  1. Prozess anhalten und überprüfen: Unterbrechen Sie den Prozess mit CreateProcess(CREATE_SUSPENDED) und rufen Sie den Kontext des angehaltenen Threads mit ab GetThreadContext.
  2. 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.
  3. 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.
  4. 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.
  5. 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.
  6. 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!

Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!