Avatar billede psycosoft-funware Nybegynder
04. februar 2006 - 11:43 Der er 3 kommentarer og
1 løsning

16 byte XOR krypteret filer

hejsa

jeg sidder og roder med en algo, der kan dekryptere GTA san andreas (PC) radiostationerne. jeg har fundet ud af at det er XOR krypteret med en 16 byte sekvens (0xA1C43AEA, 0xF314A89A, 0x23D7B048, 0xF1FFE89D)

var
  Form1: TForm1;

  InF, OutF: file of Byte;
  a:array[0..4096] of char;
  BRead: ^Integer;
  FileLen: LongInt;
  SisendFail, ValjundFail: string;

procedure TForm1.btnKonverdiClick(Sender: TObject);
var
  i: Cardinal;
begin
  AssignFile(InF, SisendFail);
  AssignFile(OutF, ValjundFail);
      Reset(InF);
      ReWrite(OutF);
  FileLen:=FileSize(InF);
  lblStaatus.Caption:='Converting...';
  Application.ProcessMessages;
  with Progressbar1 do
  begin
      Min  := 0;
      Max  := FileLen;
      while filelen > 0 do
      begin
        New(BRead);
            BlockRead(InF, a[0], SizeOf(a), BRead^);
        FileLen:= FileLen - BRead^;
        for i:=0 to Length(a) do
        begin
            a[i]:= chr(ord(a[i]) xor ($22));
        end;
        BlockWrite(OutF, a[0], BRead^);
            Position:=Position+BRead^;
            lblStaatus.Caption:='Completed...';
        Dispose(BRead);
      end;
  end;
  ProgressBar1.Position:=0;
  CloseFile(OutF);
  CloseFile(InF);
end;

jeg fandt denne algo til vice city ADF filer, men jeg har på fornemmelsen at det er samme fremgangsmåde.

hvordan laver man så denne algo om, så den dekryptere San Andreas radiostationerne?

/FunteX! :-)
Avatar billede hrc Mester
27. februar 2006 - 12:44 #1
Er det sådan noget du tænker på?

procedure Decrypt(const aInputFile, aOutputFile : string);
const
  chunk_max = $f;
  xormask : array[0..chunk_max] of byte =
    ($A1,$C4,$3A,$EA,$F3,$14,$A8,$9A,$23,$D7,$B0,$48,$F1,$FF,$E8,$9D);
var
  i : integer;
  fsi : TFileStream;
  fso : TFileStream;
  buffer : array[0..chunk_max] of byte
begin
  fsi := TFileStream.Create(aInputFile,fmOpenRead); // Gætter - Kan ikke lige
  fso := TFileStream.Create(aOutputFile,fmCreate);  // huske parametrene
  try
    while fsi.position < fsi.size do
    begin
      fsi.ReadBuffer(buffer,chunk_max);
      for i := 0 to chunk_max do
        buffer[i] := buffer[i] xor xormask[i];
      fso.WriteBuffer(buffer,chunk_max);
    end;
  finally
    fso.Free;
    fsi.Free;
  end;
end;
Avatar billede psycosoft-funware Nybegynder
01. marts 2006 - 10:00 #2
ja, skal lige have testet den... :-)
Avatar billede hrc Mester
01. marts 2006 - 11:13 #3
Den her er testet.

procedure Decrypt(const aInputFile, aOutputFile : string);
const
  chunk_max = $f;
  xormask : array[0..chunk_max] of byte =
    ($A1,$C4,$3A,$EA,$F3,$14,$A8,$9A,$23,$D7,$B0,$48,$F1,$FF,$E8,$9D);
var
  i : integer;
  BytesRead : integer;
  fsi : TFileStream;
  fso : TFileStream;
  buffer : array[0..chunk_max] of byte;
begin
  fsi := TFileStream.Create(aInputFile,fmOpenRead or fmShareDenyWrite);
  fso := TFileStream.Create(aOutputFile,fmCreate);
  try
    while fsi.position < fsi.size do
    begin
      BytesRead := fsi.Read(buffer,chunk_max);
      for i := 0 to BytesRead - 1 do
        buffer[i] := buffer[i] xor xormask[i];
      fso.WriteBuffer(buffer,BytesRead);
    end;
  finally
    fso.Free;
    fsi.Free;
  end;
end;
Avatar billede psycosoft-funware Nybegynder
02. marts 2006 - 16:31 #4
algo'en komplieres uden problemer :-) takker...
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester