
🪅 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
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.

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.

Clicca qui per le slide.
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.
I binding Dart sono disponibili in un repository separato.
[!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