Mit Includebinary eingebundene Datei nachträglich ändern

Anfängerfragen zum Programmieren mit PureBasic.
CNESM
Beiträge: 311
Registriert: 29.08.2004 15:16
Kontaktdaten:

Mit Includebinary eingebundene Datei nachträglich ändern

Beitrag 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!
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag 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.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
CNESM
Beiträge: 311
Registriert: 29.08.2004 15:16
Kontaktdaten:

Beitrag 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.
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag 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.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
Thorium
Beiträge: 1722
Registriert: 12.06.2005 11:15
Wohnort: Germany
Kontaktdaten:

Beitrag 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
Zu mir kommen behinderte Delphine um mit mir zu schwimmen.

Wir fordern mehr Aufmerksamkeit für umfallende Reissäcke! Bild
CNESM
Beiträge: 311
Registriert: 29.08.2004 15:16
Kontaktdaten:

Beitrag 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?
Benutzeravatar
Knight_Rider_2000
Beiträge: 145
Registriert: 05.02.2007 20:46
Kontaktdaten:

Beitrag 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
PB 4.20,Blitz3D 1.98,Microsoft Visual Studio 2005 Professional, Microsoft Visual Studio 2008 Professional
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8809
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Beitrag 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.
Benutzeravatar
Knight_Rider_2000
Beiträge: 145
Registriert: 05.02.2007 20:46
Kontaktdaten:

Beitrag 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
PB 4.20,Blitz3D 1.98,Microsoft Visual Studio 2005 Professional, Microsoft Visual Studio 2008 Professional
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8809
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Beitrag 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?
Antworten