Как создать простого трояна на Python
Зачем кому-то писать вредоносное ПО на Python? Мы собираемся сделать это, чтобы изучить общие принципы разработки вредоносных программ, а в то же время вы сможете попрактиковаться в использовании этого языка и применить полученные знания для других целей. Кроме того, вредоносное ПО Python встречается в естественных условиях, и не все программы защиты от вирусов обращают на него внимание.
Конечно, приведенные в статье скрипты никоим образом не подходят для использования в боевых условиях — в них нет обфускации, принципы работы просты, как дважды два, и нет никаких вредоносных функций. Однако проявив немного изобретательности, их можно использовать для простых грязных уловок — например, выключения чьего-либо компьютера в классе или в офисе.
Теория
Так что же такое троян? Вирус — это программа, основная задача которой — копировать самого себя. Червь активно распространяется по сети (типичные примеры — Petya и WannaCry), а троян — это скрытая вредоносная программа, маскирующаяся под «хорошее» ПО.
Логика такого заражения заключается в том, что пользователь сам загружает вредоносное ПО на свой компьютер (например, под видом неработающей программы), сам отключает механизмы защиты (в конце концов, программа выглядит нормально) и хочет оставить его на долгое время. Хакеры здесь тоже не спят, поэтому время от времени появляются новости о новых жертвах пиратского программного обеспечения и программ-вымогателей, нацеленных на любителей халявы. Но мы знаем, что бесплатный сыр можно найти только в мыеловке, и сегодня мы очень легко научимся заполнять этот сыр чем-то неожиданным.
Определяем IP
Во-первых, нам (то есть нашему трояну) нужно определить, где он оказался. Важной частью вашей информации является IP-адрес, который вы можете использовать для подключения к зараженному компьютеру в будущем.
Начнем писать код. Сразу импортируем библиотеки:
Код получения внешнего и внутреннего адресов будет таким. Обрати внимание, что, если у жертвы несколько сетевых интерфейсов (например, Wi-Fi и Ethernet одновременно), этот код может вести себя неправильно.
Если с локальным адресом все более‑менее просто — находим имя устройства в сети и смотрим IP по имени устройства, — то вот с публичным IP все немного сложнее.
Вывести информацию еще проще:
Строковые литералы не только хорошо смотрятся в вашем коде, они также помогают избежать таких ошибок, как сложение строк и добавление чисел (Python это не JavaScript!).
Сервер – Клиент Изнутри. На примере и разработка программы!

