Рубрики
Без рубрики

Как отправить секретное сообщение WhatsApp от терминала с использованием Geckodriver

Отказ от ответственности: Этот код только для образовательных целей, а автор не несет ответственности за любые минусы … Помечено Python, производительность, WhatsApp, автоматизация.

Отказ от ответственности : Этот код только для образовательных целей, и автор не несет ответственности за какие-либо последствия. Пожалуйста, не пробуйте его, если вы не согласны на условие.

Привет всем, в этом посте я покажу, как я отправил зашифрованное секретное сообщение 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”