
sogen — Updated!
🪅 Emulatore userspace per Windows e Linux
Sogen esegue programmi Windows e Linux senza un vero sistema operativo e ti permette di vedere e controllare tutto ciò che fanno.
Invece di reimplementare migliaia di API di sistema, Sogen emula i binari a livello di CPU e syscall ed esegue le vere DLL di sistema, così il comportamento corrisponde fedelmente al sistema operativo reale.
Ogni istruzione, accesso alla memoria e chiamata API può essere agganciato, ispezionato o riscritto, le esecuzioni sono completamente deterministiche e l'intero stato dell'emulatore può essere salvato e ripristinato tramite snapshot.
Scritto in C++ e alimentato dal backend CPU di tua scelta:
Provalo: sogen.dev
Caratteristiche Principali
- Vere DLL di sistema: esegue le reali ntdll, kernel32 e user32, non stub reimplementati
- Hook e riscrittura: intercetta e modifica memoria, istruzioni, syscall e chiamate API
- Internals Windows fedeli: caricamento PE (relocazioni, TLS), tipi di memoria Windows, SEH, threading, registro di sistema, filesystem e rete
- Snapshot e ripristino: serializzazione completa dello stato, snapshot rapidi in memoria e caricamento di minidump
- Funziona ovunque: Windows, Linux, macOS, Android, iOS e browser, su x86-64 e arm64
- Deterministico: ogni esecuzione è riproducibile, fino alla singola istruzione
Anteprima
Debug Indistinguibile
Esegui il debug con gli strumenti che già conosci, come IDA Pro o GDB, tramite il protocollo GDB, oppure usa il debugger integrato nel browser.
Il debugger opera a livello di emulatore, all'esterno del processo, quindi rimane invisibile ai controlli anti-debug.
Esegui Giochi in una Sandbox
Le app GUI native funzionano, con finestre, finestre di dialogo e controlli operativi.
La paravirtualizzazione GPU abilita l'accelerazione 3D sulla tua GPU reale, mentre il backend Hyper-V esegue il codice nativamente sulla tua CPU. Abbastanza veloce per i giochi.
I titoli Direct3D 8/9/10/11 funzionano tramite DXVK, che traduce Direct3D in Vulkan sopra il ponte GPU.
Panoramica del Progetto
Clicca qui per le slide.
Binding Python
Installa con:
pip install sogen
I binding Python richiedono una root di emulazione. Puoi scaricare una root già pronta qui, oppure crearne una tua seguendo le istruzioni nella wiki.
Esempio:
import sogen
emu = sogen.windows.create_application("c:/test-sample.exe", emulation_root="./root")
def on_module_load(module):
if module.name.lower() == "test-sample.exe":
emu.hooks.memory_execution_at(module.entry_point, lambda address: print(f"hit entry point: 0x{address:x}"))
emu.callbacks.on_module_load = on_module_load
emu.start()
print(emu.process.exit_status)
Consulta examples/python/README.md per i dettagli di configurazione e un esempio più ampio.
Binding Non Ufficiali
I binding Dart sono disponibili in un repository separato.
Avvio Rapido (Windows + Visual Studio)
[!TIP]
Consulta la Wiki per maggiori dettagli su come compilare ed eseguire l'emulatore su Windows, Linux, macOS, ...
1. Scarica il codice:
git clone --recurse-submodules https://github.com/momo5502/sogen.git
2. Esegui il seguente comando in un Prompt dei comandi per sviluppatori x64 nella directory clonata:
cmake --preset=vs2022
3. Compila la soluzione generata in build/vs2022/sogen.sln
4. Crea un dump del registro eseguendo grab-registry.bat come amministratore e posizionalo nella cartella degli artefatti accanto a analyzer.exe
5. Esegui il programma di tua scelta:
analyzer.exe C:\example.exe