Если Вам интересно посмотреть, как пишутся «Программы сервер – клиент» и как они работают на реальном примере, предлагаю прочитать пост до конца. Будет интересно!
Пример программы я решил писать на Delphi! Так как, это проще и хорошо подходит для маленького, но реального примера. Что касается грозного слова «Троян» которое я упомянул выше, то тут, получается действительно, самый настоящий троян, но с малым и безобидным функционалом.
Вы узнаете, по какому принципу пишутся «Трояны» и как они работают изнутри! Но, есть одно «НО» Трояны не пишут, так как – это будет описано ниже. Поскольку в нашем примере, «Серверная» часть программы будет много весить (Это не приемлемо для реального трояна), и мы не будет её скрывать в системе. В реальном, «Вредоносном ПО» дела обстоят немного по другому.
Серверную часть программы стараются разработать с малым размером, ну примерно «100 КБ» Плюс — минус сколько-то КБ. И скрывают её в системе, так, что искать её придется долго!…
Но все ровно, принцип разработки один! И данный пример идеально подойдёт для понимания, как работаю программы по принципу «Сервер — Клиент» Просто у нас не правильный тон разработки трояна, а оно нам надо? Правильно. НЕТ. Мы же хорошие ребята и хулиганить не собираемся!
Как работают программы по принципу «Сервер – Клиент»
Просто и в двух словах картина выглядит вот так: Вы на своём компьютере запускаете «Клиентскую» часть программы, как правило, она имеет «GUI» то есть интерфейс пользователя (Если клиент не консольный)
На компьютере, к которому вы желаете получить доступ, запускается «Серверная» часть программы, она же открывает определённый порт на чужом компьютере и не видна в системе.
Через этот порт происходит соединения, Вы в клиенте указываете порт и IPадрес компьютера, на котором запущен сервер, подключаетесь к серверу и можете спокойно выполнять какие-то действия на чужом ПК со своего компьютера! Ещё можно прочитать мой прошлый пост и узнать:
Надеюсь, что здесь объяснил, вроде как понятно и простым человеческим языком! Если что-то не ясно, дальше, на примере все станет ясно! Далее давайте определимся, какие действия буду выполняться на удалённом ПК вследствие работы нашего маленького трояна!
Какой функционал в данном примере программы Сервер – Клиент.
Честно сказать, на этом этапе, когда размышлял, что бы показать я как-то замешкался и не как не мог придумать, что-то интересное! В общем пусть будет функционал из одной возможности и до жути простой:
— Пользователь будет получать Ваше сообщение.
Не вижу смысла добавлять какие-то другие возможности. Так как, считаю, что для примера и понимание этого вполне достаточно. Так же, думаю, не стоит писать много кода, то, что имеется ниже, то же достаточно, что бы посмотреть на программу изнутри!
А за место сообщение может быть все что угодно, зависит от фантазии человека решившего написать троян и от его знаний в программировании.
Ну, а у нас будет такой прикол! Человек, сидя за компьютером, неожиданно получит сообщение, например
представляете реакцию человека? Думаю это смешно, было бы увидеть его выражение лица.
Разработка программы по принципу «Сервер – Клиент»
Приступаем к самому интересному! И начнём мы с разработки самого «Сервера» после чего напишем под него клиент! Я не буду объяснять код программы, просто, буду приводить примеры, все же у меня не блог по программированию, да и цель поста показать поэтапно процесс разработки подобных программ по типу «Сервер – Клиент»
Разработка Сервера!
Изначально, нужно научить «Сервер» открывать какой-то порт на компьютере, дабы в дальнейшем иметь возможность подключиться к нему из «Клиента» а уже после научим принимать команды и выполнять какие-то действия на ПК.
Откроем порт следующим кодом, который до боли прост:
Теперь если запустить программу появится просто, пустое окно без всяких кнопок и прочих элементов. И самое главное, на компьютере будет открыт порт с номером «666» Именно на этот порт в дальнейшем будем отправлять команды на сервер, и он в свою очередь будет их обрабатывать.
А пока убедимся, что сервер работает и порт открыт, вспоминаем команду «netstat» и смотрим результат.
Как видим на компьютере, вследствие запуска нашей программы действительно был открыт порт с номером «666» Это говорит только ободном, программа работает, и пришла пора научить «Сервер» принимать сообщение.
Тут дела обстоят следующие образом! Если серверу придёт команда с названием «MESSAGE_TEXT» (Название может быть любое) то сработает процедура «ShowMessage» и покажет сообщение, которое пришло вмести с командой и хранится в строковой переменной «komm»
Соответственно текст сообщение будем набирать в «Клиенте» и он может быть любого содержание!
В прочем, на этом разработка «Серверной» части закончена. В итоге у нас получился файлик «Server.exe» и пока отложим его в сторону до того момента пока не напишем «Клиент»
Разработка Клиента!
Клиент у нас будет по понятным причинам с графическим интерфейсом пользователя (GUI) и должен иметь элементы управление, кнопки и поля ввода. У меня получился вот такой вид программы:
Определимся со всеми элементами! Хотя и так понят но, как говорится, на всякий случай поясню.
— IP: Поля для ввода IPкомпьютера, где запущен сервер.
— Port: Указываем номер порта на котором висит сервер.
— Подключится: Кнопка для подключения к серверу.
— Текст сообщение: Поле для ввода сообщение, которое нужно отправить.
— Отправить сообщение…: Соответственно кнопка для отправки сообщение.
— Статус соединение: Тут мы узнаем, подключились или нет!
Дальше пробуем научить «Клиент» подключаться к серверу и проверим, как это работает. В данном варианте, код для кнопки «Подключится» выглядит так:
Крадущийся питон. Создаем простейший троян на Python
Содержание статьи
Конечно, приведенные в статье скрипты никак не годятся для использования в боевых условиях: обфускации в них нет, принципы работы просты как палка, а вредоносные функции отсутствуют напрочь. Тем не менее при некоторой смекалке их возможно использовать для несложных пакостей — например, вырубить чей‑нибудь компьютер в классе (или в офисе, если в классе ты не наигрался).
Теория
Итак, что вообще такое троян? Вирус — это программа, главная задача которой — самокопирование. Червь активно распространяется по сети (типичный пример — «Петя» и WannaCry), а троян — скрытая вредоносная программа, которая маскируется под «хороший» софт.
Логика подобного заражения в том, что пользователь сам скачает себе вредонос на компьютер (например, под видом крякнутой программы), сам отключит защитные механизмы (ведь программа выглядит хорошей) и захочет оставить надолго. Хакеры и тут не дремлют, так что в новостях то и дело мелькают сообщения о новых жертвах пиратского ПО и о шифровальщиках, поражающих любителей халявы. Но мы‑то знаем, что бесплатный сыр бывает только в мусорке, и сегодня научимся очень просто начинять тот самый сыр чем‑то не вполне ожидаемым.
warning
Вся информация предоставлена исключительно в ознакомительных целях. Ни автор, ни редакция не несут ответственности за любой возможный вред, причиненный материалами данной статьи. Несанкционированный доступ к информации и нарушение работы систем могут преследоваться по закону. Помни об этом.
Определяем IP
Сначала нам (то есть нашему трояну) нужно определиться, где он оказался. Важная часть твоей информации — IP-адрес, по которому с зараженной машиной можно будет соединиться в дальнейшем.
Начнем писать код. Сразу импортируем библиотеки:
Если ты видишь ошибку, что у тебя отсутствует pip, сначала нужно установить его с сайта pypi.org. Любопытно, что рекомендуемый способ установки pip — через pip, что, конечно, очень полезно, когда его нет.
Код получения внешнего и внутреннего адресов будет таким. Обрати внимание, что, если у жертвы несколько сетевых интерфейсов (например, Wi-Fi и Ethernet одновременно), этот код может вести себя неправильно.
Если с локальным адресом все более‑менее просто — находим имя устройства в сети и смотрим IP по имени устройства, — то вот с публичным IP все немного сложнее.
Вывести информацию еще проще:
Строковые литералы не только хорошо смотрятся в коде, но и помогают избегать ошибок типа сложения строк и чисел (Python — это тебе на JavaScript!).
Небольшой обзор исходного кода трояна zeus
Введение

