Autor |
Wiadomość |
haker512
Administrator
Dołączył: 07 Lut 2007
Posty: 58
Przeczytał: 0 tematów
Ostrzeżeń: 0/5 Skąd: Kłodawa
|
|
hasła w GG |
|
0. Wstęp
Tekst ten dla wielu może się wydawać jeszcze jednym z licznych, które dotyczą rozszyfrowania dość prostego "algorytmu" (o ile w ogóle można to tak nazwać) zapisywania haseł Gadu-Gadu w pliku konfiguracyjnym. Pod tym względem trudno być oryginalnym, bo wątek ten został już w dużej mierze wyczerpany. Zastanawia mnie jednak fakt, że do tej pory bardzo niewiele osób poruszyło temat jakim jest rozszyfrowanie hasła do profilu użytkownika (które jest kodowane zupełnie inaczej), a także odczytanie numeru Gadu-Gadu przynależnego do dowolnego pliku config.dat. Zdarzyć się przecież może, że "wpadnie komuś w ręce" plik konfiguracyjny, ale nie wiemy, z jakim numerem jest on skojarzony. Owszem... w sieci można znaleĽć mnogość programów, które nam ten numer wyciągną, więc w zasadzie problem nie istnieje. Jeśli jednak ciekaw jesteś jak te informacje można odczytać "ręcznie" (no... prawie ręcznie) zachęcam do lektury
1. Hasło na serwer
Hasło, za pomocą którego logujemy się na nasz numer jest zapisywane w pliku konfiguracyjnym za ciągiem 'Password2'. Po nim następują jeszcze dwa dodatkowe znaki (o kodach ASCII równych 0 i 2), po których następuje seria dużych liter alfabetu zakończona znakiem ASCII o kodzie 0. Wspomniana seria liter jest naszym zaszyfrowanym hasłem - jeśli jest ona w pliku nieobecna świadczy to o tym, że właściciel przeglądanego pliku config.dat ma wyłączoną w ustawieniach opcję 'Pamiętaj hasło'. W takim przypadku oznacza to tylko jedno - hasła na serwer nie odczytamy . Przeważająca ilość użytkowników korzysta jednak z funkcji jego pamiętania (w końcu komu by się chciało ciągle ręcznie logować do Gadu-Gadu? ).
Przypuśćmy zatem, że odnalazłeś ciąg 'Password2', zaś sekwencja literek ma następującą postać: IGBGDHMGPG
Pierwszą rzeczą, o której powinno się wiedzieć przy odczytywaniu hasła jest jego sposób zapisywania w pliku config.dat. Obowiązuje tutaj stała prawidłowość, że hasło n literowe w postaci zakodowanej ma 2n znaków. Nasz ciąg ma 10 znaków - oznacza to więc, że hasło w swej pierwotnej postaci to 5-znakowe słowo/kombinacja liter i cyfr. Nasuwa się w tym momencie pewne spostrzeżenie - każda litera/cyfra hasła jest kodowana w postaci dwuznakowej. Te dwa, bardzo banalne wnioski pozwalają w tym momencie samemu dojść do tego, jaką kobinacją dwuznakową jest reprezentowana każda litera/cyfra - wystarczy na podstawie własnego pliku config.dat podstawić za każdą literę odpowiedni dwuznakowy symbol, a następnie zmieniać hasła tak długo, aż uzyskamy cały "alfabet". Sprawa jest tym prostsza, ponieważ Gadu-Gadu nie zezwala na stosowanie w haśle serwera dużych liter i znaków specjalnych. Skraca to znacząco czas "ręcznego dekodowania".
Wypisanie tutaj całego alfabetu byłoby mało profesjonalne Istnieje prostsza metoda, którą można łatwo zaimplementować w swoim własnym programie "dekodującym".
Przytoczmy jeszcze raz odczytany ciąg literek: IGBGDHMGPG
Analizę naszego zakodowanego hasła możemy przeprowadzić w sposób następujący:
1. Rozpatrujemy pierwszy znak w naszym ciągu i znak po nim następujący (analizujemy pierwszą dwójkę)
2. W zależności od drugiego znaku zwiększamy/zmniejszamy kod ASCII pierwszego znaku
a) jeśli drugim znakiem jest 'D', zmniejszamy kod ASCII pierwszego znaku o 17
b) jeśli drugim znakiem jest 'G', zwiększamy kod ASCII pierwszego znaku o 31
c) jeśli drugim znakiem jest 'H', zwiększamy kod ASCII pierwszego znaku o 47
3. Przechodzimy do następnej dwójki znaków i postępujemy z nimi w identyczny sposób. Po przeanalizowaniu wszystkich par otrzymamy hasło w postaci pierwotnej.
Przeanalizujmy to na naszym przykładzie:
Ciąg literek składa się z 10 znaków - oznacza to, że hasło w pierwotnej postaci jest ciągiem 5-znakowym. PrzejdĽmy do rozszyfrowania każdego z nich po kolei.
Pierwszy znak:
1. Analizowaną dwójką jest 'IG'. Kod ASCII dużej litery 'I' to 73
2. Drugą literą tej pary jest 'G', dodajemy zatem do kodu litery 'I' 31 - naszym wynikiem jest 104 - kod ten odpowiada małej literze 'h'.
Drugi znak:
1. Rozptarywana para to 'BG'. Kod litery 'B' to 66.
2. Ponownie jako drugi znak występuje litera 'G', w związku z czym do kodu 'B' dodajemy 31 i otrzymujemy - 97 - kod litery 'a'.
Trzeci znak:
1. Dwójka znaków to 'DH', kod 'D' to 68.
2. Tym razem drugim znakiem jest 'H', w związku z czym dodajemy do kodu 'D' liczbę 47 i otrzymujemy 115, czyli kod 's'.
W analogiczny sposób z par 'MG' i 'PG' otrzymujemy litery 'l' oraz 'o'.
Po zestawieniu wszystkich otrzymanych znaków 'h' 'a' 's' 'l' 'o' widzimy, że roszyfrowane hasło to po prostu wyraz 'haslo'.
Fakt występowania cyfr w haśle nie zmienia sposobu postępowania. Pamiętajmy, że cyfry z zakresu 0-9 też mają swoje własne kody ASCII.
2. Hasło profilu
Może się to wydawać dosyć dziwne, ale hasło do profilu jest w pewnym sensie nieco lepiej ukryte przed dostępem ciekawskich. Pomijam tutaj już sam fakt, że jego długość może osiągnąć 50 znaków (w przypadku hasła sieciowego 15) i może zawierać znaki specjalne, jak też i mieszankę dużych i małych liter. Ten ciekawy paradoks wynika chyba z psychologicznego faktu, że dużo większym prawdopodobieństwem będzie próba włamania się do czyjegoś profilu z tego samego komputera (ot, choćby ciekawski braciszek dobierający się do konta siostrzyczki - pozdrowienia dla Piotra ), niż gdyby miało to nastąpić zdalnie (w końcu zdobycie czyjegoś pliku config.dat, to w gruncie rzeczy nieco większy wysiłek).
Hasło do profilu (o ile istnieje) jest zapisane tuż za ciągiem 'passwordstr' i dwoma znakami, o kodach ASCII 0 i 2. Następuje po nich seria mniej lub bardziej koszmarnie wyglądających krzaczków (w zależności od tego jak przeglądamy zawartość pliku - ja jestem nadal przywiązany do starego dobrego NC spod DOS'a ), zakończonych znakiem o kodzie 0. Te krzaczki to właśnie nasze hasło - ich ilość jest równa ilości znaków w haśle pierwotnym.
Poniżej widzimy fragment przykładowego pliku config.dat (otwartego w Hex Edytorze) w raz z zapisanym w nim hasłem profilu:
00000400 7061 7373 776F 7264 7374 7200 0297 9E8C passwordstr.....
00000410 9390 8F8D 9099 9693 8A00 7374 6172 7475 ..........startu
Obszar zakolorowany na czerwono to miejsce zapisu hasła (widzimy, że ma ono 15 znaków). Zauważ, że jest ono poprzedzone znakami o kodach 00H i 02H, a kończy się tuż przed znakiem o kodzie 00H.
Metoda kodowania jest w gruncie rzeczy bardzo prosta. Każda litera naszego hasła jest negowana i zapisywana w tej nowej postaci do pliku konfiguracyjnego. Przeanalizujmy powyższy przykład:
Patrząc na zamieszczony fragment pliku dochodzimy do wniosku, że hasło składa się z 15 znaków, przy czym ich zaszyfrowane odpowiedniki mają znaki ASCII o kodach (szesnastkowo i dziesiętnie):
~hex: 97 9E 8C 93 90 8F 8D 90 99 96 93 8A
~dec: 151 158 140 147 144 143 141 144 153 150 147 138
Kodowanie hasła polega na negacji kolejnych znaków hasła, więc aby je rozkodować należy każdy zaszyfrowany znak ponownie zanegować (jest to zgodne z jednym z praw algebry Boole'a - podwójna negacja zmiennej daje nam tą samą zmienną). Najprostszą metodą ręcznego zanegowania liczb w postaci szesnastkowej jest... użycie kalkulatora Obecnie każde współczesne liczydło elektroniczne ma możliwość wykonywania operacji logicznych na liczbach w dowolnym systemie. Można to jednak zrobić jeszcze inaczej... każda zanegowana liczba dziesiętna w naszym komputerze, to ta sama liczba ze znakiem '-' i pomniejszona o 1 (czyli np zanegowane 5 to -6, zanegowane 8 to -9 itd.). Dlaczego akurat tak? Wynika to ze sposobu zapisu ujemnych liczb binarnych w komputerze - stosowany jest do tego kod uzupełnienia do 2. W kodzie tym występuje tzw. bit znaku, który określa, czy dana liczba jest większa (bit znaku ustawiony na 0) bądĽ mniejsza (bit znaku ustawiony na 1) od zera.
WeĽmy przykładowo liczbę 15 i zanegujmy ją:
15 zapisane na 6 bitach (5 bitów + bit najstarszy jako bit znaku) ma postać:
001111
gdy powyższą liczbę zanegujemy, to otrzymamy:
110000
czyli faktycznie -16!
Jeśli nie wierzysz, że wszystko dzieje się tak jak tu opisałem, to napisz sobie prosty program w C i przetestuj .
PrzejdĽmy więc dalej do naszego przykładu...
Po dokonaniu negacji (~(~dec) == dec) dziesiętna postać kodów znaków będzie miała postać:
~hex: 97 9E 8C 93 90 8F 8D 90 99 96 93 8A
~dec: 151 158 140 147 144 143 141 144 153 150 147 138
dec: -152 -159 -141 -148 -145 -144 -142 -145 -154 -151 -148 -139
Tym oto sposobem otrzymaliśmy kody ASCII pierwotnych znaków w haśle. Niech nikogo nie dziwi fakt, że kod znaku jest tutaj ujemny - w końcu typ zmiennych char jest też typu signed i unsigned . Nie mniej wygląda to trochę dziwnie, tym bardziej, że typ signed char obejmuje wartości liczbowe z zakresu -127,127... tymczasem u nas występują liczby spoza tego zakresu. Jak sobie z tym poradzić?
Każdy kod ASCII charakteryzuje się tym, że powtarza się co 256 znaków. Oznacza to, że znak 'a' możemy przedstawić zarówno w postaci kodu ASCII 97 jak i 352. Analogiczna zasada dotyczy nas, gdy dysponujemy znakiem o ujemnym kodzie. Przesuńmy zatem nasze rozkodowane znaki o 256 i sprawdĽmy, co się pod nimi tak naprawdę kryje:
~hex: 97 9E 8C 93 90 8F 8D 90 99 96 93 8A
~dec: 151 158 140 147 144 143 141 144 153 150 147 138
dec: -152 -159 -141 -148 -145 -144 -142 -145 -154 -151 -148 -139
char: 104 97 115 108 111 112 114 111 102 105 108 117
'h' 'a' 's' 'l' 'o' 'p' 'r' 'o' 'f' 'i' 'l' 'u' <-- odpowiedniki kodów ASCII
W ten oto sposób otrzymaliśmy zakodowane hasło, które brzmi 'hasloprofilu'.
3. Numer Gadu-Gadu
Z numerem użytkownika sprawa jest już dużo prostsza - nie występuje on w postaci zakodowanej i wystarczy tylko wiedzieć, gdzie szukać. Tym razem poszukiwanym ciągiem w pliku config.dat jest 'Number' i następujące po nim znaki o kodach ASCII 0 i 1. Numer kończy się na znaku ASCII o kodzie 0 (standardowo, jak większość zapisanych w config.dat opcji).
Oto przykładowy fragment pliku otworzonego w Hex Edytorze:
000000D0 4E75 6D62 6572 0001 B8B8 0C00 5361 7665 Number......Save
000000E0 5077 6400 0101 0000 0044 6973 706C 6179 Pwd......Display
Jedynym problemem może być tutaj poprawne odczytanie liczby. Należy pamiętać, że komputer zapamiętuje je w odwrotnej kolejności. W związku z tym naszą liczbę, zapisaną powyżej w postaci B8B80C należy zinterpretować jako 0CB8B8! Przekładając to na język dziesiętny otrzymujemy zapisany numer Gadu-Gadu - w tym przypadku: 833720. Koniec
Hasła i numer Gadu-Gadu to rzecz jasna nie wszystko, co z config.dat możemy odczytać. Są tam też informacje takie jak domyślny status przy uruchomieniu, opis, rozmiary okna, hasło EraOmnix.... Sposoby odczytywania tych danych są analogiczne (o ile nie prostsze) do przedstawionych powyżej.
Post został pochwalony 0 razy
|
|
Pią 20:58, 09 Lut 2007 |
|
|
|
|
Gruby
Gość
|
|
|
Fajny sposub tylko że najpierw musimy zdobyć od kogoś plik config.dat a kto nam go prześle jerzeli wie że chcemy mu złamać chasło do gg
|
|
Pon 12:52, 21 Sty 2008 |
|
|
|
|
Możesz pisać nowe tematy Możesz odpowiadać w tematach Nie możesz zmieniać swoich postów Nie możesz usuwać swoich postów Nie możesz głosować w ankietach
|
|
|