Forum: PC-Programmierung Daten in exe schreiben?


von Kom (Gast)


Lesenswert?

Hi,
gibt's eine Möglichkeit, in einen entsprechend angelegten Bereich einer 
ausführbaren Datei (Windows) Daten zu schreiben, auf die dann aus dem 
Programm zugegriffen werden kann?
Ich möchte nur die Programmdatei, und ich möchte nicht jedesmal 
kompilieren (und die Daten in eine Header-Datei umwandeln).

von Robert L. (lrlr)


Lesenswert?

>Ich möchte nur die Programmdatei, und ich möchte nicht jedesmal
>kompilieren (und die Daten in eine Header-Datei umwandeln).

Ressourcen

die werden linked (dann brauchst nicht compilieren ;-)

von Peter II (Gast)


Lesenswert?

du kannst ans ende der EXE schreiben was du willst. Auslesen kannst du 
ganz normal mit read.

von Kom (Gast)


Lesenswert?

Peter II schrieb:
> du kannst ans ende der EXE schreiben was du willst. Auslesen kannst du
> ganz normal mit read.

Dazu muss ich doch vor dem Kompilieren wissen, wie groß die .exe wird. 
Oder man füllt einfach auf. Das wird gehen. Danke!

von Frank E. (Firma: Q3) (qualidat)


Lesenswert?

Um wieviele Daten geht es? Ich habe schon bei fertig compilierten 
Programmen hinterher individuelle Seriennummern in String-Konstanten 
hineingepatcht. Wenn du im Programm eine erkennbare Konstante anlegst, 
z.B. "xxx----------xxx", kannst du die im Code suchen und z.B. durch 
einen (Base64-kodierten) Wert ganz oder teilweise ersetzen, wobei die 
Länge natürlich nicht verändert werden darf.

von Vlad T. (vlad_tepesch)


Lesenswert?

Frank Esselbach schrieb:
> Um wieviele Daten geht es? Ich habe schon bei fertig compilierten
> Programmen hinterher individuelle Seriennummern in String-Konstanten
> hineingepatcht. Wenn du im Programm eine erkennbare Konstante anlegst,
> z.B. "xxx----------xxx", kannst du die im Code suchen und z.B. durch
> einen (Base64-kodierten) Wert ganz oder teilweise ersetzen, wobei die
> Länge natürlich nicht verändert werden darf.

so ein quatsch.
es gibt doch kommandozeilentools, mit denen man die Ressourcen einer 
PE-Datei bearbeiten kann, warum also solche dirty hacks?

Allerdings dürfte es schwer fallen, ein Programm an der eigenen 
Programmdatei zur laufzeit rumdoktoren zu lassen.
das dürfte nur kompliziert möglich sein.

*1 eigene Programmdatei kopieren -> temp.exe
*1 temp.exe manipulieren
*1 temp.exe starten (*2) mit parameter, der spezielles Verhalten auslöst
*1 sich beenden
*2 warten, bis 1 beendet ist.
*2 orignal überschreiben mit temp.exe
*2 überschriebenes Original mit weiteren Parameter, der spezielles 
Verhalten auslöst starten (*3)
*2 beenden
*3 warten, bis 2 beendet ist.
*3 temp.exe löschen


das wäre mein erster ansatz.
Das ganze ist aber ziemlich vermurkst.
Dann lieber eine zusätzliche Konfigurationsdatei.

von Alex W. (a20q90)


Lesenswert?

Mach doch ne DLL oder ne XML-Datei und binde die zur Laufzeit ein.

von Robert L. (lrlr)


Lesenswert?

>ch doch ne DLL oder ne XML-Datei und binde die zur Laufzeit ein.

(einziger) sinn solch einer aktion ist dass man eben KEINE 2. datei 
haben will, sondern alles in einer sein muss...

von tk (Gast)


Lesenswert?

Ein paar Gedanken zur Idee von Peter II:
Nachsehen was bei deinem Compiler immer das letzte Byte ist (bei mir 
0x00)
Auf dieses Byte prüfen, (Größe der Datei kann ja per Dateisystem 
ermittelt werden)
Wenn ja -> Erster Start nach kompilieren, Daten + PrüfByte ans Ende 
kopieren.
Evtl noch 4Byte vor dem PrüfByte für die Länge deiner Daten, falls nicht 
zur Compilierzeit ermittelbar

