Написал спамер на delphi

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by Империал, 7 Oct 2013.

Thread Status:
Not open for further replies.
  1. Империал

    Joined:
    11 Mar 2010
    Messages:
    1,224
    Likes Received:
    58
    Reputations:
    1
    Написал спамер на delphi но он почему то не хочет подключаться к SMTP серверу.
    Подскажите в чем проблема. Это на серверах стоит защита, или код кривой?

    Code:
    unit untMain;
    
    interface
    
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, Psock, NMsmtp, StdCtrls, IdWinsock, SmtpProt, IdBaseComponent,
      IdMessage, IdComponent, IdTCPConnection, IdTCPClient, IdMessageClient, IdSMTP,
      ExtCtrls, ComCtrls, Spin, Gauges;
    
    type
      TForm1 = class(TForm)
        Button1: TButton;
        Label1: TLabel;
        Edit1: TEdit;
        IdSMTP1: TIdSMTP;
        Bevel1: TBevel;
        Label2: TLabel;
        Memo1: TMemo;
        Label3: TLabel;
        ComboBox1: TComboBox;
        Label4: TLabel;
        Edit2: TEdit;
        Label5: TLabel;
        Edit3: TEdit;
        DateTimePicker1: TDateTimePicker;
        Label6: TLabel;
        SpinEdit1: TSpinEdit;
        Label7: TLabel;
        Label8: TLabel;
        Edit4: TEdit;
        SpinEdit2: TSpinEdit;
        Label9: TLabel;
        Progress: TGauge;
        Label10: TLabel;
        Edit5: TEdit;
        Button2: TButton;
        CheckBox1: TCheckBox;
        CheckBox2: TCheckBox;
        Label11: TLabel;
        SpinEdit3: TSpinEdit;
        Label12: TLabel;
        SpinEdit4: TSpinEdit;
        Label13: TLabel;
        SpinEdit5: TSpinEdit;
        Label14: TLabel;
        Label15: TLabel;
        Label16: TLabel;
        SpinEdit6: TSpinEdit;
        Label17: TLabel;
        SpinEdit7: TSpinEdit;
        Label19: TLabel;
        Sost: TLabel;
        Label20: TLabel;
        Gauge1: TGauge;
        procedure Button1Click(Sender: TObject);
        procedure FormCreate(Sender: TObject);
        procedure Button2Click(Sender: TObject);
        procedure CheckBox2Click(Sender: TObject);
        procedure CheckBox1Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
        Stoped: Boolean;
      end;
    
    var
      Form1: TForm1;
    
    implementation
    
    {$R *.dfm}
    
    {
    smtp - ip адрес smtp сервера
    port - порт smtp сервера, по умолчанию 25
    from - адрес отправителя
    dest - адрес получателя
    subject - тема письма
    body - текст писма
    Возвращает True если письмо было успешно отправленно...
    }
    
    function mail(smtp: string; port: integer; from, dest, subject,
      body: string): bool;
    const
      cl = #13#10;
    var
      WSAData: TWSAData;
      Host: TSockAddrIn;
      Sock: TSocket;
      res: Integer;
      buff: array[1..255] of Char;
    
      { отправляем данные через сокет }
      procedure senddata(str: string);
      var
        i: integer;
      begin
        for i := 1 to Length(str) do
          if send(Sock, str[i], 1, 0) = SOCKET_ERROR then
            exit;
      end;
    
      { получаем ответ от команды }
      function recvdata(accept: string): bool;
      var
        buff: array[1..255] of Char;
      begin
        res := recv(Sock, buff, SizeOf(buff), 0);
        Result := (Res = SOCKET_ERROR) or (Copy(buff, 1, 3) = accept);
      end;
    
    begin
      try
        result := false;
        { инициализация сокета }
        WSAStartUp(257, WSAData);
        Sock := socket(AF_INET, SOCK_STREAM, IPPROTO_IP);
        if Sock = INVALID_SOCKET then
          Exit;
    
        { устанавливаем хост и порт сервера }
        res := inet_addr(PChar(smtp));
        if res <= 0 then
          exit;
    
        Host.sin_family := AF_INET;
        Host.sin_port := htons(port);
        Host.sin_addr.S_addr := res;
    
        { подключаемся к серверу }
        if connect(Sock, Host, SizeOf(Host)) > 0 then
          Exit;
    
        { приветствие сервера }
        if not recvdata('220') then
          Exit;
    
        { EHLO }
        senddata('EHLO' + cl);
        if not recvdata('250') then
          Exit;
    
        { MAIL FROM: }
        senddata('MAIL FROM:' + from + cl);
        if not recvdata('250') then
          Exit;
    
        { RCPT TO: }
        senddata('RCPT TO:' + dest + cl);
        if not recvdata('250') then
          Exit;
    
        { DATA }
        senddata('DATA' + cl);
        if not recvdata('354') then
          Exit;
    
        { отправляем текст сообщения }
        senddata('Subject:' + subject + cl + cl + body + cl + '.');
        if not recvdata('250') then
          Exit;
    
        { отключаемся от сервера }
        senddata('QUIT' + cl);
    
        result := true;
      finally
        { убиваем сокет }
        closesocket(sock);
        WSACleanup;
      end;
    end;
    
    procedure TForm1.Button1Click(Sender: TObject);
    var
      Msg: TIdMessage;
      Count, i, tmp: Integer;
      Count2: Integer;
    
      function RandomString(Len: Integer): string;
      var
        i: Integer;
      begin
        Result := '';
        for i := 1 to Len do
          Result := Result + Chr(32 + Random(224));
      end;
    
      function RandomStringBody(Size: Integer): string;
      var
        i: Integer;
        SizeBody: Integer;
      begin
        Result := '';
        SizeBody := (Size - 1) * 1024;
        for i := 1 to SizeBody do begin
          Result := Result + Chr(32 + Random(224));
          Application.ProcessMessages;
        end;
      end;
    
    begin
      Count := SpinEdit2.Value;
      Progress.MaxValue := Count;
      Stoped := false;
      Count2 := SpinEdit6.Value;
      Gauge1.MaxValue := SpinEdit7.Value;
      IdSMTP1.Host := ComboBox1.Text;
      IdSMTP1.Port := SpinEdit1.Value;
      IdSMTP1.AuthenticationType := atLogin;
      IdSMTP1.UserId := Edit2.Text;
      IdSMTP1.Password := Edit3.Text;
      IdSMTP1.Connect;
      for i := Count - 1 downto 0 do begin
        Msg := TIdMessage.Create(nil);
        if not CheckBox2.Checked then
          Msg.Subject := Edit1.Text
        else
          Msg.Subject := RandomString(SpinEdit3.Value + Random(SpinEdit4.Value - SpinEdit3.Value));
        Msg.Recipients.EMailAddresses := Edit4.Text;
      //указываем адрес получателя
        Msg.From.Address := Edit5.Text;
        if not CheckBox2.Checked then
          Msg.Body.Text := Memo1.Text
        else
          Msg.Body.Text := RandomStringBody(SpinEdit5.Value);
        Msg.Date := DateTimePicker1.Date;
        if Stoped then Break;
        if IdSMTP1.Connected then
          IdSMTP1.Send(Msg);
        Msg.Free;
        Sost.Caption := 'отправляем';
        Progress.Progress := Count - i;
        Application.ProcessMessages;
        SpinEdit2.Value := i;
        if Count2 = 1 then begin
          Sost.Caption := 'пауза';
          tmp := GetTickCount;
          while GetTickCount <= tmp + SpinEdit7.Value * 1000 do begin
            if Stoped then Break;
            Gauge1.Progress := (GetTickCount - tmp) div 1000;
            Application.ProcessMessages;
          end;
          Gauge1.Progress := 0;
          if Stoped then Break;
          Count2 := SpinEdit6.Value;
        end
        else begin
          Count2 := Count2 - 1;
        end;
      end;
      IdSMTP1.Disconnect;
      Progress.Progress := 0;
      Sost.Caption := 'выполнено';
    end;
    
    procedure TForm1.FormCreate(Sender: TObject);
    begin
      DateTimePicker1.Date := Now;
    end;
    
    procedure TForm1.Button2Click(Sender: TObject);
    begin
      Stoped := true;
    end;
    
    procedure TForm1.CheckBox2Click(Sender: TObject);
    begin
      SpinEdit3.Enabled := CheckBox2.Checked;
      SpinEdit4.Enabled := CheckBox2.Checked;
      Edit1.Enabled := not CheckBox2.Checked;
      if not CheckBox2.Checked then begin
        Label11.Font.Color := clDkGray;
        Label12.Font.Color := clDkGray;
        Label15.Font.Color := clDkGray;
        Label1.Font.Color := clBlack;
      end
      else begin
        Label11.Font.Color := clBlack;
        Label12.Font.Color := clBlack;
        Label15.Font.Color := clBlack;
        Label1.Font.Color := clDkGray;
      end;
    end;
    
    procedure TForm1.CheckBox1Click(Sender: TObject);
    begin
      SpinEdit5.Enabled := CheckBox1.Checked;
      Memo1.Enabled := not CheckBox1.Checked;
      if not CheckBox1.Checked then begin
        Label13.Font.Color := clDkGray;
        Label14.Font.Color := clDkGray;
        Label2.Font.Color := clBlack;
      end
      else begin
        Label13.Font.Color := clBlack;
        Label14.Font.Color := clBlack;
        Label2.Font.Color := clDkGray;
      end;
    end;
    
    end.
    
    
    
     
  2. Jingo Bo

    Jingo Bo Member

    Joined:
    25 Oct 2009
    Messages:
    368
    Likes Received:
    51
    Reputations:
    7
    А зачем велосипедить тем более на Delphi, если там есть SMTP клиент от Indy? Ну если хочется на чистых сокетах, то так же смотрим реализацию Indy.
     
  3. Империал

    Joined:
    11 Mar 2010
    Messages:
    1,224
    Likes Received:
    58
    Reputations:
    1
    Причем тут SMTP клиент?
    Мне нужна прога для зафлуживания мыл плохих людей :)
     
  4. Kandi

    Kandi Member

    Joined:
    18 Nov 2009
    Messages:
    344
    Likes Received:
    17
    Reputations:
    0
    Честно сказать мне лень копировать и смотреть в чем трабла :)
    Но могу дать совет, довольно таки актуальный :rolleyes:
    Берёшь RFC 821 - SMTP и RFC 5321 - ESMTP - куришь их, если влом курить тогда Breakpoint Вам в помощь. Удачи в отладке ;)
    При отладке кода по-моему всегда реально найти свои ошибки.

    P.S. Если ты не хочешь лишнего гемороя, то проще найти пример отправки письма через Indy и создать циклический поток флуда :)

    А вообще вот: _http://pastebin.ru/rC3hNXe3

    Как то так короче, нашёл в своём старом проекте. разберёшься я думаю)
     
    #4 Kandi, 8 Oct 2013
    Last edited: 8 Oct 2013
  5. Kandi

    Kandi Member

    Joined:
    18 Nov 2009
    Messages:
    344
    Likes Received:
    17
    Reputations:
    0
    Я же скинул рабочий код, если ты умеешь создавать потоки и контролировать их действия - то я думаю проблем не составит написать консольную херню которая читает из файла и отправляет сообщения определённого типа)))
    Он даже с комментариями чувак :eek:
     
Loading...
Similar Threads - Написал спамер delphi
  1. Peja
    Replies:
    0
    Views:
    2,536
Thread Status:
Not open for further replies.