Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.071 Beiträge
 
Delphi 12 Athens
 
#7

AW: RawByteString in Exe modifizieren

  Alt 7. Feb 2020, 14:54
Nee nee, die Liebe Dolly macht sowas doch nicht.
Fremde Dateien hacken ist aber böse.
(vor allem wenn es gegen die Lizenzbedingen verstoßen könnte)



Sowas wie TEncoding.ANSI.xyz ist sowieso das Schlimmste, was man einer Binärdatei antun kann.

Wenn schon mit Unicode rumgepfuscht wird, dann besser ohne Zeichenübersetzungen.
Delphi-Quellcode:
E := TMBCSEncoding.Create($FFFF, 0, 0); // $FFFF ist auch die CodePage, welche der RawByteString benutzt
E.GetString();
Ansonsten gibt es viele Wege, um Binärdaten auch binär zu behandeln.
Delphi-Quellcode:
var R: RawByteString;
M := TFileStream.Create('.\file.exe');
SetLength(R, M.Size);
M.ReadBuffer(R[1], M.Size);
...
Und dann besser niemals mit Unicode-Funktionen darauf zugreigen
Pos und Copy gibt es standardmäßig überladen, auch als "ANSI"-Version (für AnsiString und seine Verwandten ala RawByteString)
und ansonsten gibt es auch noch die Unit AnsiStrings.

--

M := TMemoryStream.Create;
M.LoadFromFile('.\file.exe'));
...
M.Memory // ein Pointer auf den Dateiinhalt
...
M.SaveToFile('.\newfile.exe'));
M.Free;

--

B := TFile.ReadAllBytes('file');
... // B = ein Byte-Array
TFile.WriteAllBytes('newfile', B);

--

R := TFile.OpenText('file'); // bzw. direkt TStreamReader.Create
W := TFile.CreateText('file'); // bzw. TStreamWriter.Create
// geht nicht, weil hier der Encoding-Parameter fehlt,
// aber

E := TMBCSEncoding.Create($FFFF, 0, 0);
S := TFile.ReadAllText('file', E);
...
E.Free;

uvm.
Leider gibt es Pos/PosEx unverständlicher Weise nicht für normale Arrays.
Es gibt StrPos-Funktionen für PAnsiChar, die man auf Pointer/Arrays loslassen könnte, aber bei der ersten #0 brechen die ab.
Also bleibt nur selber was basteln.

Aber so oder so ist es immer besser Binärdaten niemals in Text-Strings zu speichern
und stattdessen "ordentlich" mit Streams oder Pointer bzw. ByteArrays zu arbeiten.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu ( 7. Feb 2020 um 14:58 Uhr)
  Mit Zitat antworten Zitat