Exe aus Arbeitsspeicher starten

Liebes Forum!

Es passt zwar nicht so gut in dieses Forum, aber ich wusste nicht wohin ich es sonst schreiben sollte. Verschiebt mich bitte notfalls.

Also ich hab da so eine Idee. Ich habe irgendwo schon einmal gelesen, dass man z.B. in C++ Maschinencode einbinden kann, indem man ihn in einem string (char*) ablegt, einen funktionszeiger definiert und den dann auf diesen string zeigen lässt.
Jetzt würde ich gerne wissen, ob es eigentlich auch möglich ist, eine .exe datei als string in den arbeitsspeicher einzulesen und von dort aus auszuführen?

Wäre toll, wenn mir jemand etwas dazu sagen oder mir einen Link posten könnte.

mfg dixxi

Hallo,

Jetzt würde ich gerne wissen, ob es eigentlich auch möglich
ist, eine .exe datei als string in den arbeitsspeicher
einzulesen und von dort aus auszuführen?

Das ist sicher in irgend einer Form möglich, weil das Betriebssystem ja das gleiche macht - es lädt die Exe-Dateien, die es ausführt, ja vermutlich auch vor dem Ausführen in den Arbeitsspeicher.

Wie man das genau macht ist aber sicher vom Betriebssystem abhängig, falls du Windows benutzt könntest du vielleicht im msdn was finden.

Nur so interessehalber, wozu brauchst du das ganze?

Grüße,
Moritz

Hallo Moritz

Wie man das genau macht ist aber sicher vom Betriebssystem
abhängig, falls du Windows benutzt könntest du vielleicht im
msdn was finden.

Ja, ich benutze Windows. Guter Tipp, werde einmal nachsehen.

Nur so interessehalber, wozu brauchst du das ganze?

Ich habe mir fast gedacht, dass mich das jemand fragen wird. Die Idee kam davon, dass mir ein Freund erzählt hat, dass sie in der Schule gelernt hatten auf einfache Weise eine Zeichenfolge zu verschlüsseln. Irgendwie bin ich dan auf die Idee gekommen, man könnte doch eine Exe ebenfalls eifach byte für byte verschlüssln. Damit das aber dan auch sinnmacht und man sie wieder ausführen kann. Muss die verschlüsselte Datei von einem Programm entschlüsselt (vl. mit Passwort) und in den Arbeitsspeicher geladen werden. Jetzt müsste dieser Code nur noch ausgeführt werden. (Archieve wie rar. können auch exe aus dem archiev ausführen) Darum die Frage.

Jetzt bin ich auch noch auf etwas anderes gekommen. Wenn ich auf selbe weise, sagen wir eine Textdatei verschlüssle, ist es dan auch möglich diese ebenfalls entschlüsseln zu lassen und dan von einem weiteren Programm, sagen wir Notepad anzeigen zu lassen? Einfach ausgedrückt: Eine Datei nicht von der HD sondern aus dem RAM zu öffnen?

Würde mich über jede Antwort freuen!
mfg dixxi

Hallo.

Jetzt müsste dieser Code nur
noch ausgeführt werden. (Archieve wie rar. können auch exe aus
dem archiev ausführen) Darum die Frage.

Die ganzen Pack-Programme (WinRar und 7zip auf jeden Fall) führen die exe-Dateien aber nicht aus dem RAM aus, sondern entpacken die Datei in ein temporäres Verzeichnis und startet die exe von dort.

Sebastian.

Jetzt müsste dieser Code nur
noch ausgeführt werden. (Archieve wie rar. können auch exe aus
dem archiev ausführen) Darum die Frage.

Die ganzen Pack-Programme (WinRar und 7zip auf jeden Fall)
führen die exe-Dateien aber nicht aus dem RAM aus, sondern
entpacken die Datei in ein temporäres Verzeichnis und startet
die exe von dort.

Na gut, aber dann erklär mir bitte, wiso ich auch beispielsweise Counter Strike aus einem 1,6 GB Archiev direkt ausführen kann, ohne viel Geschwindigkeitsverlust?

Könnte mir trotzdem jemand etwas sagen, ob es möglich ist eine Exe die als String im RAM liegt auszuführen?

mfg dixxi

Hallo

Jetzt würde ich gerne wissen, ob es eigentlich auch möglich
ist, eine .exe datei als string in den arbeitsspeicher
einzulesen und von dort aus auszuführen?

suchst Du sowas?

ul_exec(void *buffer, int argc, char **argv);

Aber für Win32 dürfte das nicht funktionieren
(höchstens von Hand in ring0?).

Grüße

CMБ

suchst Du sowas?

ul_exec(void *buffer, int argc, char **argv);

Aber für Win32 dürfte das nicht funktionieren
(höchstens von Hand in ring0?).

Danke, für den Anstoß. Ich hab danach gleich etwas gegoogled, aber leider wie du bereits erwähnt hast nur etwas für Unix Systeme. Ich möchte das aber unter Windows zum laufen bringen. Was du mit „ring0“ und „von Hand“ meinst, weiß ich leider nicht, aber erklär mir das bitte, ich bin neugierig.^^

