Habe deinen Code genommen und angepasst. Das hier ist mein Code. Ehrlich gesagt verstehe ich noch nicht, wie man TEIL1 und TEIL2 wieder zusammenfügen sollen, wenn am Ende doch ein Hash dazwischen steht.
Delphi-Quellcode:
procedure TForm1.Button6Click(Sender: TObject);
var
aByteStream, aByteStream2: TBytesStream;
iPosRawByte: Int64;
sHash: string;
begin
// Save hash on the position of RawByteString "a"
aByteStream := TBytesStream.Create;
try
aByteStream.LoadFromFile(aFileName);
iPosRawByte := Pos(RawByteString(a), RawByteString(aByteStream.Bytes));
if iPosRawByte > 0 then
begin
aByteStream2 := TBytesStream.Create;
try
aByteStream2.Write(aByteStream.Bytes[0], iPosRawByte - 1);
aByteStream2.Write(aByteStream.Bytes[iPosRawByte + Length(a)], aByteStream.Size - (iPosRawByte + Length(a))); // +1 entfernt, da Hash sonst falsch
// Original: f2.Write( f.Bytes[hp+length(a)], f.Size - (hp+length(a)) + 1 );
sHash := System.hash.THashSHA2.GetHashString(Trim(TEncoding.ANSI.GetString(aByteStream2.Bytes))); // abgeändert, da Hash sonst ebenfalls falsch
// Original: hashRaw := TByteToHex( System.hash.THashMD5.GetHashBytes( f2 ) );
Move(AnsiString(sHash)[1], aByteStream.Bytes[iPosRawByte - 1], Length(a));
aByteStream.SaveToFile(aFileName);
finally
aByteStream2.Free;
end;
end;
finally
aByteStream.Free;
end;
end;
Das hier ist meine Prozedur die -nur- dafür da ist den Hash in die Datei zu schreiben.
Erklärung;
ich habe ein kleines Tool, welches NUR dafür da ist die Hashwerte ans Ende von jeder meiner Exe-Dateien zu schreiben.
Ich schiebe dem Tool einfach meine Exe-Dateien in ein Memo, klicke den Button und alle Exen werden angepasst.