Ten prosty skrypt pozwala odzyskać zapomniane hasło dla numeru komunikatora Gadu-Gadu oraz hasło zabezpieczające profil użytkownika. Dekoder Gadu-Gadu został już użyty 12260 razy.
Gadu-Gadu to polski komunikator internetowy wykorzystujący własnościowy protokół komunikacyjny.
Gadu-Gadu był najpopularniejszym komunikatorem w latach 90 i 2000 w Polsce, z łączną liczbą 15 milionów zarejestrowanych użytkowników i średnią liczbą 6.5 miliona dziennie aktywnych użytkowników.
Pierwsze wersje Gadu-Gadu trzymały ustawienia użytkownika jak hasło do logowania i hasło do profilu na komputerze w pliku konfiguracyjnym, wykorzystując do tego celu prosty algorytm szyfrujący.
Wykorzystanie inżynierii wstecznej pozwoliło na odzyskanie jego kodu źródłowego.
Poniższy dekoder pozwala na odtworzenie obu haseł oraz numeru użytkownika z tegoż pliku konfiguracyjnego.
* Zdekodowane dane nie są zapisywane na tej stronie. Jeśli w to nie wierzysz, możesz równie szybko zmienić hasło po jego rozkodowaniu.
Hasła sa dekodowane bezpośrednio z pliku konfiguracyjnego config.dat, plik ten zazwyczaj można znaleźć w katalogach:
System operacyjny | Ścieżka pliku |
---|---|
Windows Vista / 7 / 8 / 10 | C:\Users\Profil\Gadu-Gadu\Użytkownik\config.dat |
Windows NT/XP | C:\Documents and Settings\Profil\Gadu-Gadu\Użytkownik\config.dat |
Windows 9x/ME | C:\Program Files\Gadu-Gadu\users\Username\config.dat |
Minęło wiele lat od czasów świetności Gadu-Gadu dlatego ze względów historycznych postanowiłem opublikować algorytm dekodowania hasła poddany inżynierii wstecznej w języku programowania PHP.
////////////////////////////////////////////////////////////////////////////////
//
// zamien z 1025 na ISO
//
////////////////////////////////////////////////////////////////////////////////
public static function convert_pl($text)
{
$pol = [ "ą", "ę", "ó", "ł", "ń", "ś", "ż", "ź", "ć", "Ą", "Ę", "Ó", "Ł", "Ń", "Ś", "Ż", "Ź", "Ć" ];
$eng = [ "±", "ę", "ó", "ł", "ń", "¶", "ż", "Ľ", "ć", "ˇ", "Ę", "Ó", "Ł", "Ń", "¦", "Ż", "¬", "Ć" ];
return str_replace($pol, $eng, $text);
}
////////////////////////////////////////////////////////////////////////////////
//
// znajdz numer UIN uzytkownika
//
////////////////////////////////////////////////////////////////////////////////
public static function find_gg_uin($configfile, $size)
{
$uin = "";
for ($i = 0; $i < $size - 6; $i++)
{
if ($configfile[$i + 0] == 'N' &&
$configfile[$i + 1] == 'u' &&
$configfile[$i + 2] == 'm' &&
$configfile[$i + 3] == 'b' &&
$configfile[$i + 4] == 'e' &&
$configfile[$i + 5] == 'r')
{
$j = $i + 5 + 3;
$uin = ord($configfile[$j + 0]) + (ord($configfile[$j + 1]) << 8) + (ord($configfile[$j + 2]) << 16) + (ord($configfile[$j + 3]) << 24);
if ($uin >= 4294967294) $uin -= 4294967296;
break;
}
}
return $uin;
}
////////////////////////////////////////////////////////////////////////////////
//
// znajdz haslo do logowania do GG
//
////////////////////////////////////////////////////////////////////////////////
public static function find_gg_password($configfile, $size)
{
$password = "";
for ($i = 0; $i < $size - 9; $i++)
{
if ($configfile[$i + 0] == 'P' &&
$configfile[$i + 1] == 'a' &&
$configfile[$i + 2] == 's' &&
$configfile[$i + 3] == 's' &&
$configfile[$i + 4] == 'w' &&
$configfile[$i + 5] == 'o' &&
$configfile[$i + 6] == 'r' &&
$configfile[$i + 7] == 'd' &&
$configfile[$i + 8] == '2')
{
$j = $i + 8 + 3;
while(ord($configfile[$j]) != 0x00)
{
$password .= $configfile[$j];
$j++;
}
if (!empty($password))
{
$decoded = "";
for ($j = 0; $j < strlen($password) / 2; $j++)
{
$decoded .= chr( (ord($password[$j << 1]) - 0x41 ) | ( (ord($password[ ($j << 1) + 1 ]) - 0x41) << 4 ) );
}
$password = static::convert_pl($decoded);
break;
}
}
}
return $password;
}
////////////////////////////////////////////////////////////////////////////////
//
// znajdz haslo do logowania do profilu uzytkownika na komputerze
//
////////////////////////////////////////////////////////////////////////////////
public static function find_gg_profile_password($configfile, $size)
{
$password = "";
for ($i = 0; $i < $size - 11; $i++)
{
if ($configfile[$i + 0] == 'p' &&
$configfile[$i + 1] == 'a' &&
$configfile[$i + 2] == 's' &&
$configfile[$i + 3] == 's' &&
$configfile[$i + 4] == 'w' &&
$configfile[$i + 5] == 'o' &&
$configfile[$i + 6] == 'r' &&
$configfile[$i + 7] == 'd' &&
$configfile[$i + 8] == 's' &&
$configfile[$i + 9] == 't' &&
$configfile[$i +10] == 'r')
{
$j = $i + 10 + 3;
while(ord($configfile[$j]) != 0x00)
{
$password .= chr( ord($configfile[$j]) ^ 0xFF);
$j++;
}
if (!empty($password))
{
$password = static::convert_pl($password);
break;
}
}
}
return $password;
}
Jeśli chciałbyś zapytać o cokolwiek dotyczącego dekodera haseł Gadu-Gadu, coś jest niejasne lub chciałbyś jakichś ulepszeń napisz do mnie. Z chęcią odpowiem na każde pytanie.