Beim Googlen under bin ich einmal über den Begriff „Assembly Jump“ gestolpert, über den man sowas anscheinend machen kann. Leider hab ich nicht viel darüber in Erfahrung bringen können.

Kann mir jemand von euch weiterhelfen?
mfg dixxi

Hallo.

Die ganzen Pack-Programme (WinRar und 7zip auf jeden Fall)
führen die exe-Dateien aber nicht aus dem RAM aus, sondern
entpacken die Datei in ein temporäres Verzeichnis und startet
die exe von dort.

Na gut, aber dann erklär mir bitte, wiso ich auch
beispielsweise Counter Strike aus einem 1,6 GB Archiev direkt
ausführen kann, ohne viel Geschwindigkeitsverlust?

Das wüsste ich auch gerne. Was für ein Pack-Programm nutzt du denn, um das Archiv zu öffnen, bevor du dort CounterStrike startest?

Sebastian.

Das wüsste ich auch gerne. Was für ein Pack-Programm nutzt du
denn, um das Archiv zu öffnen, bevor du dort CounterStrike
startest?

WinRAR und ein auf „normal“ komprimiertes Archiev.

mfg dixxi

Hallo.

Das wüsste ich auch gerne. Was für ein Pack-Programm nutzt du
denn, um das Archiv zu öffnen, bevor du dort CounterStrike
startest?

WinRAR und ein auf „normal“ komprimiertes Archiev.

Hm, wenn ich ein Archiv mit WinRAR öffne und dort eine exe aufrufe, bekomme ich immer erst den Dekomprimier-Fortschritt gezeigt, wo er das Archiv entpackt (in ein Temp-Verzeichnis). Und erst anschließend startet die exe.
Bei dir wird da kein Entpack-Fortschritt angezeigt?

Sebastian.

Hm, wenn ich ein Archiv mit WinRAR öffne und dort eine exe
aufrufe, bekomme ich immer erst den Dekomprimier-Fortschritt
gezeigt, wo er das Archiv entpackt (in ein Temp-Verzeichnis).
Und erst anschließend startet die exe.
Bei dir wird da kein Entpack-Fortschritt angezeigt?

Sicher wird da ein Entpack-Fortschritt angezeigt. Aber wird das nicht in den RAM geladen?

Aber kommen wir bitte nicht so weit vom Thema ab. Ich möchte trotzdem einfach wissen, wie es möglich ist eine als String vorliegende Exe im RAM auszuführen.

mfg dixxi

Hallo dixxi,

Aber kommen wir bitte nicht so weit vom Thema ab. Ich möchte
trotzdem einfach wissen, wie es möglich ist eine als String
vorliegende Exe im RAM auszuführen.

Meinst du wirklich eine EXE ?

Eine EXE hat einen Header in welchem die Segment-Adressen und -Grössen stehen. Zudem gibt es noch eine Fixup-Tabelle, mit welcher die Sprung- und Daten-Adressen auf die Tatsächlichen Speicheradressen korrigiert werden, bevor das Programm gestartet werden kann.

Nach der Programm-Relozierung wird der Header nicht mehr benötigt.

Irgendwo im Win-API gibt es einen Aufruf, welcher nur das Fixup macht. Dieser wir von Debuggern benötigt.

http://www.microsoft.com/whdc/system/platform/firmwa…

MfG Peter(TOO)

Einmal ein großes Danke an Peter für den tollen Link. Werde mich gleich mal dazusetzten und durchlesen.

Meinst du wirklich eine EXE ?

So jetzt rück ich mit der ganzen Wahrheit heraus. Ich stell mir das so vor:
Ich möchte ein Programm schreiben, dass eine normale Exe auf der HD mit einem Schlüssel verschlüsselt. Zur Zeit funktioniert das ganze noch sehr sehr simpel. Dabei entsteht eine neue verschlüsselte Datei. Wird diese Datei dan per Doppelklick geöffnet, startet ein zweites Programm und fragt nach einem Passwort. Ist das korrekt, wird die verschlüsselte Exe wieder entschlüsselt (als char* im RAM) und soll dan anschließend von dort aus normal ausgeführt werden. Das mit dem Zwischenspeichern in einem temporären Verzeichnis, wäre zwar möglich, dauert aber bei sehr großen Exe einfach zu lange bzw. ich will später das selbe Verfahren auch für andere Datein benutzen, die vielleicht 1 GB groß sein können. Darum das direkte Ausführen aus dem RAM.

Und außerdem kann ich dabei gleich etwas lernen, da ich mich sowieso schon immer frage, wie das mit der Ausführung von Exes funktioniert.

mfg dixxi

Hallo
Hier habe ich gefunden, wie man dynamisch erzeugte Daten als Programm ausführen kann:
http://msdn.microsoft.com/en-us/library/aa366574(VS…

MfG