Как нам подсказывает англо-русский словарь, zeus переводится как Зевс, Громовержец, главный бог древне-греческого пантиона. Назвав свое творение zeus в далеком уже 2007 году, неизвестный автор трояна взял на себя определенные обязательства, обязывающие быть если не главным, то как минимум в числе первых, и надо признать, он выполнил, и даже перевыполнил эти обязательства.
Zeus-троян стал уже легендарным на просторах Интернета и даже за его пределами за последние несколько лет. Ни один из троянов не зацвел таким буйным цветом, не распространился так широко, как этот, а по широте охвата zeus ненамного отстает от печально знаменитого червя Kido/Conficker.
Изначально zeus позиционировался как бансковский троян, то есть программа, которая каким либо образом проникает на компьютер жертвы и передает своему хозяину конфиденциальную информацию — логины, пароли, номера кредитных карт, CVV2/CVC2 коды и так далее. Но со временем стали появляться и модификации для кражи корпоративных данных, заражения исполняемых файлов, рассылки спама и так далее.
Расскажу немного о бизнес — схеме, которая используется при работе с zeus. Автор zeus (или авторы), заботливо расширяет и совершенствует свое детище вот уже много лет, но у этого парня хватает ума самому не заниматься распространением трояна — он продает конструктор для создания модифицированных версий всем желающим, с более или менее понятными инструкциями, также можно купить и тех. поддержку. Ну а поиском Дедиков как центров управления, созданием и распространением трояна — клиента, обработкой полученных номеров кредиток, обналичкой и прочим криминалом занимается всякая низкоинтеллектуальная “школота”. 
Самый показательный пример такого рода – это задержание в начале октября 2010 года в США группы студентов из России, которые погорели скорее всего из-за своей неуемной жадности и тупости. Вот их имена: Илья Карасев, Кристина Извекова, Софья Дикова и иже с ними. Взято отсюда. Впрочем, вся школота на удивление дешево отделалась — каждому дали меньше года тюрьмы и мизерный денежный штраф, хотя в США за такие преступления можно сесть на 40 лет.
Хотя надо отметить, что автор zeus принимал активное участие в работе существующих крупных ботнетов, видимо в рамках тех. поддержки пользователям, ибо он пишет в рекомендациях по использованию своего детища, что дедик, на котором должна крутится адмика, должен быть достаточно мощным, с конкретными указаниями конфигурации.
Недавно zeus засветился еще в одной атаке – кто то перед рождеством разослал поздравительные рождественские открытки якобы из Белого дома по правительcnвенным учреждениям США. При переходе по ссылке или открытии прикрепленного файла zeus тупо сканировал винчестер в поисках Word, Exel, PDF файлов и отсылал их на некий сервер в Белоруссии.
Вообще, очень много ниточек от zeus ведут в страны постсоветского пространства, что дает основания подозревать, что родом он из России или Украины, что в последствии и подтвердилось, ибо комментарии в исходниках и инструкции по работе были написаны на русском. Да и сам GUI Сервера zeus содержал всего два языка — английский и русский.
Возможности
-Язык и IDE программирования:
-Поддерживаемые ОС:
-Принцип действия:
-Процесс установки:
-Защита:
-Получение важных данных из программ пользователя:
Логинов из FTP-клиентов: FlashFXP, CuteFtp, Total Commander, WsFTP, FileZilla, FAR Manager, WinSCP, FTP Commander, CoreFTP, SmartFTP. «Кукисов» Adobe (Macromedia) Flash Player. «Кукисов» wininet.dll, Mozilla Firefox. Импорт сертификатов из хранилища сертификатов Windows. И слежение за их дальнейшим добавлением. Слежение за нажатием клавиш клавиатуры.
Сделаю несколько своих комментариев по поводу высказываний автора zeus: та версия, которая попала ко мне, была откомпилирована на компьютере автора с помощью MS Visual Studio 10.0, так что файл комментов несколько устарел. Толи автор не удосужился их обновить для того юзера, которому продал сорсы, толи еще что.
По поводу принципа действия – автор решил не заморачиватся написанием драйверов, поднятием привилегий и прочими boot-time фишками, которые очень популярны у вирусописателей в последнее время, и не случайно — эта олд-скульность весьма оправдана, так как бот работает предельно стабильно на всем семействе операционок Windows, функционален даже из под гостевого аккаунта, и имеет минимально возможную вероятность запалиться антивирусом. Тем более что в операционках семейства Windows после выхода XP SP2 для поддержки технологии “горячего патча” пролог каждой функции был сделан постоянной длинны в 5 байт, что избавло zeus от того, чтобы таскать с собой дизассемблер BeaEngine, и это несомненно пошло на пользу трояну, ибо автор zeus называет дизассемблер “довольно громоздким, хоть и универсальным”.
Узкое место то, что клиентская программа трояна прописывает себя в каждом пользовательском процессе, и этим ее можно детектировать. Например, техника определения, инфицирован ли данный процесс, используется самим ботом-клиентом для отрисовки окна при работе встроенного vnc сервера – проверяется, создан ли в процессе мутекс со специальным именем. Если создан – значит данный процесс инфицирован. Но имя скорее всего уникально для каждого экземпляра программы-клиента, так что так просто это в правила антивиря запихать не удастся. Вот еще интересные строчки “При установке, бот создает свою копию в домашней директории пользователя, В данный момент не производиться скрытие файлов бота через WinAPI” что дает нам отличный способ детектирования именно этого бота. И вообще – в корне домашнего каталога юзера не должно быть никаких левых подозрительных файлов! Особенно выполняемых, странно что антивирусы об этом не знают.
Вообще, схема распространения данной версии zeus довольно примитивна – пользователь переходит по ссылке, пришедшей в спамерском письме, или через инфицированный pdf документ, и запускает программу-инсталятор zeus, которая шифрует уникальным шифром вирус под каждого отдельного пользователя, после чего инсталлятор удаляется, а вирус сможет исполнятся только на этом данном компе под данным юзером. Никаких распространений через сканирование сети, через флешки, и прочих новомодных штучек. Все это безусловно ограничивает распространения трояна, зато делает его гораздо более устойчивым к антивирусам, что, судя по степени распространения zeus более чем оправдано.
По поводу “Получение важных данных из программ пользователя”- чистая правда, такая функциональность есть. Правда, автор забыл написать, что грабилка паролей CuteFTP в текущей версии закоментарена, то есть в билд она не попадает, судя по тому что не доделана, а расшифровка пароля для WsFTP вообще не реализована, что отражено в коментах сорсов, но это все мелочи 😉 Странно, что автор не потрудился на пароли аськи, скайпа, сохраненные пароли от соц. сетей и т.д., другие Трояны с радостью крадут все эти данные. Судя по всему, алгоритмы расшифровки многих паролей были получены методами реверсивного инжиниринга, то есть дизассемблированием. Кстати, среди браузеров автором не упомянут Google chrome, вдруг его данные троян не грабит, так что возможно лучше всего пользовать браузер от Google, хотя я этот вопрос не исследовал.
Ну как ясно из всего вышеперечисленного – zeus необычайно широко распространен, качественно сделан, устойчив и скрытен в работе, легко адаптируется под различные новые задачи, кроме всего прочего, работает под подавляющим большинством операционных систем семейства Windows, в том числе и в 64-битных. В общем, в своем роде просто уникальный продукт.
Ну и напоследок — исходники этого самого знаменитого трояна таки утекли в сеть, то есть его создатель попал на те же грабли, что и его законопослушные коллеги-программисты: кто то из покупателей толи потерял, толи намеренно выложит сорсы в сеть, благодаря чему все желающие получили возможность познакомится со зловредом так сказать изнутри.
Анализ

