Троян на Python. Основы зловредного кодинга на Python’e под Windows 7Да Винчи сказал: «Существует три разновидности людей: те, кто видят; те, кто видят, когда им показывают; и те, кто не видят». Применительно к нашему времени я бы еще добавил группу: «Те, кто видят все, когда им нужно». Чтобы в нее вступить, нужно уметь получать любую информацию — это умение мы и будем сегодня развивать с помощью Python. Выбор языка для троян-кодинга — тема для вечных холиваров. Хардкорщики кричат, что лишь на Asm’е пишется что-то нормальное. Группа полу-хардкорщиков молится на Си. Поклонники практически покойного Delphi тоже не отстают. По большому счету, каждый из них прав, ведь всегда найдется задача, для которой конкретный язык подойдет идеально. В трояностроительном цеху Python’у также нашлось место, но пока оно ограничено лишь мобильными девайсами. Оно и понятно, ведь для запуска скрипта нужен интерпретатор, который у жертв на «большом компьютере» обычно не бывает установлен. Кстати, не проблема — эту трудность мы с тобой сможем превозмочь. Кроме этого, нужно понимать, что Python’новский троян целесообразно использовать лишь для точечных атак. К примеру, для решения задачи типа «1 девчонка типа «блондинка» + одна аська типа qip» :). PyinstallerНа сайте http://pyinstaller.org хостится важнейшая для нас на сегодня тулза. Она представляет собой набор скриптов, которые позволяют из обычного py-скрипта сделать exe-шник. Скачивай ее с сайта или с диска и давай потестим. Допустим, ты распаковал ее на диск D:.
Теперь для теста в папке D:\test\ создай питоновский скрипт test.py:
Создание exe-шника проходит в два этапа. Сначала скриптом Makespec. py записывается файл «spec» с параметрами «компиляции», а затем — скрипт Build.py создает непосредственно экзешник. Скрипт Makespec.py, кроме пути к py-файлу принимает много разных параметров, но нам важны лишь эти: • «F», на выходе получим один лишь exe-шник; Во время разработки желательно использовать только один параметр («F») с целью создания отладочного режима, — чтобы в результате получился один файл и окно, в котором мы бы видели свои ошибки. Проверяем и компилируем:
Несколько секунд ожидания… готово! Результат работы покоится в папке d:\pyinstaller\test\dist\. Наш test.exe получился размером в 2.4 Мб, и, если его запустить, то может показаться, что ничего не сработало — окна нет. Однако ok.txt создается, а значит, все отлично работает. Картинка to stringДля начала обеспечим нашей программе некий минимум правдоподобности. Обеспечить ее для блондинки довольно просто — покажем ей красивую картинку, тут-то она и растает :). Поскольку все хозяйство у нас должно покоиться в одном py-файле, то картинку нужно будет сжать, а потом закинуть в base64 (превратив в строку). Теперь — немножко питоновской магии с объектом gzip.GzipFile, которому при создании мы указываем, куда сохранять уже сжатые данные, и получаем код, который читает файл my.jpg, сжимает, кодирует функцией base64.encodestring в строку base64 и полученную строку-изображение сохраняет в rez_img.txt:
Теперь, имея в своем распоряжении строку-картинку, мы можем приступить собственно к кодингу. В начале файла troj. py в переменную img мы поместим нашу картинку с rez_img. txt. Логика этого кода будет выглядеть примерно так (подробности — в сорце на диске):
Распаковка файла практически аналогична запаковке. Код этого нелегкого процесса ты всегда можешь посмотреть в исходнике на диске, а я лишь уточню, что название файла-картинки мы берем из исполнимого файла для уменьшения палевности:
Вместо вышеприведенного кода можно было бы использовать стандартную функцию для отделения имени от пути, но мне проще сделать так, поскольку я извращенец :). Итак, картинка создана, остается лишь «исполнить» ее с использованием библиотеки subprocess: import subprocess subprocess.Popen(img_name, shell=True) Благодаря заблаговременно указанному «shell=True», картинка откроется так, как если бы пользователь сделал на ней обычный даблклик. АвтозапускСамый простой способ автозапуска нашей проги — скопировать в папку автозагрузки:
Как видишь, наш учебный троян заточен под английскую версию Windows 7, поэтому для работы с другими версиями константы путей нужно будет либо поменять, либо динамически вытаскивать их из стандартных переменных винды:
Полный список переменных можно узнать, написав в консоли команду «set», и эту же команду вместе с subprocess.Popen нужно заюзать, чтобы получить эти переменные из скрипта. Копируем все!Теперь, когда мы отвлекли внимание юзера ушастого и закрепились в автозагрузке, можно начать исполнение нашей основной задачи, отправив на сервер архив папки с историей и паролями qip’a — C:\Program Files\QIP\Users\. Создадим в папке Temp архив, заюзав библиотеку zipfile. Для этого создадим объект zipfile.ZipFile и рекурсивно пройдемся по папке qip, добавляя в архив все файлы:
Отослать полученный файл можно, например, через ftp, или послать post-запросом. Второй вариант мы и реализуем, воспользовавшись библиотекой urllib2:
Вот и все! Наш учебный троян готов. Разумеется, ни в коем случае мы не советуем тебе использовать его в противозаконных целях, но на своем домашнем компьютере ты вполне можешь его потестить — он с удовольствием покажет тебе интересную картинку, заархивирует папку с qip’ом и отправит ее на сохранение твоему лучшему другу. Отличное решение, ведь если твой компьютер поразит злой вирус — ты всегда сможешь восстановиться из хранящегося у друга бэкапа! А есть ли будущее?У нашего продукта есть один существенный минус — а именно, размер (большой размер!) исполнимого файла. Плюсы тоже есть; к ним относится скорость написания и последующей модификации. А исходник можно очень легко шифровать и изменять, что сильно осложнит сигнатурный поиск получившегося зловреда. Быть или не быть — решать тебе. Если будет нужна помощь, то ты знаешь, где меня найти. PY2EXEPyInstaller — не единственная штука для создания exe из py. Есть еще модуль Py2exe. Он может быть использован для создания wxPython, Tkinter, Pmw, PyGTK, pygame и многих других автономных программ. Но, к сожалению, я не нашел в нем возможности создания файла-одиночки. Да и он в использовании несколько сложнее, чем PyInstaller. Вирус под SymbianОчень много вирусов написано на Python для телефонов под Symbian. Всему виной чрезвычайная простота: если ты хочешь отсылать SMS’ки на свои платные номера, то нужно написать всего лишь две строчки:
Links•Сайт PyInstaller: http://pyinstaller.org. |