Есть алгоритмы по дешифрованию на дельфи?
program mpr;
{$APPTYPE CONSOLE}
uses
Windows, SysUtils;
const
szKey: PChar = 'Software\Mail.Ru\Agent\mra_logins\';
szKeyID: PChar = 'Software\Mail.Ru\Agent';
var
RegKey: HKEY;
ErrorCode: LONGINT;
dwNumOfValues: DWORD;
ID_LPSTR, chBuffer, hash, pass: array [0..255] of Char;
chData: array [0..255] of Byte;
sID: String;
lIDLen, lBufLen, lDataLen: DWORD;
ID: Cardinal;
key, I,J: Integer;
begin
lIDLen:= 256;
lBufLen:= 256;
lDataLen:= 256;
RegOpenKeyEx(HKEY_CURRENT_USER,szKeyID,0,KEY_QUERY_VALUE, RegKey);
FillChar(ID_LPSTR, 256, #0);
RegQueryValueEx(RegKey,'ID',0,0, PByte(@ID_LPSTR), @lIDLen);
ID:= 0;
sID:= StrPas(ID_LPSTR);
Val(sID, ID, ID);
key:= ID mod 256;
WriteLn('[M-Agent Password Recovery] author: execoma_ aka Alpatov_ xwt[at]mail.ru');
WriteLn('Delphi ported: 2006(C)Sax-mmS, icq: 272727765');
WriteLn('ID: ',ID, '; KEY: ', key);
RegOpenKeyEx(HKEY_CURRENT_USER,szKey,0,KEY_QUERY_VALUE, RegKey);
I:= 0;
while I >= 0 do
begin
FillChar(chBuffer, 256, #0);
FillChar(chData, 256, #0);
if RegEnumValue(RegKey, I, chBuffer, lBufLen,0, nil, PByte(@chData), @lDataLen) <> ERROR_SUCCESS then Break;
for J:= 4 to lDataLen-1 do
begin
hash[J]:= Chr(chData[J]);
chData[J]:= chData[J] xor key;
pass[J-4]:= Chr(chData[J]);
end;
CharToOem(pass, pass);
WriteLn('mail: ',chBuffer,'; pass: ',pass);
end;
RegCloseKey(RegKey);
ReadLn;
end.
function DecryptMRAPassword(const ID: Cardinal; Hash: String): String;
var
S: String;
I: Integer;
Key: Integer;
begin
Key:= ID mod 256;
S:= Copy(Hash, 5, Length(Hash));
Result:= S;
for I:= 1 to Length(S) do
Result[I]:= Chr(Ord(S[I]) xor Key);
end;
Странно... ты пытаешься копирнуть символы которых нет...S:= Copy(Hash, 5, Length(Hash));
S:= Copy(Hash, 5, Length(Hash)-5);
Ты сам-то понял, что написал? Твой код скопирует на 1 символ меньше чем надо, если уж на то пошло, то надоS:= Copy(Hash, 5, Length(Hash)-5);
S:= Copy(Hash, 5, Length(Hash)-4);