Показать сообщение отдельно

  #29  
Старый 11.06.2009, 13:17
dos999
Познающий
Регистрация: 15.02.2008
Сообщений: 98
С нами: 9598011

Репутация: 50
По умолчанию

Программа генератор словарей для брута (со своими особенностями)
особенность программы в том что для каждого символа можно задать множество значений которые он может принимать. программ для генерирования словарей полно, но иногда требуется именно такая. например мне как то потребовалось подобрать пароль к архиву, но я знал что 3 и 4 символы пароля цифры, что набиральсь всё маленькими буквами и что последний символ "*".
Пишем в Delphi
Итак:
помещаем на форму пару Edit'ов, Button, Label и StringGrid (с 2 столбцами и 5 строками, свойства ColCount, RowCount).
создаём класс TPasses
Код:
 type

  TPas = class
  private
    FNum: Integer;
    FValues: String;
  public
    property Num: Integer read FNum write FNum;
    property Values: String read FValues write FValues;
  end;

  TPasses = array of TPas;
при создании формы нам нужно привести Grid в нормальный вид
Код:
 procedure TForm1.FormCreate(Sender: TObject);
var
  i: Integer;
begin
  StringGrid1.Cells[0, 0] := '№';
  StringGrid1.Cells[1, 0] := 'набор значений';
  for i := 1 to StringGrid1.RowCount do
    StringGrid1.Cells[0, i] := IntToStr(i);
Edit1 будет содержать путь к файлу в который будем сохранять наши пароли.
Edit2 содержит число - количество символов в пароле.

меняем число в Edit2, меняется и количество строк в StringGrid.
на событие OnChange объекта Edit2 вешаем процедуру.
Код:
procedure TForm1.Edit2Change(Sender: TObject);
var
  i: Integer;
begin
  StringGrid1.RowCount := StrToInt(Edit2.Text) +1;
  for i := 1 to StringGrid1.RowCount do
    StringGrid1.Cells[0, i] := IntToStr(i);
end;
Сл. процедура сохраняет в файл то что ей передали (и заодно отображает в нашем Label'е)
Код:
 procedure TForm1.AddToFile(rec: String);
var
  AFile: TextFile;
begin
  if Length(rec)= StringGrid1.RowCount-1 then
  begin
    Label1.Caption := rec;
    Application.ProcessMessages;
    Assignfile(AFile,Edit3.Text);
    if fileexists(Edit3.Text) = false then
      rewrite(AFile)
    else Append(AFile);
    writeln(AFile, rec);
    closefile(AFile);
  end;
end;
Процедура GetPasses генерирует пароли
Код:
function TForm1.GetPasses: TPasses;
var
  i: Integer;
  Pas: TPas;
begin
  SetLength(Result, StringGrid1.RowCount-1);
  for i := 1 to StringGrid1.RowCount - 1 do
  begin
    Pas := TPas.Create;
    Pas.Num := StrToInt(StringGrid1.Cells[0, i])-1;
    Pas.Values := StringGrid1.Cells[1, i];
    Result[i-1] := Pas;
  end;
end;
Процедура GetWords рулит всем вышеперечисленным.
Код:
procedure TForm1.GetWords(srt: String; Num: Integer);
var
  i: Integer;
  ss: TPasses;
  s: String;
begin
  ss := GetPasses;
  for i := 1 to Length(ss[Num].Values) do
  begin
    s := srt + ss[Num].Values[i];
    AddToFile(s);
    if ((Num+1) <= (StringGrid1.RowCount-2)) then
      GetWords(s, Num+1);
  end;
end;
её и ставим на нашу кнопку
Код:
procedure TForm1.Button1Click(Sender: TObject);
begin
  GetWords('', 0);
end;
в итоге получаеться что то такое
прога сэкономила мне кучу времени, надеюсь и вам поможет.
пишите или качайте:
http://depositfiles.com/files/cdppt65z1
 
Ответить с цитированием