Geckodriver를 사용하여 터미널에서 비밀 Whatsapp 메시지를 보내는 방법

부인 성명:
이 코드는 교육 목적으로만 사용되며 작성자는 결과에 대해 책임을 지지 않습니다. 조건에 동의하지 않으면 시도하지 마십시오.

여러분, 안녕하세요,
이 게시물에서는 암호화된 비밀 WHATSAPP 메시지를 보낸 방법을 보여줍니다.

전제 조건:
  • Gecko 웹 드라이버
  • 파이썬 3.X
  • pycryptodom 라이브러리
  • 암호화 라이브러리
  • colorama 라이브러리

  • 먼저 시스템의 아키텍처는 아래 그림과 같습니다.


    이 게시물에서는 AES 알고리즘을 시연합니다. 마찬가지로 다른 암호화 알고리즘을 사용해 볼 수 있습니다. 그리고 Gecko 드라이버를 사용하여 자동으로 메시지를 보낼 것입니다. 주요 목표는 whatsapp의 민감한 데이터를 암호화하고 전달하는 것입니다. 여기서 사용되는 AES의 암호화는 EAX 모드입니다.

    전문:
    이 모드는 UTF-8 인코딩을 사용하지 않기 때문에 암호화가 어렵습니다. 외부 컴파일러가 메시지를 디코딩하기 어려운 Windows-1252 인코딩을 사용합니다.

    도서관:
    먼저 필요한 라이브러리를 설치합시다. 3개의 라이브러리 pycryptodom 작성
    암호화
    colorama
    requirements.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 및 자동화에 대해 언급했습니다. 여기에서도 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
    

    비단뱀
    메시지를 해독하는 데 필요한 키를 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()
    
    

    아래 저장소에서 다양한 해싱 및 암호화 알고리즘을 사용하여 위의 개념을 구현했습니다. 당신이 그것을 좋아한다면 별을 떨어 뜨려주세요.


    치투리아룬크리슈나 / 암호화


    이 링크에서 설명을 사용할 수 있습니다.





    암호화


    이 프로젝트의 주요 목표는 암호화된 비밀 메시지를 보내는 것입니다. Mozilla Firefox에서 지원하는 Gecko 드라이버를 사용하여 암호화된 메시지를 보낼 것입니다. 적응성을 위해 이 프로젝트는 Google 크롬을 지원하는 Selenium에서도 작동할 수 있습니다.


    View on GitHub

    좋은 웹페이지 즐겨찾기