katerkarlo
Grünschnabel
Hallo zusammen,
wie kann ich Programmcode, der sich bereits im Datenspeicher befindet, in einen Speicherbereich laden/kopieren, in dem dieser Code direkt ausgeführt wird?
Es geht um eine Art Kopierschutz, bei dem eine vorher künstlich verlängerte *.exe Datei von Platte in einen Puffer gelesen wird (bis zum Ende der "echten" *.exe).
Von diesem Puffer wird ein FileMapping im Speicher erzeugt, und ein Zeiger auf den Anfang des Mappings gesetzt.
Ich kann jetzt das Mapping bearbeiten, und dann z.B. eine saubere *.exe als neue Datei zurückschreiben, und diese ausführen.
Problem: Ich möchte die neue *.exe nicht zurückschreiben, sondern den Code im Mappingbereich direkt ausführen.
Ich habe (ganz grob) die bisherigen Schritte in Visual C++ unternommen:
CreateFile(hHandele, ...);
CreateFileMapping(...);
...
lpViewBuffer = ViewMapOfFile(...);
(LPVOID)lpViewBuffer zeigt auf den Anfang des Mappingbereichs, und soweit funktioniert alles.
Wie aber nun ausführen?
Hat jemand eine Ahnung wie sowas finktioniert?
Wäre sehr dankbar für kompetente Hilfe, da ich auch nach 2 tägiger Suche keine Lösung gefunden habe.
wie kann ich Programmcode, der sich bereits im Datenspeicher befindet, in einen Speicherbereich laden/kopieren, in dem dieser Code direkt ausgeführt wird?
Es geht um eine Art Kopierschutz, bei dem eine vorher künstlich verlängerte *.exe Datei von Platte in einen Puffer gelesen wird (bis zum Ende der "echten" *.exe).
Von diesem Puffer wird ein FileMapping im Speicher erzeugt, und ein Zeiger auf den Anfang des Mappings gesetzt.
Ich kann jetzt das Mapping bearbeiten, und dann z.B. eine saubere *.exe als neue Datei zurückschreiben, und diese ausführen.
Problem: Ich möchte die neue *.exe nicht zurückschreiben, sondern den Code im Mappingbereich direkt ausführen.
Ich habe (ganz grob) die bisherigen Schritte in Visual C++ unternommen:
CreateFile(hHandele, ...);
CreateFileMapping(...);
...
lpViewBuffer = ViewMapOfFile(...);
(LPVOID)lpViewBuffer zeigt auf den Anfang des Mappingbereichs, und soweit funktioniert alles.
Wie aber nun ausführen?
Hat jemand eine Ahnung wie sowas finktioniert?
Wäre sehr dankbar für kompetente Hilfe, da ich auch nach 2 tägiger Suche keine Lösung gefunden habe.