import re
import sys

def decode_hex_string(hex_string):
    """
    Décode une chaîne de texte encodée en hexadécimal.
    """
    decoded_chars = []
    for part in hex_string.split('@'):
        try:
            if part:  # Ignorer les chaînes vides
                decoded_chars.append(chr(int(part, 16)))
        except ValueError as e:
            print(f"Skipping invalid hex part: {part}, Error: {e}")
    return ''.join(decoded_chars)

def extract_and_decode_data(vbs_content):
    """
    Extrait les données encodées dans le script VBS et les décode.
    """
    decoded_parts = []

    # Extrait les chaînes hexadécimales directement encodées
    direct_hex_strings = re.findall(r'"&"([@0-9A-Fa-f]+)"', vbs_content)
    for hex_string in direct_hex_strings:
        decoded_string = decode_hex_string(hex_string)
        decoded_parts.append(decoded_string)

    # Traite les données concaténées à la variable 'B'
    concatenated_data = re.findall(r'B\s*=\s*B\s*&"([^"]+)"', vbs_content, re.IGNORECASE)
    if concatenated_data:
        hex_data = "@".join(concatenated_data).replace('\n', '').replace('\r', '')
        decoded_parts.append(decode_hex_string(hex_data))

    return "\n".join(decoded_parts)

def main(file_path):
    try:
        with open(file_path, 'r', encoding='utf-8', errors='ignore') as file:
            vbs_content = file.read()
        decoded_content = extract_and_decode_data(vbs_content)
        print("Decoded VBS Content:\n", decoded_content)
    except FileNotFoundError:
        print(f"File not found: {file_path}")
    except Exception as e:
        print(f"An error occurred: {e}")

if __name__ == "__main__":
    if len(sys.argv) < 2:
        print("Usage: python decode.py <path_to_vbs_file>")
        sys.exit(1)
    file_path = sys.argv[1]
    main(file_path)
