Добро пожаловать! Это — архивная версия форумов на «Хакер.Ru». Она работает в режиме read-only.
 

ICQ: расшифровка MainLocation

Пользователи, просматривающие топик: none

Зашли как: Guest
Все форумы >> [Для начинающих] >> ICQ: расшифровка MainLocation
Имя
Сообщение << Старые топики   Новые топики >>
ICQ: расшифровка MainLocation - 2008-03-12 19:25:40.480000   
skalgar

Сообщений: 3
Оценки: 0
Присоединился: 2008-03-06 15:16:08.523333
По этой ссылке http://forum.asechka.ru/showthread.php?p=103289 приведен алгоритм расшифровки пароля ICQ из значения MainLocation в реестре. Т.к. я в дельфях не смыслю, по алгоритму (ниже кода) возникает вопрос: в качестве ключа для DES использовать md5 (в тексте не уточнено)  от UIN или от ID жесткого диска? Если нет, то от чего?

З.Ы. Прошу не предлагать софтину и разных пинчей для доставания паролей. Мне нужно знать алгоритм досканально.
Post #: 1
RE: ICQ: расшифровка MainLocation - 2008-03-13 17:05:08.673333   
skalgar

Сообщений: 3
Оценки: 0
Присоединился: 2008-03-06 15:16:08.523333
Хорошо, т.к. я не вижу, что бы кто-либо из просмотревших людей знает ответ, то задам вопрос немного по-другому. Кто сможет данный код хотя бы разъяснить или перевести на Си++?
procedure DecryptPass(dwVolumeSerial: LongWord; lpMainLocation: Pointer; dwMainLocationLen: LongWord; lpszUIN: String);
var
  key: array[0..15] of Byte;
  md5: TDCP_md5;
  UIN: LongWord;
  Cipher: TDCP_des;
  result: array[0..16] of Byte;
  L, i, j: Integer;
begin
  try
    UIN := StrToInt(lpszUIN);
  except
    if dwMainLocationLen > 0 then
      PByte(lpMainLocation)^ := 0;
    Exit;
  end;
 
  if (dwMainLocationLen <> 8) and (dwMainLocationLen <> 16) then begin
    if dwMainLocationLen > 0 then
      PByte(lpMainLocation)^ := 0;
    Exit;
  end;
 
  md5 := TDCP_md5.Create(nil);
  md5.Init;
  md5.Update(dwVolumeSerial, 4);
  md5.Update(UIN, 4);
  md5.Final(key);
  md5.Burn;
  md5.Free;
 
  Cipher := TDCP_des.Create(nil);
  Cipher.Init(key, 64, nil);
  FillChar(Result, SizeOf(Result), 0);
  Cipher.DecryptECB(lpMainLocation^, result);
  if dwMainLocationLen = 16 then
    Cipher.DecryptECB(Pointer(LongWord(lpMainLocation)+8)^, result[8]);
  Cipher.Burn;
  Cipher.Free;
 
  L := StrLen(@Result[0]);
  if L < 3 then
    Move(result[0], lpMainLocation, L+1)
  else begin
    if (result[((L-2) shr 1)] in [$30..$34]) and (result[((L-2) shr 1)+1] in [$30..$34]) then begin
      for j := 1 to 2 do for i := (L-2) shr 1 to L-1 do result := result[i+1];
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Move(result[0], lpMainLocation^, L-1);
&nbsp;&nbsp;&nbsp; end else
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PByte(lpMainLocation)^ := 0;
&nbsp; end;
end;
Post #: 2
RE: ICQ: расшифровка MainLocation - 2008-03-13 17:18:11.093333   
dos 999

Сообщений: 331
Оценки: 0
Присоединился: 2007-12-17 10:49:07.556666
В этом коде нехватает самого типа TDCP_md5
полностью юнит в студию =)
Post #: 3
RE: ICQ: расшифровка MainLocation - 2008-03-13 18:09:37.936666   
skalgar

Сообщений: 3
Оценки: 0
Присоединился: 2008-03-06 15:16:08.523333
http://www.delphi32.com/vcl/3266/download,xid,3266.asp
тут либа (DCPCrypt) с функциями, использованными в коде 8|
Post #: 4
Страниц:  [1]
Все форумы >> [Для начинающих] >> ICQ: расшифровка MainLocation







Связаться:
Вопросы по сайту / xakep@glc.ru

Предупреждение: использование полученных знаний в противозаконных целях преследуется по закону.