Jakub 'darkjames' Zawadzki napisał(a):
> +struct gg_login70 {
> + uint32_t uin; /* mój numerek [gg_login60] */
> + uint8_t dunno0; /* 02 */
> + unsigned char hash[20]; /* sha1 [haslo i seed] */
> + unsigned char empty[44]; /* ??? duzo 00 ??? */
Pokombinowałem, pohakowałem libgadu i już wiem, że to wygląda tak:
struct gg_login70 {
uint32_t uin;
uint8_t hash_type;
uint8_t hash[64];
/* ... */
} GG_PACKED;
Nieznana zmienna określa rodzaj hasha. 0x01 to dotychczasowy, 32-bitowy
hash, 0x02 to SHA-1. Pakiet od razu zawiera miejsce na większe hashe
(SHA-512?), stąd duża liczba zer. Jeśli poda się inny rodzaj hasha niż
0x01 i 0x02, serwer zwraca pakiet typu 0x16. Możliwe, że to informacja o
tym, że dana metoda hashowania jest niedostępna i należy spróbować
starszej, bo np. z powodów ,,technicznych'' zrezygnowano z nowego,
64-krotnego hashowania SHA-512, dla pewności poczwórnie szyfrowanego za
pomocą RSA z 2048-bitowym kluczem.
I tak właściwie to jestem zdania, że jeśli mamy obsługiwać nowy sposób
logowania to od razu domyślnie. Gadu-Gadu jeszcze nigdy się nie wycofało
z nowości w protokole, nie licząc SSL/TLS z wersji beta.
w.
_______________________________________________
libgadu-devel mailing list
[email protected]
http://lists.ziew.org/mailman/listinfo/libgadu-devel