![]() |
Datei auf binärer Ebene bearbeiten?
Hi!
Wisst ihr, wie man eine Datei (*.exe; *.zip ......) auf Binärer Ebene bearbeiten kann? Also es wäre wichtig, dass ich den Binärcode einer Datei als String geliefert bekomme, diesen bearbeiten kann und dann wieder eine funktioniernde Datei draus machen kann (wenn die Datenstruktur noch stimmt ^^). ??? |
Re: Datei auf binärer Ebene bearbeiten?
Wie meinst du das, willst du die Funktionalität der Exe ändern? Vielleicht wäre da ein Disassembler das Angebrachte.
|
Re: Datei auf binärer Ebene bearbeiten?
Hört sich so an, also ob du eine EXE-Datei Patchen möchtest oder ähnliches. Ich kenne das noch von früher, da hat man das meistens über einen Hex-Editor gemacht.
Gruß Mordi |
Re: Datei auf binärer Ebene bearbeiten?
Guten Morgen.
Ein String ist vielleicht nicht die beste Wahl um eine Datei im Hauptspeicher zu bearbeiten - ich würde eher ein ByteArray verwenden:
Delphi-Quellcode:
Wenn die zu ändernden Stellen (Offset, Länge) bekannt sind, dann muss die Datei garnicht in den Hauptspeicher geladen werden. Ein patch file ist dann viel eleganter:
uses
Types; function LoadFile(fn: TFileName; var bda: TByteDynArray): Boolean; begin with TFileStream.Create(fn, fmOpenRead or fmShareDenyWrite) do try SetLength(bda, Size); Result := Read(bda[0], Size) = Size; finally Free; end; end;
Code:
Die Datei kann mit TStringList.LoadFromFile() geladen und zeilenweise in einer Schleife verarbeitet werden:
# offset=percent encoded string
2525=Hello%00 252B=Mary Lou%00
Delphi-Quellcode:
Getippt, korrigiert und immer noch nicht getestet.
uses
IdURI; function PercentToStr(const s: String): String; begin Result := TIdURI.URLDecode(s); end; procedure PatchFile(fn: TFileName; patches: TStrings); var i, iOffset: Integer; s: String; begin with TFileStream.Create(fn, fmOpenReadWrite or fmShareDenyWrite) do begin for i := 0 to Pred(patches.Count) do if (Pos('#', patches[i]) <> 1) and TryStrToInt(patches.Names[i], iOffset) then begin Position := iOffset; s := PercentToStr(patches.ValueFromIndex[i]); Write(s[1], Length(s)); end; end; end; Grüße vom marabu |
Re: Datei auf binärer Ebene bearbeiten?
Ich hatte mir das als Grundlage einer Verschlüsselung vorgestellt. Deshalb wäre mir das ganze als Binärcode-String lieber.
|
Re: Datei auf binärer Ebene bearbeiten?
Zitat:
|
Re: Datei auf binärer Ebene bearbeiten?
Zitat:
|
Re: Datei auf binärer Ebene bearbeiten?
Stichwort: TFileStream
Wie auch schon in den Codeschnipseln oben benutzt ;-) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:26 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz