Seite 1 von 2

Mit Includebinary eingebundene Datei nachträglich ändern

Verfasst: 16.07.2008 20:03
von CNESM
Hi Leute,

ich habe mal ne Frage:

Ich habe eine Programm, das verschiedene Zertifizierungsdateien mittels IncludeBinary beinhaltet. Es kann nun notwendig werden diese enthaltenen Zertifizierungsdateien upzudaten. Ich müsste als eine fertig erstelle EXE öffnen, die dort mittels Includebinary enthaltenen Dateien entfernen, durch die neue Version ersetzen und die Exe wieder lauffähig zusammenflicken.

Mir ist bekannt, das man ein Exe nachträglich ändern kann (Da gibts ja schöne Beispiele von Mischa etc.) aber ist es auch möglich, die mittels Includebinary includierten Dateien einer Exe nachträglich zu ändern?

Danke für eure Aufmerksamkeit!

Verfasst: 16.07.2008 20:07
von Kaeru Gaman
du musst halt nur wissen, wo in der exe die daten stehen.

da wäre es wahrscheinlich am besten, per IncludeBinary nur einen Dummy einzusetzen,
den man einfach in einem HexEditor wiederfinden kann.

vor der auslieferung ersetzt du den Dummy durch die aktuellen Daten,
und dein Patch kann diese dann an der selben Stelle ersetzen.

Verfasst: 16.07.2008 20:30
von CNESM
Das mit dem Dummy ist ne gute Idee! Muss ich dann den Namen als Erkennungszeichen ("MeineDatei.txt") verwenden oder den Inhalt der Datei? Nach was suche ich am Besten?

Allgemein muss ich einfach nur wissen, wie ich in einer fertig erstellten Exe auslese, wo der Datasection Bereich anfängt und aufhört bzw. wie kann ich erkennen, wo die 1.Datei anfängt und aufhört und die 2. Datei anfängt und aufhört?

Was vielleicht noch ganz hilfreich wäre zur Info:

- Es werden zwei Dateien sein, die in der Exe ersetzt werden müssen
- Die Größe der Dateien kann natürlich variieren

Hab derweil das Problem das ich nicht weiß, wie ich herausfinden kann, wo die aktuellen Dateien includiert wurden. Wenn ich das weiß, ist der Rest Formsache.

Verfasst: 16.07.2008 20:44
von Kaeru Gaman
nach dem Inhalt natürlich, der name ist in der exe nicht mehr enthalten.

wenn deine datei zum includieren nur binary-daten enthalten sollen,
dann stelle deine Dummy-Datei doch einfach so zusammen,
dass du in ausreichender größe von 0-255 zählst.
z.B.:

Code: Alles auswählen

CreateFile( 0, "dummy.inc" )
  For Block = 0 to 7
    For Byte = 0 to 255
      WriteByte( 0, Byte )
    Next
  Next
CloseFile(0)
erzeugt eine 2KB Dummy-Include.

dieses gleichmäßige Muster kannst du easy wiederfinden, um es ersetzen zu können.


> - Die Größe der Dateien kann natürlich variieren
die Größe der Dateien darf natürlich nicht variieren, das würde den kompletten ansatz ad absurdum führen.

nicht, dass es dann unmöglich wäre, aber du müßtest völlig anders und weit komplizierter herangehen.

PS:
du kannst allerdings den Dummy in einer maximalen Größe erzeugen,
und den einzusetzenden Teil um die fehlende Länge ergänzen,
dann natürlich nicht mit einem einfach zu erkennenden Muster.

Verfasst: 16.07.2008 21:26
von Thorium
Muss es zwingend über IncludeBinary laufen?
Ich denke es ist einfacher die Dateien einfach ans Ende der .exe zu schreiben. Musst dann zwar selbst was schreiben zum auslesen aber ändern und ersetzen ist so ziemlich problemlos.

Ansonsten, gibts noch ne recht komplizierte Möglichkeit. Dabei werden die Dateien als Ressourcen eingebunden und können auch später modifiziert werden, was aber nicht unkompliziert ist.
Hier ist ein Open Source Ressource Editor: http://www.wilsonc.demon.co.uk/d10resourceeditor.htm

