![]() |
Пишем простого троя
Пишем простого троя .:: [0] Введение::. Написать статью решил потому что РЕАЛЬНО ЗАДРАЛИ ТЕМЫ ПРО ПИНЧА и подобных народных троев… Хотя бы один раз в неделю кто-то спросит - а как же всё таки его настроить!! И ничего как видно не помогает ни минусики к репе, ни предложения сконфигурировать троя за wmz ;)))) Так вот я попытаюсь в доходчивой форме рассказать как можно написать маленького скудненького в возможностях но СВОЕГО троя, который будет тырить сохранённые пароли из QiP’а. Отправка будет осуществляться на прямой ip что в принципе не безопасно (могут найти и настучать по голове) - но в ознакомительной форме и для некоторых задач он прокатит. (Мною он был с успехом применён в университетской локалке для угона пассов с компа препода-админа =) ). И так мы уже определисиль, что трой будет состоять из двух частей : (1) Сервер и (2) Сам трой. Трой не будет прописываться ни в реестр ни в автозапуск (если захотите сами сделаете – инфы море), а просто при запуске отсылает пароли (и/или другую конфиденциальную информацию это уже что прикрутите сверху) на сервер который должен быть включён и настроен к работе. Писать мы будем на Делфи. .:: [1] Немного теории (а куда ж без неё)::. И так писать мы будем с использованием winsock api – так что про всякие закладки панели инструментов со всякими новомодными компонентами забываем сразу – написаный с их помощью код принесёт нам 600 кб – классненький трой получается =)). А так мы достигнем малого веса и вообще писать на низком уровне даёт большую гибкость да и научишься большему ;)). Значит в Windows для работы с сокетами есть специальная библиотека winsock.dll. С ней мы и будем работать . Для реализации работы с ней существует файл заголовков всех её процедур и функций winsock.pas. Познакомимся с некоторыми из них которые будут использованы в проекте : :: function wsastartup(wversionrequired: word; var wsdata: twsadata): integer; stdcall; Функция сообщает ОС, что в любом процессе приложения могут быть использованы функции winsock. Функция должна быть вызвана один раз при запуске приложения перед использованием любой функции winsock. :: function wsacleanup: integer; stdcall; Функция сообщает ОС, что приложение более не использует winsock. Должна быть вызвана в конце проги. :: function socket(af, struct, protocol: integer): tsocket; stdcall; Функция создает сокет. Входящий параметр af - Тип используемой адресации –нас интересует Интернет поетому нам надо использовать PF_INET или AF_INET. Различи в типе работы : соответственно синхронная и асинхронная. Мы будем использовать синхронную работу так как она проще в реализации . =) struct - спецификация типа нового сокета . Может принимать значения sock_stream – для TCP (с надежным соединением) sock_dgram- для UDP (не производящий соединений) protocol - тип протокол, который будет использоваться сокетом.Здесь значений много. Мы будем исползовать ipproto_ip. Если функция выполнена без ошибок, она возвращает дескриптор на новый сокет, если ошибки есть, возвращается invalid_socket. :: function connect(s: tsocket; var name: tsockaddr; namelen: integer): integer; stdcall; Функция соединения для клиента. Структура адреса содержит порт (необходимо привести функцией htons) и адрес (для клиента необходимо привести из имени или спецификации ip4 - xxx.xxx.xxx.xxx).Для тестинга будем использовать 127.0.0.1. :: function bind(s: tsocket; var addr: tsockaddr; namelen: integer): integer; stdcall; Функция биндит сокет (ассоциирует адрес и порт с сокетом). Структура адреса содержит порт (необходимо привести функцией htons) и адрес (для сервера мы укажем inaddr_any – то есть любой). :: function send(s: tsocket; var buf; len, flags: integer): integer; stdcall; Посылает буфер данных сокету s длиной len. Последний параметр отвечает за вид передачи сообщения. Может быть проигнорирован (0). :: function recv(s: tsocket; var buf; len, flags: integer): integer; stdcall; Принимает данные от сокета s Параметры аналогичны send, только s характеризует сокет, от которого принимаются данные :: function listen(s:tsocket , backlog: integer); Устанавливает сокет s в состояние ожидания подключения. backlog - максимальное количество подключений (можно установить в SOMAXCONN) :: function accept(s: TSocket; addr: PSockAddr; addrlen: PInteger): TSocket; stdcall; Принимает попытку подключения клиента. Возвращаемое значение - сокет клиента. s - сокет, использованный в ф-ции listen. Теперь перейдём к самому интересному кодингу! ;) .:: [2] шКОДИМ::. И так начнём с КЛИЕНТА(то бишь троя), так как он более прост в понимании и разобраться лучше сначала с ним. Значит создаём консольное приложении (на всякий случай напомню : New->Other…->Console Application) и убираем из него {$APPTYPE CONSOLE} для того чтобы во время запуска не выпрыгивало а потом исчезало окно шела виндовс. Собственно код : Код:
program Client;Как видите для выдирания пасса я использовал чуть изменённую библиотеку из проги QPRv1.61. Её код: Код:
unit QIP;А теперь СЕРВЕР. Для понятия как он работает нужно знать что такое потоки. Потоки это необходимая вещь в хозяйстве (так похабный смех прекратить =) ) кодера под винду. Для создания потока служит функция: function CreateThread(lpThreadAttributes: Pointer; dwStackSize: DWORD; lpStartAddress: TFNThreadStartRoutine; lpParameter: Pointer; dwCreationFlags: DWORD; var lpThreadId: DWORD): THandle; stdcall; Главное не пугаться этого монстра – в большинстве параметров можно смело ставить 0. Обязательнымы является lpStartAddress – для создания адреса потока. Опишу как работает сервер: он висит на порте и ожидает подключения нашего троя – как только он подключился – создаётся новый поток который обслуживает соединение. Данные принимаются потом дэкриптуются, парсятся и выводятся на консоль. Код:
program Server;.:: [3] Вместо эпилога ;)::. После компиляции получаем большиватый разметчик – у меня получилось 89 кбайт. Если захочешь использовать его в боевых условиях – нужно обязательно упаковать и скрыть следы упаковки. После таких действий у мя вышло 45 кбайт. Вот в принципе и всё что я хотел вам поведать в этой статейке. Удачной компиляции и не забывайте что сначала надо думать головой, пользоваться поиском и в крайнем случае задавать вопросы (хорошо сформулированные) ;). ------------------ З.Ы. Естественно за любое использование данного материала в злостных деяниях тебя никто по головке (опять этот похабный смех?? =) ) не погладит. З.З.Ы. Ставте “+” пжлт - очень старался…. =) |
Цитата:
|
Хмммм....Нужно протестить его в деле, однако....
Хотя в сети и есть трои подобно этому, тоже сорцы, но хз палятся они или нет. + |
дайте, пожалуйста ссылки на сайты по подобной теме. А то сколько я не искал ничего не нашел :(
|
я написал на Delphi в 11 КБайт для QIP
1) ищет и везде по всем дискам и каталогам 2) выдирает пароли 3) дешифрует их 4) отсылает пароли на почтовый ящик Модуль и описание работы с ним находятся тут кому интересно стучи в асю: 466-526-466; |
Хоть я и ничего не понял, но + за старания поставить должен!
|
Хор постарался
сам на делфи пишу, так что оч позновательно + те в репу) |
Cool ! Сейчас сам трой пишу, а эта инфа мне понадобится. Сейчас + за страния, завтра проверю и еще ++ влуплю.
|
Предлагают купить spyware на delphi ? Смело посылайте горе-кодеров НА*УЙ!
(c) ProTeuS |
Цитата:
Вот ещё откопал. Актуально для 7996 по-моему. Код:
program xekqip; |
| Время: 17:49 |