![]() |
|
|
#1
|
|||
|
|||
|
Здравствуйте уважаемые прогеры!!!
Не буду скрывать... Идея возникла изначально для написания брутфорса... Но эта идея для этого немного не катит... А потом стало интересно... Ну скорость там и все такое... Нужно сделать алгоритм который бы генирил пароль по порядку... То есть например пароль из 4 символов... Значит нужно 0000..9999... Но с цифрами все просто... А вот как быть с остальными символами??? Заранее благодарю за ответы идеи и все что с этой темой связанно... |
|
#2
|
||||
|
||||
|
У каждого символа есть свой порядковый код...
Например: ! - 33 % - 37 c - 99 d - 100 Просто перечисляй коды символов... |
|
#3
|
|||
|
|||
|
Код:
const CR: string = '0' + '1' + '2' + '3' + '4' + '5' + '6' + '7' + '8' + '9'
+ 'Q' + 'q' + 'W' + 'w' + 'E' + 'e' + 'R' + 'r' + 'T' + 't'
+ 'Y' + 'y' + 'U' + 'u' + 'I' + 'i' + 'O' + 'o' + 'P' + 'p'
+ 'A' + 'a' + 'S' + 's' + 'D' + 'd' + 'F' + 'f' + 'G' + 'g'
+ 'H' + 'h' + 'J' + 'j' + 'K' + 'k' + 'L' + 'l' + 'Z' + 'z'
+ 'X' + 'x' + 'C' + 'c' + 'V' + 'v' + 'B' + 'b' + 'N' + 'n'
+ 'M' + 'm';Что значит перечисляй.??! оО... Если бы было все так просто уже сделал бы... 0001, 0002, 0003... 0009...000m. Далее нужно определить что символы закончились... И поменять пред последний символ... 0010... 001m... Но тут проблема в том... Что под каждый символ че то нехочится код писать... Может предложите алгоритм??? |
|
#4
|
||||
|
||||
|
Перечислить их можно при помощи цикла например...
var s : string; begin for i := 0 to 255 do //количество символов в кодировке ASCII s := #i;//присваеваем переменной символ end; как то так, нужно учесть что не все коды символов можно ввести с клавиатуры...типа #13, #10 символы конца строки и переноса каретки... можно перечислять в кодировке Юникод но там более 65000 символов, скорее всего большинтсво из них никто вводить не будет...а вот русские, английские буквы, цифры, и символы типа . , ) ( / * - + и т.д. есть в кодировке ASCII... з.ы. Дополнительная инфа тут http://ru.wikipedia.org/wiki/ASCII Последний раз редактировалось NIch, 21.10.2009 в 20:08. |
|
#5
|
||||
|
||||
|
Безполезная затея.
На брут 10-ти символьного пасса у тебя уйдет мин 184 года, на обычном компе. Как тебе такой пасс: cyfxfkfgjxbnfqfgjnjve;tdslevsdfqnfre.[htym ))))) |
|
#6
|
||||
|
||||
|
Ну это понятно...в большинстве случаев брут бесполезен. Для 4-х значного пароля число комбинаций около 4228200000...а 6-7 значный пароль практически невзламываем...
|
|
#7
|
||||
|
||||
|
Цитата:
Невзламный предложенным методом и на домашних компах, но это еще не значит что не существует других способов. |
|
#8
|
||||
|
||||
|
Ну да, если каждый китаец введет по одному паролю, то китай взломает пентагон)))простите за офтоп...
понятно есть распределенные вычисления, но в контексте данной темы, увы это так... |
|
#9
|
|||
|
|||
|
Я все конечно понимаю... Перебрать все невозможно и все такое... Но тут такая тема... Пользовался программой на домашнем компе для взлома пароля Windows... 10 000 000 комбинаций/сек... Так вот просто хочу посмотреть на скорость... А если еще научится использовать для этого графический проццесор... То в 25 раз быстрее... Мне нужен просто алгоритм... Пример... Хотя бы 4 символа... Спсибо Вам большое за горячее обсуждение Темы...
P.S. Я знаю приблезительные цифры времени за которое подберется пароль из 10 символов... И генерацию делать только по тем символам что Я указал Выше... |
|
#10
|
||||
|
||||
|
А вот так вас устроит?
Код:
Const
Symbol = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
procedure TForm33.FindCombination(S: String; Level: Integer);
Var
i: Integer;
begin
for i := 1 to Length(Symbol)
do begin
Label1.Caption := S + Symbol[i];
Application.ProcessMessages;
if Level < Length(Symbol)
then FindCombination(S + Symbol[i],Level+1);
end;
end;
procedure TForm33.Button1Click(Sender: TObject);
begin
FindCombination('',0);
end; |
|
#11
|
|||
|
|||
|
Да!!! Спасибо большое... Не думал что все так будет просто... Но как убрать нули в начале??.. Я думаю без генерации нулей в начале он будет работать гораздо быстрее!..
|
|
#12
|
||||
|
||||
|
Существенно быстрее он будет работать, если убрать вот эти две строчки:
Код:
Label1.Caption := S + Symbol[i];
Application.ProcessMessages; |
|
#13
|
|||
|
|||
|
Я немного подправил выше написанный код:
Код:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, sButton, syncobjs, comctrls, sGroupBox;
Const
Symbol = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
type
TForm1 = class(TForm)
sGroupBox1: TsGroupBox;
Button1: TButton;
sGroupBox2: TsGroupBox;
Memo1: TMemo;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
tnew = class(tthread)
private
protected
procedure execute; override;
end;
var
Form1: TForm1;
new1, new2: tnew;
implementation
{$R *.dfm}
procedure tnew.execute;
procedure FindCombination(S: String; Level: Integer);
Var
i: Integer;
begin
for i := 1 to Length(Symbol) do
begin
Form1.Memo1.Lines.Add(S + Symbol[i]);
if Level < Length(Symbol) then FindCombination(S + Symbol[i],Level+1);
end;
end;
begin
FindCombination('',0);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
new1 := tnew.create(true);
new1.freeonterminate := true;
new1.priority := {tphighest}tptimecritical;
new1.resume;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
new1.Suspend;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
Memo1.Lines.Clear;
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
new1.Suspend;
new1.Terminate;
end;
end.это даст возможность выполнения одновременно нескольких действий при подборе значений |
|
#14
|
|||
|
|||
|
А как насчет придумать самый быстрый алгоритм перебора пароля!?. Ну это так просто мысль!.. Несколько потоков... И там еще что нить!.. рекурсия... А какие еще есть методы... Где почитать??? Но в Любом случае огромное Всем спасибо!...
![]() |
|
#15
|
|||
|
|||
|
Можно каждый символ засунуть в поток во всей строке то есть 10 символов 10 потоков. Тока надо подумать как такое реализовать
|