Daten in exe schreiben?

Gast #2319188
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).
(Firma: Q3) #2320727
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.
#2321158
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.
Gast #2321617
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
Gast #2321633
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.
Gast #2322604
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.
#2323256
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.
Gast #2323264
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?

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren