Seite 1 von 2
exe dateien ins project einbinden und starten.
Verfasst: 13.05.2008 11:27
von whitelion
ich frage mich, wie ich z.B. eine (oder mehrere) exe dateien in mein projekt integrieren kann: sagen wir mal ich möchte upx.exe includieren und mache flogendes:
Code: Alles auswählen
DataSection
upx:
IncludeBinary "upx.exe"
EndDataSection
mal abgesehen von der frage ob das überhaupt richtig ist.
- wie jumpe ich an die stelle meiner inkludierten datei um diese zu starten (mit parametern)?
- verstehe ich das richtig, dass die dann NICHT auf der festplatte ausgelagert wird?
- jetzt mal rein theoretisch: könnte man auch folgendes konstrukt basteln: ich nehme eine meine projecdatei, in selbiger ist upx (wie oben gewünscht) und spiel.exe includiert. jetzt nehme ich upx.exe und packe damit die inkludierte spiel.exe. erst dann schreibe ich sie auf einen datenträger! .... geht sowas?
Verfasst: 13.05.2008 12:46
von Rokur
Mit IncludeBinary kannst du eine Binärdatei in dein Programm einbinden, diese ist dann nach dem Compilieren direkt in deiner Exe-Datei enthalten.
Zum Ermitteln der Adresse und Größe der eingebundenen Datei gibt es in der Hilfe auch ein gutes Beispiel.
Du kannst natürlich wie in deinem Beispiel auch eine Exe-Datei einbinden, nur direkt starten geht dann nicht, dazu musst du sie erst auf die Festplatte schreiben.
Muss die Datei denn unbedingt in deiner Exe enthalten sein? Und wenn ja, warum darf die dann nicht temporär ausgelagert werden? Normalerweise werden von einem Programm benötigte Daten, Bibliotheken und andere Programme im selben Verzeichnis mit installiert, als separate Dateien, sofern es nicht sowieso zentrale Daten/Programme/Bibliotheken sind.
Zu deiner letzten Frage:
Du kannst mit PB einen Speicherbereich packen/entpacken und diesen erst dann auf einen Datenträger schreiben, schau dir dazu mal die Bibliothek "Packer" an (PackMemory()/UnpackMemory()).
Verfasst: 13.05.2008 13:02
von Fluid Byte
Die Länge zu ermitteln ist recht simpel:
Code: Alles auswählen
DataSection
ExeStart:
IncludeBinary "upx.exe"
ExeEnd:
EndDataSection
Debug ExeEnd-ExeStart
Was das Ausführen der Datei angeht ...
Also es möglich per Prozess-Injektion die Anwendung auszuführen ohne sie auf Pladde zwischenspeichern zu müssen. Das ist aber alles andere als eine Anfängersache und außerdem höchst fraglich ob das für deine Zwecke überhaupt nötig ist.
Wenn es einfach darum geht deine Anwendung oder dein Spiel mittels UPX zu verkleinern dann tu dies wenn du eine finale Version kompiliert hast. Alles andere wäre sinnfrei.
Verfasst: 13.05.2008 13:28
von Kiffi
Fluid Byte hat geschrieben:
+2?
Verfasst: 13.05.2008 13:53
von Fluid Byte
Ist das jetzt tatsächlich eine Frage oder 'ne Aussage?
Verfasst: 13.05.2008 13:54
von whitelion
gut danke so weit erstmal.
könnte ich also eine datei als binary integrieren und anschließend direkt in den speicher schreiben und dann per jump auf den entrypoint selbiger starten?
ich finde auslagerungen von dateien grundsätzlich mal richtig daneben. zumindest wenn ich eine relativ kleine exe-datei habe ist es doch blödsinn mit festplattenauslagerungen zu arbeiten. - ist zumindes meine meinung.
Verfasst: 13.05.2008 14:00
von coder
Exe direct aus dem Ram ausführen (naja nicht ganz direct!):
(Hinweis der code ist nicht von mir, den habe ich mal hier im Forum gefunden.)
mfg coder
//Edit hab den Linke gefunden!
hier klicken
Hab den Code hier entfernt!
Verfasst: 13.05.2008 14:17
von Fluid Byte
LOL?

Verfasst: 13.05.2008 14:20
von whitelion
lol, ist ja wahnsinn ... ich hab die codeinjection mal getestet.... auch wenn ich glaube, dass ich sie nicht wirklich brauche da ich ja keinen virus schreiben möchte, war ich neugierig. oh wunder oh wunder ! - ich bekomme zum ersten mal seit XP nutzung einen warnhinweis, dass windows dateischutzsystem eine injection erkannt hat!

entweder ist der code schon sehr alt oder dient mit unbekannten anderen zwecken... starten lässt sich damit jedoch nichts. aber evtl gibt es ja noch eine möglichkeit in anderer richtung z.B. so:
1. binary integrieren
2. binary in einen reservierten speicherbereich laden.
3. binary per jump auf entrypoint ausführen.
ok, stellt sich an dieser stelle die frage wie ichs nutzen kann, wenns keine exe ist, sonder z.B. eine gif für eine grafische GUI.... aber eins nach dem anderen...
wenn mir jetzt ein kenner sagt "ja das geht" dann versuche ich mich mal

Verfasst: 13.05.2008 14:29
von Fluid Byte
ok, stellt sich an dieser stelle die frage wie ichs nutzen kann, wenns keine exe ist, sonder z.B. eine gif für eine grafische GUI.... aber eins nach dem anderen...
Na das ist einfach mit CatchSprite(). Allerdings ist .GIF 'nen bissi doof weil PB das nicht laden kann.
Es hat aber jemand im Englischen Forum dafür was geschrieben.