von Peter II (Gast)


Lesenswert?

tk schrieb:
> Nachsehen was bei deinem Compiler immer das letzte Byte ist (bei mir
> 0x00)
> Auf dieses Byte prüfen, (Größe der Datei kann ja per Dateisystem
> ermittelt werden)
> Wenn ja -> Erster Start nach kompilieren, Daten + PrüfByte ans Ende
> kopieren.
> Evtl noch 4Byte vor dem PrüfByte für die Länge deiner Daten, falls nicht
> zur Compilierzeit ermittelbar

es geht doch viel einfacher, einfach die Daten ans Ende dran hängen und 
zusätzlich noch als 4byte die Länge der daten. Beim Auslesen einfach als 
erste die 4byte länge lesen dann von der Dateigröße abziehen und schon 
hat man den offset wo die nutzdaten beginnen.

Aber das ganze geht nur bis 2GB, dann startet die exe nicht mehr.

von Gassi (Gast)


Lesenswert?

Das ist noch besser, als erst bist zu einer bestimmten Größe 
aufzufüllen. Danke.

von User (Gast)


Lesenswert?

Ich meine gehört zu haben das dieser Hack nach DOS nicht mehr möglich 
ist, da die Datei vom System geöffnet ist und nicht geschrieben werden 
kann.

von Peter II (Gast)


Lesenswert?

User schrieb:
> Ich meine gehört zu haben das dieser Hack nach DOS nicht mehr möglich
> ist, da die Datei vom System geöffnet ist und nicht geschrieben werden
> kann.
so wie ich es verstanden haben geht es hier auch nicht um das schreiben 
sondern nur um das lesen. Er will doch nur bei sich daten Anfügen die 
das Program dann später verwendet. Zum einfügen kann er ja ein anderes 
Programm verwenden.

von gASSI (Gast)


Lesenswert?

genau, nur lesen, das funktinoniert!

von Ben _. (burning_silicon)


Lesenswert?

Achja das waren noch Zeiten... :D

Ans Ende einer .EXE kannst Du dranschreiben was Du willst. Die Länge des 
zu ladenden Programmteils steht im Header, der Rest wird vom EXE-Loader 
nicht berücksichtigt.

Dein Programm kann also nun herausfinden unter welchem Namen es 
aufgerufen wurde, die Datei öffnen und entsprechend Daten nachladen.

Prinzipiell kannst Du auch Daten gleich vom EXE-Loader mit ins RAM laden 
lassen, mußt aber ggf. Checksummen berechnen und die Länge des 
Datensatzes muß immer gleich sein (sofern Du den Header nicht änderen 
möchtest).

Und im Grunde kannst Du mit einer .EXE machen was Du willst. Veränderst 
Du dabei den Code bekommst Du entweder einen Checksummenfehler oder das 
"Programm" crasht einfach.

Ich hab das früher bei eigenen Programmen ausgiebig genutzt, einige 
Programme haben sich beim ersten Aufruf selbst verschlüsselt und die 
verschlüsselte Version in der .EXE abgelegt so daß man sich nicht mit 
einem externen Programm darum kümmern brauchte.

von Peter II (Gast)


Lesenswert?

Ben _ schrieb:
> Und im Grunde kannst Du mit einer .EXE machen was Du willst. Veränderst
> Du dabei den Code bekommst Du entweder einen Checksummenfehler oder das
> "Programm" crasht einfach.
also das mit der Checksumme glaube ich nicht, ich habe auch schon 
Programmanpassungen an einer EXE vorgenommen (im code-Teil) und dabei 
ist es zu keinem Checksummen Problem gekommen. Oder ist sie Optional?

von Ben _. (burning_silicon)


Lesenswert?

Scheint optional, ich kenne keinen .EXE-Loader der sie auswertet. Ist 
auch bei vielen Dateien ausgenullt. Aber es gibt sie halt.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.