Отказ от ответственности : Этот код только для образовательных целей, и автор не несет ответственности за какие-либо последствия. Пожалуйста, не пробуйте его, если вы не согласны на условие.
Привет всем, в этом посте я покажу, как я отправил зашифрованное секретное сообщение WhatsApp.
Предпосылки:
- Веб-драйвер Gecko
- Python 3.x.
- Библиотека Pycryptodome
- Библиотека криптографии
- Колорама Библиотека
Во-первых, архитектура системы, как показано на рисунке ниже
В этом посте я продемонстрирую с AES алгоритм. Точно так же вы можете попробовать с разными алгоритмами шифрования. И мы собираемся использовать драйвер Gecko для автоматического отправки сообщения. Основной целью является шифрование и передает конфиденциальные данные в WhatsApp . Шифрование AES, используемых здесь Режим EAX .
Специальность : Этот режим сложно в шифровании, потому что он не используется UTF-8 кодировка . Это использует Кодировка Windows-1252 Что сложно для любых внешних компиляторов для декодирования сообщения.
Библиотеки : Сначала давайте установим необходимые библиотеки. Напишите 3 библиотеки Pycryptodome Криптография Колорама В текстовом файле с именем требования .txt Теперь установите их с помощью команды PIP
pip install -r requirements.txt
Поместите драйвер Gecko в каталог, где вы собираетесь выполнить код. Все предварительные реквизиты проводятся, давайте погрузимся в кодирующую часть
Импортировать библиотеки
import base64 import binascii import binhex import os import string import sys from random import choice import smtplib import os import hashlib
Давайте отобразим сообщение об ошибке, если какие-либо библиотеки отсутствуют
try: from colorama import Fore, Style, init from Crypto.Cipher import AES from Crypto.Random import random from cryptography.fernet import Fernet except ImportError: print( "ERROR: Missing required libraries.\n" "Install dependencies with: pip install -r requirements.txt" ) sys.exit(1) colorList = [Style.BRIGHT + Fore.RED, Style.BRIGHT , Style.BRIGHT + Fore.YELLOW, Style.BRIGHT + Fore.BLUE, Fore.GREEN ,Fore.MAGENTA, Style.BRIGHT + Fore.CYAN, Style.BRIGHT + Fore.WHITE]
Здесь я использую библиотеку Colorama, чтобы изменить цвета для каждого исполнения.
Давайте получим требуемый вклад
def get(datatype): try: (message) = { "plaintext": ("Enter plaintext message"), "encoded": ("Enter encoded message"), "encrypted": ("Enter encrypted message"), "filename": ("Specify filename"), "passwordfilename": ("Specify passwordfilename"), "password": ("Enter encryption password"), "Select": ("Choose any one"), }[datatype] except KeyError: message = datatype return input(f"\n{message}: {Style.RESET_ALL}").encode()
Отправитель : В моем предыдущем посте я упомянул о XPath и Automation. Мы собираемся использовать подобную концепцию здесь с WhatsApp. Сначала давайте напишем сценарий бота и хранить его в Bot.py
from datetime import datetime from selenium import webdriver from selenium.webdriver.common.keys import Keys from selenium.common.exceptions import NoSuchElementException from time import sleep import chardet driver = webdriver.Firefox() driver.get('http://web.whatsapp.com') sleep(15) driver.find_element_by_xpath("/html/body/div/div/div/div/div/div/div[1]/div/div/div[1]/div/div/div").click() sleep(5) fileLocation= "Path/AESKEY.txt" with open(fileLocation,"r") as file: for line in file: driver.find_element_by_xpath("//*/footer/div[1]/div[2]/div/div[2]").send_keys(line) driver.find_element_by_xpath("//*/footer/div[1]/div[2]/div/div[2]").send_keys(Keys.ENTER) sleep(5) fileLocation= "Path/AES.txt" with open(fileLocation,"r") as file: for line in file: for word in line.split(" "): driver.find_element_by_xpath("//*/footer/div[1]/div[2]/div/div[2]").send_keys(word) driver.find_element_by_xpath("//*/footer/div[1]/div[2]/div/div[2]").send_keys(Keys.ENTER) # No special characters and spaces in enc
Python Мы собираемся сохранить ключ, необходимый для расшифровки сообщения в файле aeskey.txt и зашифрованное сообщение в файле aes.txt. Этот бот читает файл, а затем отправляет сообщение. Вы можете отправить некоторое сообщение, как показано ниже.
Теперь давайте попадаем в часть шифрования.
def aes_enc_auto(): """Encrypt with AES.""" keypass = random_key(16) data = get("plaintext") filename = get("filename").decode() cipher = AES.new(keypass.encode(), AES.MODE_EAX) ciphertext, tag = cipher.encrypt_and_digest(data) with open(filename, "wb") as outfile: _ = [outfile.write(item) for item in (cipher.nonce, tag, ciphertext)] save_path='Path/Whatsapp' kn = "AESKEY" passwordfilename = os.path.join(save_path, kn+".txt") with open(passwordfilename, "wt") as outfile: _ = [outfile.write(item) for item in (keypass)] print("AES encrypted message and key files are saved") os.system('python bot.py') MENU_OPTIONS.append(aes_enc_auto)
Сначала мы получаем простой текст от терминала, и он хранится после зашифрованного. Затем драйвер Gecko входит в действие и отправляет контент для получателя.
ПОЛУЧАТЕЛЬ : Приведенное выше зашифрованное сообщение может быть расшифровано с помощью следующего кода.
def aes_dec_auto(): """Decrypt with AES.""" filename = get("filename") keypass = get("password") with open(filename, "rb") as infile: nonce, tag, ciphertext = [infile.read(x) for x in (16, 16, -1)] cipher = AES.new(keypass, AES.MODE_EAX, nonce) data = cipher.decrypt_and_verify(ciphertext, tag).decode() show("plaintext", data) MENU_OPTIONS.append(aes_dec_auto)
Наконец давайте закончим основную функцию
# Main Function def main(): try: while True: print( "\n" + Fore.GREEN + "Choose from the following options, or press Ctrl-C to quit:\n\n" + Style.RESET_ALL ) for index, option in enumerate(MENU_OPTIONS, 1): print(Style.BRIGHT + f"{index}: {' ' if index < 10 else ''}" f"{option.__doc__}" + Style.RESET_ALL) choice = get("Select") print() try: MENU_OPTIONS[int(choice) - 1]() except (IndexError,UnboundLocalError): print("Unknown option." + Style.RESET_ALL) # except ValueError: # print("Invalid option."+ "Enter the number of your selection."+ Style.RESET_ALL) except (KeyboardInterrupt,UnboundLocalError): print("\n{}Program Terminated\n{}Have A Nice Day{}".format(Fore.RED,Style.BRIGHT,Style.RESET_ALL)) sys.exit(1) if __name__ == "__main__": main()
В моем ниже репозитории я реализовал вышеуказанную концепцию с различными алгоритмами перемешивания и шифрования. Пожалуйста, бросьте звезду, если вам это нравится.
Читтераркришна/шифрование
Объяснение доступно в этой ссылке
Основная цель этого проекта – отправить зашифрованное секретное сообщение. Я собираюсь использовать драйвер Gecko, который поддерживается Mozilla Firefox и отправлять зашифрованные сообщения. Для адаптивности этот проект может даже работать с Selenium, который поддерживает Google Chrome.
Оригинал: “https://dev.to/chitturiarunkrishna/how-to-send-a-secret-whats-app-message-from-terminal-using-gecko-driver-fj1”