import os
import xxtea
import base64
import json
from datetime import datetime
import requests

# raw_url = input("Input LINK URL: ")
# referer_url = input("Input Referral URL: ")

# headers = {
    # 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36',
    # 'Referer': referer_url,
# }


raw_url = input("Input LINK URL: ")

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36',
}


def base64_decode_and_xxtea_decrypt(encrypted_data, key):
    decrypted_data = base64.b64decode(encrypted_data)
    decrypted_data = xxtea.decrypt(decrypted_data, key)
    return decrypted_data.decode('utf-8')  # Decode the decrypted bytes to utf-8 format

def fetch_and_decode_raw_content(raw_link, headers):
    try:
        response = requests.get(raw_link, headers=headers)
        response.raise_for_status()  # Raise an HTTPError for bad responses
        return response.text
    except requests.RequestException as e:
        print(f"Error fetching raw content: {e}")
        return None

def add_info_to_data(data):
    kmkz = "IHsKICAgICAgICAiWzwvPl0gW1NuaWZmZXJCeV0iOiAiRW56b1p4eCIsCiAgICAgICAgIls8Lz5dIFtUZWxlZ3JhbV0iOiAiaHR0cHM6Ly90Lm1lL1hEZWNyeXRvcklkIiwKICAgICAgICAiWzwvPl0gW1Rvb2xzXSI6ICJQeXRob24gRGVjcnlwdCB4IEtlZXAgSnNvbiAxLjAuMyDCqSIKICAgIH0="
    decoded_data = base64.b64decode(kmkz).decode('utf-8')
    
    try:
        data["Info"] = json.loads(decoded_data)
    except json.JSONDecodeError as e:
        print(f"Error decoding JSON: {e}")

def main():
    enzo_password = "Zm95c29sQDEyMw=="
    key = base64.b64decode(enzo_password).decode('utf-8')

    try:
        # Fetch and decode raw content
        decrypted_text = fetch_and_decode_raw_content(raw_url, headers)

        # Check if decryption is successful before proceeding
        if decrypted_text:
            encrypted_data = json.loads(base64_decode_and_xxtea_decrypt(decrypted_text, key))

            decrypted_data = []

            for network in encrypted_data.get("Networks", []):
                if "SNIHost" in network:
                    network["SNIHost"] = base64_decode_and_xxtea_decrypt(network.get("SNIHost", ""), key)
                if "Payload" in network:
                    network["Payload"] = base64_decode_and_xxtea_decrypt(network.get("Payload", ""), key)
                if "ProxySettings" in network and "Squid" in network["ProxySettings"]:
                    network["ProxySettings"]["Squid"] = base64_decode_and_xxtea_decrypt(network["ProxySettings"].get("Squid", ""), key)

            decrypted_data.append(encrypted_data)

            folder_name = "/sdcard/EnzoSniffer/"
            os.makedirs(folder_name, exist_ok=True)

            # Define output file path
            file_path = os.path.join(folder_name, "[Devmaster-DATA]SnifferBY_ENzoZxx.txt")
            add_info_to_data(encrypted_data)
            output_data = {"Info": encrypted_data.pop("Info"), **encrypted_data}

            # Write decrypted data to the output file
            with open(file_path, "w") as output_file:
                json.dump(output_data, output_file, indent=4, ensure_ascii=False)

            timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
            number_of_entries = sum(len(encrypted_data[key]) for key in ["Servers", "Networks", "SSLNetworks"])

            success_message = (
                f"* Decryption Successful for {number_of_entries} entries! Data\n"
                f"* Timestamp: {timestamp}\n"
                f"* SnifferBy: EnzoZxx\n"
                f"* =========================================="
            )
            print(success_message)

        else:
            print("Error: Decryption failed or no content retrieved.")

    except json.JSONDecodeError as e:
        print(f"Error decoding JSON: {e}")
    except Exception as e:
        print(f"Error: {e}")

if __name__ == "__main__":
    main()