Jaki jest algorytm hashowania w GG v6.0

Adam Boduch

Oto kod, który został podany przez użytkownika Piechnata hashujący hasło w popularnym komunikatorze Gadu-Gadu. Taka funkcja jest potrzebna aby połączyć się z serwerem GG.

function GGLoginHash(Pass: string; Seed: Cardinal): Cardinal;
var
   x, y, z, i : Cardinal;
begin
   y := Seed;
   x := 0;
   for i := 1 to Length(Pass) do begin
      x := (x and $ffffff00) or Ord(Pass[i]);
      y := y xor x;
      Inc(y, x);
      x := x shl 8;
      y := y xor x;
      x := x shl 8;
      Dec(y, x);
      x := x shl 8;
      y := y xor x;
      z := y and $1f;
      y := (y shl z) or (y shr (32 - z));
   end;
   Result := y;
end; 
FAQ

8 komentarzy

w tym samym pakiecie jest - 4 bajty = 0x001 potem 4 bajty zawierające długość pakietu (0x004) następne 4 bajty to seed

0x001
0x004
0x??? <-- seed

ogólnie odbierz pakiet długości 12 bajtów

ja niestety nie rozumiem skad wziac zmienna seed, lacze sie z serwerem gg na porcie 8074, otrzymuje pakiet 0x0001, potem powinienem dotac Seed a tu nic, lacze sie przez TClientSocket

A jak sie dobiera Seed, zeby porownac text zakodowany wczesniej z kodowanym teraz?

komponent można ściągnąć tutaj:
http://szymekns.republika.pl/gg/TGaduGadu.zip

Następnym razem troszeczke poszukajcie zanim zadacie pytanie "skąd to można pobrać?"

TGaduGadu albo TGGLite- skąd go wziąć???

To jak nie wiesz jak można go wykorzystać to raczej Ci się nie przyda...

a skąd to wźiąć(TGaduGadu) ?? tak <ort>wogóle</ort> to jak można ten algorytm <ort>wykorzuystać</ort>??

:P
Jesli ktoś jest leniwy to polecam TGaduGadu albo TGGLite.