Führen Sie eine In-Memory-EXE-Datei mit CreateProcess aus
Einführung:
Erstellen eines Prozesses aus Ein Speicherpuffer in CreateProcess stellt eine einzigartige Herausforderung dar. In diesem Artikel wird eine Methode untersucht, mit der Sie dies tun können, ohne dass die ausführbare Datei vor der Ausführung in eine Datei geschrieben werden muss.
Hintergrund:
In der Spielebranche Das Verteilen unverschlüsselter ausführbarer Dateien kann zur DRM-Umgehung führen. Um dieses Problem auszuräumen, senden Spieleentwickler oft verschlüsselte EXE-Dateien an Distributoren, die sie mit proprietärem DRM verpacken, bevor sie sie an Spieler weitergeben.
Erstellen einer Patching-Lösung:
Wenn a Tritt in der EXE-Datei ein Absturz auf, kann es Tage oder Wochen dauern, einen Patch über DRM-Kanäle zu verteilen. Um den Patch-Prozess zu beschleunigen, können Entwickler die ursprüngliche EXE-Datei in eine verschlüsselte Datendatei einbetten. Dies ermöglicht ein einfaches Patchen ohne Auswirkungen auf das DRM.
Implementierung:
Die Lösung besteht darin, einen Prozess aus der In-Memory-EXE-Datei mithilfe von CreateProcess mit CREATE_SUSPENDED zu erstellen Flagge. Dieses Flag gibt Zeit, den angehaltenen Prozess vor der Ausführung zu ändern.
Prozessinformationen abrufen:
Indem Sie den Thread-Kontext des angehaltenen Prozesses abrufen, können Sie auf die Prozessumgebung zugreifen Blockstruktur (PBE). Die PBE enthält die Basisadresse des Bildes, die für die weitere Bearbeitung von entscheidender Bedeutung ist.
Laden der In-Memory-EXE-Datei:
Sobald Sie die Basisadresse haben, können Sie kann die In-Memory-EXE-Datei mithilfe von WriteProcessMemory in den Speicherbereich des angehaltenen Prozesses laden. Je nach Größe und Ausrichtungsunterschieden kann es jedoch erforderlich sein, die Ausrichtung anzupassen oder zusätzlichen Speicher zuzuweisen.
Patching und Ausführung:
Um den Vorgang abzuschließen, patchen Sie die Basis Adresse der speicherinternen EXE-Datei in die PBE des angehaltenen Prozesses und aktualisieren Sie den Thread-Kontext mit dem neuen Einstiegspunkt. Verwenden Sie abschließend ResumeThread, um die Ausführung des geänderten Prozesses aus der speicherinternen EXE-Datei fortzusetzen.
Das obige ist der detaillierte Inhalt vonWie kann ich mit CreateProcess eine In-Memory-EXE-Datei ausführen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!