Geckoドライバーを使っているターミナルから秘密のwhatsアプリメッセージを送る方法


免責事項
このコードは教育目的のためだけです、そして、著者は結果として生じるどんな責任でもありません.条件に同意しない場合はお試しください.
皆さんこんにちは.
このポストで、私は暗号化された秘密のWhatsAppメッセージを送った方法を示します.
必要条件:
  • Geckoウェブドライバ
  • Python 3X
  • pycrypdomeライブラリ
  • 暗号化ライブラリ
  • coloramaライブラリ
  • まず、システムのアーキテクチャは以下のようになる

    このポストでは、私はAESアルゴリズムで実証します.同様に、別の暗号化アルゴリズムを試すことができます.そして、Geckoドライバを使ってメッセージを自動的に送信します.主な目標は、暗号化され、WhatsAppの機密データを通信します.ここで使用されるAESの暗号化はEAXモードです.
    特殊性
    UTF - 8エンコーディングを使用しないので、このモードは暗号化が難しいです.それは、どんな外部コンパイラでもメッセージを解読するのが難しいWindows - 1252 Encodingを利用します.
    ライブラリ
    まず必要なライブラリをインストールしましょう.3ライブラリを書く
    暗号
    カラー
    要件という名前のテキストファイルで.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もここで同様の概念を使用するつもりです.最初にボットスクリプトを書いて、それをボットに保存しましょう.パイ
    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ファイル.このBOTはファイルを読み込み、メッセージを送ります.下記のようにいくつかの命令メッセージを送ることができます.

    では、暗号化部分に入りましょう.
    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()
    
    
    以下のリポジトリでは、様々なハッシュアルゴリズムと暗号化アルゴリズムを使って上記のコンセプトを実装しました.気に入ったら星を落としてください.

    キトトゥラルクリシュナ / 暗号化


    説明はこのリンクで利用可能です


    暗号化


    このプロジェクトの主な目的は暗号化された秘密のメッセージを送ることです.私はMozilla Firefoxによってサポートされ、暗号化されたメッセージを送信するgeckoドライバを使用するつもりです.このプロジェクトは、Google Chromeをサポートするセレンで動作することもできます.
    View on GitHub