Einzelnen Beitrag anzeigen

gammatester

Registriert seit: 6. Dez 2005
999 Beiträge
 
#6

AW: Benötige Hilfe bei einer Entschlüsselung bei altem Programm

  Alt 9. Feb 2012, 11:33
Hier der schnell zusammengehackte Proof-of-Concept:
Delphi-Quellcode:
program fcrypt;

{$ifdef VER70}
  type ansichar = char;
{$else}
  {$apptype console}
{$endif}

{----------------------------------------------------}
var
  zz: array[0..5] of byte;

const
   p = 65521;

function nextrand: word;
begin
  asm
   push bx
   mov ax, Word ptr zz [0];
   mov bx, Word ptr zz [2];
   mov cx, Word ptr zz [4];

   sub ax, bx;
   jnc @@nrStore;
   add ax, p

@@nrStore:
   mov Word ptr zz [0], bx
   mov Word ptr zz [2], cx
   mov Word ptr zz [4], ax
   mov @result, ax
   pop bx
  end;
end;

{----------------------------------------------------}
procedure crypt(var bdata; datalen: integer);
var
  i: integer;
  data: array[0..32000] of word absolute bdata;
begin
  for i:=0 to datalen div 2 - 1 do data[i] := data[i] xor nextrand;
end;


{----------------------------------------------------}
const
  Initkey: array[0..5] of ansichar = 'OsyPPS';

const
  test: array[0..5] of byte = ($82, $6a, $55, $b0, $3b, $63);

var
  ct: array[0..sizeof(test)-1] of ansichar;
  i: integer;

begin
  move(initkey, zz, 6);
  move(test,ct,sizeof(ct));
  crypt(ct,6);
  write('Der entschlüsselte Text lautet: ');
  for i:=0 to 5 do write(ansichar(ct[i]));
  writeln;
end.
Kompilieren und Ausgabe:
Code:
Y:\WORK\Dev>D:\DMX\M12\DCC32 -b fcrypt.pas
CodeGear Delphi for Win32 compiler version 20.0
Copyright (c) 1983,2008 CodeGear
fcrypt.pas(67)
68 lines, 0.10 seconds, 14668 bytes code, 13068 bytes data.

Y:\WORK\Dev>FCRYPT.EXE
Der entschlüsselte Text lautet: THOMAS
Der Rest bleibt als Übungsaufgabe, hoffentlich hilft's weiter.

Gruß Gammatester
  Mit Zitat antworten Zitat