Verfasst: 17.07.2008 09:08
von CNESM
Ich würde schon gern Includebinary nutzen. Die andere Variante ist mir ja bekannt und ich wollte einfach mal den anderne Weg nehmen. Ist aber eher nen Streben nach Wissen :mrgreen:

Rein theoretisch müsste es doch so gehen:

- Dummy schreiben mit wiedererkennbaren Muster und mittels IncludeBinary einfügen
- Exe erstellen
- Exe auslesen und Datasection Bereich ermitteln (Wird durch das Muster der Dummy gefunden und ermittelt)
- Diesen Bereich ausschneiden und durch die neuen Daten ersetzen
- Exe wieder zusammensetzen

Mein Problem ist, das ich nicht weiß, was sich hinter dem Befehl IncludeBinary und dem Block "Datasection" noch befindet. Gibts da Header oder Indexangaben, die ich ebenfalls ändern müsste oder ist das einfach nur ein festgelegter Bereich, der halt nicht am Ende der EXE steht sondern beispielsweise in der Mitte.
nicht, dass es dann unmöglich wäre, aber du müßtest völlig anders und weit komplizierter herangehen.
Was wäre hier zu beachten bzw. welche Problematik würde sich ergeben, wenn die Dateigrößen varrieren?

Verfasst: 06.08.2008 21:40
von Knight_Rider_2000
die beste alternative ist es eigentlich noch

Code: Alles auswählen

BeginUpdateResource_() : UpdateResource_() : EndUpdateResource_()
zu benutzen. ist leicht mit

Code: Alles auswählen

FindResource_()
wiederzufinden und auch zu bearbeiten

Bei fragen der benutzung dieser Funktionen einfach fragen

Verfasst: 06.08.2008 22:14
von NicTheQuick
CNESM hat geschrieben:
nicht, dass es dann unmöglich wäre, aber du müßtest völlig anders und weit komplizierter herangehen.
Was wäre hier zu beachten bzw. welche Problematik würde sich ergeben, wenn die Dateigrößen varrieren?
Falls noch Programmcode hinter der DataSection steht, dann würde die
Position dessen ja auch verschoben werden. Da aber in einer EXE-Datei fast
alle JUMP-Befehle absolut sind, müsstest du diese wieder ändern.

Schreib die Dateien doch einfach ans Ende der Datei und dahinter noch die
Größer der Dateien, damit du sie leicht auslesen, entfernen und wieder
einfügen kannst.

Verfasst: 07.08.2008 00:45
von Knight_Rider_2000
NicTheQuickwrote:
Falls noch Programmcode hinter der DataSection steht, dann würde die
Position dessen ja auch verschoben werden. Da aber in einer EXE-Datei fast
alle JUMP-Befehle absolut sind, müsstest du diese wieder ändern.
deshalb lieber UpdateResource_() benutzen. positionsmarker in der exe werden dadurch nicht beschaedigt und die Resource kann trotzdem *resized* werden
NicTheQuickwrote:
Schreib die Dateien doch einfach ans Ende der Datei und dahinter noch die
Größer der Dateien, damit du sie leicht auslesen, entfernen und wieder
einfügen kannst.
Wenn man die Daten ans ende der exe schreibt kommt es auch zwischendurch mal vor das windows dahinter die x vielen nullen schreibt die sonst am ende der exe stehen und man kommt so leicht nicht mehr an den datensatz heran

Verfasst: 07.08.2008 01:02
von NicTheQuick
Knight_Rider_2000 hat geschrieben:Wenn man die Daten ans ende der exe schreibt kommt es auch zwischendurch mal vor das windows dahinter die x vielen nullen schreibt die sonst am ende der exe stehen und man kommt so leicht nicht mehr an den datensatz heran
Aha, das wusste ich auch noch nicht. Bisher hat es mit dieser Methode
immer funktioniert.
Gibt es da auch Pendants für Linux?