Jako że koniec lipca zbliża się wielkimi krokami, trzeba było zaakceptować nowy regulamin GG. Sprawę utrudnił fakt że konto zakładałem około 10 lat temu i nie pamiętałem do niego hasła. Ba, nie pamiętałem też maila na który zakładałem konto. Forum WTW było również niepomocne – pomimo wielu wątków z tym związanych odpowiedź zawsze była jedna: „masz pecha, trzeba było sobie zapisać”. W takim razie trzeba poradzić sobie hakierstwem.
Zacząłem od programu Snadboy Revelation w celu odsłonięcia „gwiazdek” w settingsach, jednak nie chciał on działać. Odpaliłem hex edytor i w pliku protoGG.config u góry znalazłem nieprzyjazny nagłówek „WTW2SDB20”. Nie jest to oznaczenie żadnego typowego formatu, więc to jakiś wynalazek Kaworu. W pliku występują naprzemiennie: nazwa klucza i jego zakodowana binarnie wartość. Sposób kodowania nie był dla mnie oczywisty, więc trzeba było ugryźć temat inaczej. Zanotowałem sobie nazwy kluczy „GG/User” i „GG/Pass” po czym zacząłem szukać czegoś do podglądania pamięci procesów. Po drodze w internecie dokopałem się do zgłoszenia na bugtrackerze, w którym SDB sprawdza sumę kontrolną ustawień i ich nie używa jeśli się nie zgadza. Cóż za kunszt programistyczny! Czuję się trochę usprawiedliwiony, że poległem batalii z autorem WTW.
Tutaj pierwsze co przyszło mi do głowy to WinHack 2.0, którego używałem jeszcze do hakierowania Soul Reavera. Niestety nie chce on działać na 64-bitowym Windowsie 10. W ciągu godziny nie dokopałem się do żadnej alternatywy, która pozwoliłaby wygodnie przeszukiwać RAM procesu, więc zmieniłem taktykę.
Zacząłem szukać jakiegoś sniffera, żeby przeczytać hasło bezpośrednio z pakietów. W internecie można znaleźć starutkie źródła pluginu do Wiresharka, ale jako że nie znalazłem wersji binarnej pozostawiłem ten trop na później, bo może dokopię się do wygodniejszego rozwiązania. Po drodze natrafiłem na dokumentację libGadu. Okazuje się że numer GG jest przesyłany jako 32-bitowy int, zaś hasło szyfrowane w SHA-1 z użyciem saltu wysyłanego przez serwer na dzień dobry. Jest to jakaś informacja – WTW bankowo na użytek wewnętrzny ma dostęp do pełnego hasła.
Ściągnąłem SDK WTW żeby poszukać jakichś wskazówek co do sposobu zapisu konfigu. Tu nic ciekawego nie znalazłem, ale dokopałem się do źródeł różnistych wtyczek leżących na Bitbuckecie. We wtyczce protoBonjour znalazłem coś, co wydaje mi się, że należy do odczytywania i zapisu settingsów – funkcje get/set podzielone są na zwracane typy danych. Pamiętając docsy libGadu stwierdziłem, że numer gg jest zapisywany jako int, zaś hasło najpewniej jako string. I wtem przyszedł mi szatański pomysł do głowy: co się stanie, jeśli podmienię ze sobą w konfigu etykiety „GG/User” i „GG/Pass”?
Pisałem coś wcześniej na temat kunsztu. Tak, to prawdziwe hasło – już dawno przeze mnie zmienione oczywiście.
4 Responses to Wyciągnięcie hasła GG z WTW