Как известно, разработка программного обеспечения, в том числе написание кода – работа очень творческая, тут нет каких то единых стандартов и раз и навсегда проторенных дорожек, это как спорт, когда у каждого великого спортсмена со временем вырабатывается свой стиль игры, как изобразительное искусство, когда картины мастера можно узнать по характерному подчерку, как литература, например, если маленький мальчик попал в лапы к нелюдям – это Лукьяненко, а если все люди перемерли и герой расследует преступление, бегая по руинам городов – это Филлип Дик. Так же и с исходным кодом ПО и сопутствующими ему деталями – у каждого профессионального программиста есть свой характерный почерк, который очень много может сказать о своем авторе. И никакие корпоративные шаблоны, типа документов по стилизации кода, использованию характерных языковых конструкций и так далее не может помешать автору кода изменить своему стилю, ибо это сидит уже в подсознании, в подкорке головного мозга. Вот я и попробую, анализируя исходный код трояна zeus, попытаться кое что разузнать о его авторе.
При первом взгляде на сорсы бросается в глаза их предельно четкая структурированность, что говорит о большом опыте автора в разработке ПО. Не заметно никаких следов какой либо системы контроля версий, и это лишний раз подтверждает предположение о том, что это не была утечка исходников от их создателя, а в сеть попал пакет сорсов, который был продан какому-то клиенту. Ведь врятли автору удалось работать 4 года и дожить до версии 2.0.8.9 без source-контроля. 
Для начала хотелось бы отметить, что сам пакет zeus, попавший в мои руки, состоит из нескольких модулей:
common — общие для всех проектов файлы, в которых содержится реализация большинства абстракций, необходимых для работы, таких как менеджер памяти, работа со строками, файловой системой, процессами, потоками, объектами синхронизации и прочее. В общем, набор крайне полезных и нужных базовых сервисов.
client — непосредственно сам вирусный клиент или бот, который проникает и поселяется на компьютерах жертв. Самый большой по объему код находится тут, ибо трояну надо много чего уметь делать.
builder — построитель новых версий вирусного клиента на основе скомпиленного содержимого каталога “client”
bcserver — сервер для работы на дедике, к которому будут бак-коннектится боты.
server[php] – веб интерфейс для управления ботнетом.
bin – немногие 3rdparty, которые использует проект zeus. Все остальные сторонние компоненты были переписаны под zeus API, как то vnc, дизассамблер на движке BeaEngine. В этом каталоге лежат fasm, php, 7zip, upx.
Первое что бросилось в глаза — это билд система. Хотя zeus и собирается под Visual Studio 10, билд система написана на php. Это очень необычно и редко встречающееся решение, так как разработка системы билда на php не свойственно для Windows систем, и вообще не свойственно ни для каких систем. Это может говорить о том, что автор взял уже готовую подобную систему и модифицировал для своих целей. А где он мог ее взять? Только на своей предыдущей или нынешней работе, и скорее всего он участвовал в разработке данной системы.
Код написан почти полностью на С, только там где используются COM интерфейсы, неорхотно используется С++. Хотя автор регулярно пишет TODOшки, что какие то части надо переписать с использованием COM.
Еще раз — я категорически утверждаю, что весь С-код zeus писал один человек, ни о какой команде хакеров, ни о какой передаче исходников zeus разработчикам SpyEye, которым так пугали нас в СМИ, не идет и речи, все стилистически и функционально настолько четко выверено и рассчитано, что даже еще не видя кода до конца, примерно представляешь, что же там будет.
Сам код меня в некотором смысле даже порадовал — никаких больших закомментариных кусков, нет даже не отформатированных кусков, все лаконично, четко и красиво, сразу видно что код регулярно ревьюится автором.
Еще одной отличительной особенностью является высокая степень абстракии кода от системных вызовов и вообще работы с конкретной операционной системой. Почти все, что только можно, вынесено в отдельные программные модули, которые разработаны по единой архитектуре, похожую на структуру классов языка с++. Также удивляет очень высокая степень унификации программных компонентов, многие из них сделаны по единому шаблону, несмотря на крайне различсную функциональность, что говорит о высоком профессионализме автора программы.
Эпилог

Говорят, что у орудий, предназначенных для убийства есть своя потаенная эстетика, изгиб линий и очертания форм предают таким предметам скрытое очарование, вызывающее смесь восхищения и ужаса у наблюдающего их. Схожие чувства я испытал в процессе знакомства с исходниками zeus, этим одним из самых совершенных орудий всеобщей кибернетической эпохи, когда никто не может чувствовать себя в безопасности от невидимых но цепких лап троянов и руткитов. Может, пока Вы читаете эти строки, за Вами пристально следит через vnc один из очередных хозяев ботнета, терпеливо ожидая, пока Вы залогинетесь в свой банковский аккаунт? Но не все так плохо, пример автора zeus говорит нам, что нет ничего невозможного для опытного и целеустремленного одиночки – программиста, пусть он и вынашивает самые низкие и коварные замыслы.
Да прибует с вами хабра-сила!








