ďťż

Ładny brzuch

Witam. Piszę wtyczkę do komunikatora znajomego do obsługi GG i padłem już na wstępie. Chodzi o logowanie.

Informację czerpię z http://toxygen.net/l...protocol/#ch1.3
I problem:
Jaki bym nie wysłał pakiet czy też logował się przez SHA, algorytm GG otrzymuję pakiet GG_LOGIN_FAILED 0x0009

Procedura logowania:
var wd:wsadata; ad:sockaddr_in; Dane: ServInfo; Numer: Integer; Haslo: String; begin Numer:= NUMER; Haslo:= 'HASLO'; nr:= Numer; WSAStartup($101,wd); log('Inicjalizacja '+wd.szDescription); s:=socket(af_inet,sock_stream,ipproto_tcp); ad.sin_family:=af_inet; Dane:= PobierzIP(Numer); ad.sin_port:= nToHs(Dane.port); ad.sin_addr.s_addr:=Dane.ip; log('Podłączanie '+inet_ntoa(ad.sin_addr)+':'+inttostr(Dane.port)); if connect(s, ad, 16) = 0 then begin log('Połączono!'#13#10'Logowanie '+inttostr(nr)); recv(s, header, SizeOf(Header), 0); if (Header.typ = 1) then log('Pakiet: GG_WELCOME (1)') else log('Pakiet: Unknow ('+IntToStr(Header.typ)+')'); recv(s, gg_welcome, SizeOf(gg_welcome), 0); log('Ziarno: ' + IntToStr(gg_welcome.seed)); gg_login80.uin:= Numer; gg_login80.language:= 'pl'; gg_login80.hash_type:= '1'; gg_login80.hash := PChar(IntToStr(login_hash(haslo, gg_welcome.seed))+#0); //gg_login80.hash:= PChar(HashSHA1(haslo)+#0); gg_login80.status:= 2; gg_login80.flags:= 0; gg_login80.features:= $00000007; gg_login80.local_ip:= 0; gg_login80.local_port:= 0; gg_login80.external_ip:= 0; gg_login80.external_port:= 0; gg_login80.image_size:= 255; gg_login80.unknown2:= #64; //0x64 gg_login80.version_len:= $21; // 32; gg_login80.version:= 'Gadu-Gadu Client build 8.0.0.7669'; gg_login80.description_size:= 4; gg_login80.description:= 'abcd'; Header.typ:= 49; Header.size:= SizeOf(gg_login80); send(s, Header, sizeof(Header), 0); send(s, gg_login80, sizeof(gg_login80), 0); recv(s, header, SizeOf(Header), 0); log(IntToStr(Header.typ)); log(IntToStr(Header.Size)); if (Header.typ = 9) then log('Login Failed (9)') else if (Header.typ = 53) then log('Logik OK (53)') else log('Unknow');

A tak wygląda pakiet, który sobie przetłumaczyłem:
gg_login80: packed record uin: integer; { numer Gadu-Gadu } language: array[0..2]of char; { język: "pl" } hash_type: char; { rodzaj funkcji skrótu hasła } hash: PChar;//array[0..64] of char; { skrót hasła dopełniony \0 } status: integer; { początkowy status połączenia } flags: integer; { flagi (przeznaczenie nieznane) } features: integer; { opcje protokołu (0x00000007)} local_ip: integer; { lokalny adres połączeń bezpośrednich (nieużywany) } local_port: Word; { lokalny port połączeń bezpośrednich (nieużywany) } external_ip: integer; { zewnętrzny adres (nieużywany) } external_port: Word; { zewnętrzny port (nieużywany) } image_size: Byte; { maksymalny rozmiar grafiki w KB } unknown2: Char; { 0x64 } version_len: integer; { długość ciągu z wersją (0x21) } version: array[0..32] of Char; { "Gadu-Gadu Client build 8.0.0.7669" (bez \0) } description_size: integer; { rozmiar opisu } description: array[0..255] of Char; { opis (nie musi wystąpić, bez \0) } end;
Użytkownik DJ Mentos edytował ten post 09 maj 2009, 10:52
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • zsf.htw.pl
  •