Wyłączenie filtru antyspimowego GG

Jakiś czas temu spółka GG Network S.A. wprowadziła filtr antyspimowy w swoim komunikatorze. Jego działanie jak i sama wiadomość o wprowadzeniu takiego zabezpieczenia odbiła się szerokim echem po całej sieci.

Wielu użytkowników dopadło wielkie niezadowolenie, po wprowadzeniu tego zabezpieczenia, a ich frustracja i gorycz zalała sieć. W dużej mierze przez „dziwną” politykę firmy, a także mechanizm działania oraz pewne niedoskonałości w początkowej fazie działania filtru.

Działanie jest bardzo proste, gdy wiadomość od osoby nieznajomej zawiera link, zamiast pełnej wiadomości, otrzymamy odpowiednią notyfikację:

UWAGA: W trosce o bezpieczeństwo, w wiadomości od Nieznajomych 
podejrzane treści zastąpiono ciągiem "[xxxxx]". Jeśli chcesz otrzymywać 
od Nieznajomego kompletne wiadomości - dodaj go do swoich kontaktów.
 
Treść wiadomości:
[xxxxx]

Może nie wszyscy wiedzą i zdają sobie sprawę, że filtr można w prosty sposób wyłączyć. Nie, nie chodzi tutaj o dodanie nieznajomego do listy kontaktów, ale o całkowite wyłączenie funkcji filtru. Dokonać tego można (jedynie) w oryginalnym kliencie Gadu-Gadu 8. Służy do tego ostatni checkbox (Pokazuj linki od nieznajomych) na pierwszej zakładce (Komunikator) okna ustawień programu.

Dobrze, ale nie to jest głównym tematem niniejszej notki.

Filtr antyspamowy działa na serwerach Gadu-Gadu, przez co wszystkie programy korzystające z protokołu GG domyślnie pozwalają na filtracje wiadomości w każdej sesji z serwerem. Skoro filtr działa na serwerze i można go wyłączyć spod oryginalnego klienta Gadu-Gadu, to da się to zrobić w każdej innej aplikacji, wystarczy tylko poznać mechanizm powiadamiania serwera o przepuszczaniu wszystkich wiadomości do odbiorcy bez jakiejkolwiek ingerencji na serwerze.

Co mnie skłoniło do zaprzęgania sobie głowy jakimś tam filtrem gg?

Wszystko zaczęło się przez temat na forum wtw, dotyczący nieszczęsnego filtru, a dokładnie to informacja, że można to wyłączyć w oryginalnym kliencie i nie dowierzanie niektórych użytkowników. Nie udało mi się znaleźć nic na ten temat w dokumentacji protokołu, wiec pomyślałem, że sam to sprawdzę, podzielę się analizami i udowodnię innym, że jednak można ;)

W końcu taka informacja nie tylko mi się przyda (w przyszłości), ale także pozwoli uzupełnić opis protokołu.

No to chodźmy się pobawić

Odpalamy sniffera i bawimy się oryginalnym klientem, analizują generowanych przez nas ruch z/do komunikatora, podczas zabaw z opcjami komunikatora.

Reakcja na włączenie interesującej nas funkcji, czyli wyłączenia filtru oraz jest wysłanie do serwera poniższego pakietu:

0x0000   00 30 4F 3F 45 0C 00 0E-A6 CE 35 A2 08 00 45 00   .0O?E...¦Î5˘..E.
0x0010   00 72 A6 35 40 00 80 06-29 C4 C0 A8 00 FC 5B C5   .r¦5@.€.)ÄŔ¨.ü[Ĺ
0x0020   0D 23 10 C3 1F 8A 87 C2-F3 D6 48 8C 06 88 50 18   .#.Ă.Š‡ÂóÖHŚ.ˆP.
0x0030   BC C0 A8 E2 00 00 38 00-00 00 42 00 00 00 04 40   ĽŔ¨â..8...B....@
0x0040   00 00 01 00 80 00 36 00-00 00 68 74 74 70 3A 2F   ....€.6...http:/
0x0050   2F 77 77 77 2E 67 61 64-75 2D 67 61 64 75 2E 70   /www.gadu-gadu.p
0x0060   6C 2F 70 6F 62 69 65 72-7A 20 0A 57 69 64 7A 69   l/pobierz .Widzi
0x0070   61 C5 82 65 C5 9B 20 4E-6F 77 65 20 47 47 3F 20   ałeś Nowe GG? 

Podobnie w przeciwnym przypadku, wyłączenia pokazywania – włączenia filtru na serwerze:

0x0000   00 30 4F 3F 45 0C 00 0E-A6 CE 35 A2 08 00 45 00   .0O?E...¦Î5˘..E.
0x0010   00 72 A6 53 40 00 80 06-29 A6 C0 A8 00 FC 5B C5   .r¦S@.€.)¦Ŕ¨.ü[Ĺ
0x0020   0D 23 10 C3 1F 8A 87 C2-F4 20 48 8C 06 88 50 18   .#.Ă.Š‡Âô HŚ.ˆP.
0x0030   BC C0 28 99 00 00 38 00-00 00 42 00 00 00 04 40   ĽŔ(™..8...B....@
0x0040   00 00 01 00 00 00 36 00-00 00 68 74 74 70 3A 2F   ......6...http:/
0x0050   2F 77 77 77 2E 67 61 64-75 2D 67 61 64 75 2E 70   /www.gadu-gadu.p
0x0060   6C 2F 70 6F 62 69 65 72-7A 20 0A 57 69 64 7A 69   l/pobierz .Widzi
0x0070   61 C5 82 65 C5 9B 20 4E-6F 77 65 20 47 47 3F 20   ałeś Nowe GG? 

W celu łatwiejszego odróżniania poszczególnych części pakietu, wyszarzano nagłówki ramki ethernetowej, protokołu TCP oraz IP, informacje te dla nas nie są zbyt istotne. Kolorem ciemno-czerwonym zaznaczono pierwsze 8 bajtów pakietu protokołu GG – nagłówek, a pozostała cześć to dane pakietu.

Zgodnie z opisem protokołu, pierwsze 4 bajty nagłówka określają typ pakietu, czyli identyfikujemy nasz pakiet jako informacja o zmianie naszego statusu – 0x0038 przez co cały pakiet możemy odwzorować jako poniższą strukturę języka C:

struct gg_new_status80 {
	int status;             /* na jaki zmienić? */
	int flags;              /* flagi (nieznane przeznaczenie) */
	int description_size;   /* rozmiar opisu */
	char description[];     /* opis (nie musi wystąpić, bez \0) */
};

Porównując dokładnie oba pakiety (bajt po bajcie) możemy wywnioskować, że zmianie ustawień programu, odpowiada zmiana 15-tego bajtu pakietu. Zgodnie z strukturą pakietu statusu, bajt ten jest częścią liczby 32-bitowej odpowiedzialnej za flagi, czyli dodatkowe właściwości/opcje statusu – kolor ciemno-zielony na dumpie pakietu.

W opisie protokołu pole flags opisane jest jako nieznane przeznaczenie, więc udało nam się odkryć jedną z możliwości tego pola. Wartość 0x0080000 wyłącza filtr antyspimowy, a 0x00000001 nadal pozostaje nieznane, aczkolwiek, chyba zawsze ustawiony jest ten bit w wersji 8 klienta Gadu-Gadu.

dodano @ 16:00

A jednak w opisie protokołu jest wzmianka o wartości 0x0080000, ale tylko dla pola flags pakietu logowania. Z szybkiej analizy wnioskuje, że zawiera te same wartości co pakietu ustawiania statusu. Zatem możemy także już podczas logowania określić, czy chcemy cenzurowane linki, ale aby podtrzymać ten status cenzora, przy każdej zmianie statusu należy ustawiać żadaną wartość maski bitowej. W przeciwnym razie, ustawienie statusu „nadpisze” opcje dla filtru wysłane podczas logowania.

3 przemyślenia nt. „Wyłączenie filtru antyspimowego GG”

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *