![]() |
im HEX-Code geänderte Datei wieder speichern?
Moin
Ich öffne eine exe Datei mit Delphi und lasse ihren Hexcode anzeigen, das klappt auf wunderbar, er wird in einer memo sichtbar gemacht. Nun bearbeitet mein Programm den Hexcode, was auch klappt. Nun möchte ich die Veränderungen aber auch auf die Ursprungsdatei übertragen, möchte also aus dem ganzen bearbeiteten ($65 $6F $20 $54 $01 $EC $00 $49.............) Gewirr wieder eine exe machen. Ich kann ja schlecht
Delphi-Quellcode:
schreiben ;-)
memo.lines.savetofile('C:\hex.exe')
bitte um Hilfe und Codebsps. danke im Vorraus |
Re: im HEX-Code geänderte Datei wieder speichern?
Warum nicht?
|
Re: im HEX-Code geänderte Datei wieder speichern?
Weil im Memo nur der HexCode steht ;)
|
Re: im HEX-Code geänderte Datei wieder speichern?
du kannst ja auch nicht einen Delphi Quellcode einfach in ner .exe speichern :wink:
|
Re: im HEX-Code geänderte Datei wieder speichern?
Irgendwie liest du die Datei ja auch aus und lässt dir das ganze in hex darstellen. Wenn du diesen Quelltext dir selbst erarbeitet hast dürfte es doch nicht das Problem sein in umgekehrte Richtung das ganze wieder zu speichern?! :gruebel:
|
Re: im HEX-Code geänderte Datei wieder speichern?
wenn dem so wäre :(
Allerdings ist die Welt der binär und hexdezimal Codes für mich absolutes Neuland, deshalb habe ich den Code der den hexcode ließt nicht selbst geschreiben:
Delphi-Quellcode:
var
fs: TFileStream; Buffer: TMyByteArray; BytesRead: Longint; s: string; i: Int64; HexLength: Integer; begin i := 0; SetLength(Buffer, BUFFERSIZE); fs := TFileStream.Create(edit1.text, fmOpenRead); HexLength := Length(HEXPREFIX) + 2 + Length(HEXSUFFIX); SetLength(s, fs.size * HexLength); Progressbar1.Max := fs.Size div BUFFERSIZE; try repeat BytesRead := fs.Read(Buffer[0], BUFFERSIZE); Move(BuffToHex(Buffer)[1], s[i * (HexLength * BUFFERSIZE) + 1], HexLength * BytesRead); Inc(i); Progressbar1.StepIt; Application.ProcessMessages; until BytesRead < BUFFERSIZE; memo1.SelText := s; finally FreeAndNil(fs); end; |
Re: im HEX-Code geänderte Datei wieder speichern?
Folgender Code schreibt einfach Hex Zeichen in einer Datei. Wobei zuerst in einem StringList gespeichert wird (hab ich nur jetzt ganz schnell zusammengetippt, natürlich kannst es besser machen wenns magst). Die Zeichen werden danach in einem array von bytes gespeichert und das wird dann in einer Datei geschrieben.
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
var n, len: Integer; s: string; sl: TStringList; ba: array of Byte; fs: TFileStream; begin len := 0; sl := TStringList.Create; s := Memo1.Text; s := StringReplace(s, '$', '', [rfReplaceAll]); s := StringReplace(s, '0x', '', [rfReplaceAll]); sl.Delimiter := ' '; sl.DelimitedText := s; SetLength(ba, sl.Count); for n := 0 to sl.Count -1 do begin ba[n] := StrToInt('$' + sl[n]); end; sl.Free; fs := TFileStream.Create('c:\okay.txt', fmOpenWrite or fmCreate); fs.Write(Pointer(ba)^, Length(ba)); fs.Free; end; |
Re: im HEX-Code geänderte Datei wieder speichern?
Funktioniert Perfekt!
natürlich nicht okay.txt sondern .exe Dickes THX! |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:47 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-2025 by Thomas Breitkreuz