
sogen — Actualizado!
🪅 Emulador de espacio de usuario para Windows y Linux
Sogen ejecuta programas de Windows y Linux sin un sistema operativo real, y te permite ver y controlar todo lo que hacen.
En lugar de reimplementar miles de APIs del sistema operativo, Sogen emula binarios a nivel de CPU y llamadas al sistema y ejecuta las DLLs reales del sistema, por lo que el comportamiento se asemeja mucho al sistema operativo real.
Cada instrucción, acceso a memoria y llamada a API puede ser interceptado, inspeccionado o reescrito, las ejecuciones son totalmente deterministas, y todo el estado del emulador puede ser capturado y restaurado.
Construido en C++ y potenciado por el backend de CPU de tu elección:
Pruébalo: sogen.dev
Características Clave
- DLLs reales del sistema: ejecuta las ntdll, kernel32 y user32 reales, no stubs reimplementados
- Interceptar y reescribir: intercepta y modifica memoria, instrucciones, llamadas al sistema y llamadas a API
- Internals fieles de Windows: carga de PE (reubicaciones, TLS), tipos de memoria de Windows, SEH, subprocesos, registro, sistema de archivos y red
- Instantánea y restauración: serialización completa del estado, instantáneas rápidas en memoria y carga de minidumps
- Se ejecuta en todas partes: Windows, Linux, macOS, Android, iOS y el navegador, en x86-64 y arm64
- Determinista: cada ejecución es reproducible, hasta la instrucción
Vista Previa
Depuración Indetectable
Depura con las herramientas que ya conoces, como IDA Pro o GDB, mediante el protocolo GDB, o usa el depurador integrado en el navegador.
El depurador se ejecuta a nivel del emulador, fuera del proceso, por lo que permanece invisible a las comprobaciones anti-depuración.
Ejecuta Juegos en un Sandbox
Las aplicaciones GUI nativas se ejecutan, con ventanas, diálogos y controles funcionales.
La paravirtualización de GPU permite aceleración 3D en tu GPU real, mientras que el backend Hyper-V ejecuta el código de forma nativa en tu CPU. Suficientemente rápido para juegos.
Los títulos Direct3D 8/9/10/11 se ejecutan mediante DXVK, que traduce Direct3D a Vulkan sobre el puente de GPU.
Resumen del Proyecto
Haz clic aquí para ver las diapositivas.
Bindings de Python
Instala con:
pip install sogen
Los bindings de Python requieren una raíz de emulación. Puedes descargar una raíz ya preparada aquí, o crear la tuya propia siguiendo las instrucciones en la wiki.
Ejemplo:
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 para detalles de configuración y un ejemplo más completo.
Bindings No Oficiales
Los bindings de Dart están disponibles en un repositorio separado.
Inicio Rápido (Windows + Visual Studio)
[!TIP]
Consulta la Wiki para más detalles sobre cómo compilar y ejecutar el emulador en Windows, Linux, macOS, ...
1. Obtén el código:
git clone --recurse-submodules https://github.com/momo5502/sogen.git
2. Ejecuta el siguiente comando en un Símbolo del sistema para desarrolladores x64 en el directorio clonado:
cmake --preset=vs2022
3. Compila la solución que se generó en build/vs2022/sogen.sln
4. Crea un volcado del registro ejecutando el grab-registry.bat como administrador y colócalo en la carpeta de artefactos junto al analyzer.exe
5. Ejecuta el programa de tu elección:
analyzer.exe C:\example.exe
