Программа генератор словарей для брута (со своими особенностями)
особенность программы в том что для каждого символа можно задать множество значений которые он может принимать. программ для генерирования словарей полно, но иногда требуется именно такая. например мне как то потребовалось подобрать пароль к архиву, но я знал что 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