Registriert seit: 6. Dez 2005
999 Beiträge
|
AW: Benötige Hilfe bei einer Entschlüsselung bei altem Programm
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
|
|
Zitat
|