Мой декриптор
// License: public domain{$AppType Console}uses SysUtils, Classes;type TValue = array [0..1] of longword; TKey = array [0..3] of longword; TFooter = packed record Id: longword; Key: TKey; RealSize: longword; end;procedure Decrypt(var Value: TValue; Key: TKey);var v0, v1, sum, i: longword;begin v0 := Value[0]; v1 := Value[1]; sum := $C6EF3720; for i := 0 to 31 do begin Dec(v1, ((v0 shr 5) + Key[3]) xor ((v0 shl 4) + Key[2]) xor (sum + v0)); Dec(v0, ((v1 shr 5) + Key[1]) xor ((v1 shl 4) + Key[0]) xor (sum + v1)); Inc(sum, $61C88647); end; Value[0] := v0; Value[1] := v1;end;var Src, Dst: TFileStream; Footer: TFooter; DataSize: longword; Value: TValue;begin if ParamCount <> 1 then begin WriteLn('Usage: rwrdec <file.def>'); Halt; end; try Src := TFileStream.Create(ParamStr(1), fmOpenRead); except WriteLn('Error opening ' + ParamStr(1)); Halt; end; try if Src.Size <= SizeOf(Footer) then begin WriteLn('File too small'); Halt; end; Src.Seek(-SizeOf(Footer), soFromEnd); Src.Read(Footer, SizeOf(Footer)); DataSize := Src.Size - SizeOf(Footer); if Footer.RealSize > DataSize then begin WriteLn('Corrupted file'); Halt; end; try Dst := TFileStream.Create(ParamStr(1) + '.dec', fmCreate); except WriteLn('Error creating ' + ParamStr(1) + '.dec'); Halt; end; try Src.Seek(0, soFromBeginning); while DataSize >= 8 do begin Dec(DataSize, 8); Src.Read(Value, SizeOf(Value)); Decrypt(Value, Footer.Key); Dst.Write(Value, SizeOf(Value)); end; Dst.Size := Footer.RealSize; finally Dst.Free; end; finally Src.Free; end;end.