
sogen — Updated!
🪅 Emulador de userspace para Windows e Linux
O Sogen executa programas Windows e Linux sem um sistema operacional real e permite que você veja e controle tudo o que eles fazem.
Em vez de reimplementar milhares de APIs de SO, o Sogen emula binários no nível de CPU e syscall e executa as DLLs reais do sistema, de modo que o comportamento se aproxima muito do SO real.
Cada instrução, acesso à memória e chamada de API pode ser interceptado, inspecionado ou reescrito, as execuções são totalmente determinísticas e todo o estado do emulador pode ser salvo em snapshot e restaurado.
Construído em C++ e alimentado pelo backend de CPU de sua escolha:
Experimente: sogen.dev
Principais Recursos
- DLLs reais do sistema: executa o ntdll, kernel32 e user32 reais, não stubs reimplementados
- Hook e reescrita: intercepte e altere memória, instruções, syscalls e chamadas de API
- Internals Windows fiéis: carregamento de PE (relocações, TLS), tipos de memória do Windows, SEH, threading, registro, sistema de arquivos e rede
- Snapshot e restauração: serialização completa do estado, snapshots rápidos em memória e carregamento de minidumps
- Executa em qualquer lugar: Windows, Linux, macOS, Android, iOS e navegador, em x86-64 e arm64
- Determinístico: cada execução é reproduzível, até a instrução
Pré-visualização
Depuração Indetectável
Depure com as ferramentas que você já conhece, como IDA Pro ou GDB, pelo protocolo GDB, ou use o depurador integrado no navegador.
O depurador executa no nível do emulador, fora do processo, portanto permanece invisível para verificações anti-debug.
Execute Jogos em um Sandbox
Aplicativos GUI nativos são executados, com janelas, diálogos e controles funcionais.
A paravirtualização de GPU permite aceleração 3D na sua GPU real, enquanto o backend Hyper-V executa o código nativamente na sua CPU. Rápido o suficiente para jogos.
Títulos Direct3D 8/9/10/11 são executados por meio do DXVK, que traduz Direct3D para Vulkan sobre a ponte de GPU.
Visão Geral do Projeto
Clique aqui para os slides.
Bindings Python
Instale com:
pip install sogen
Os bindings Python exigem uma raiz de emulação. Você pode baixar uma raiz pronta aqui ou criar a sua própria seguindo as instruções na wiki.
Exemplo:
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)
Consulte examples/python/README.md para detalhes de configuração e um exemplo maior.
Bindings Não Oficiais
Bindings Dart estão disponíveis em um repositório separado.
Início Rápido (Windows + Visual Studio)
[!TIP]
Consulte a Wiki para mais detalhes sobre como compilar e executar o emulador no Windows, Linux, macOS, ...
1. Faça o checkout do código:
git clone --recurse-submodules https://github.com/momo5502/sogen.git
2. Execute o seguinte comando em um Prompt de Comando de Desenvolvimento x64 no diretório clonado:
cmake --preset=vs2022
3. Compile a solução gerada em build/vs2022/sogen.sln
4. Crie um dump do registro executando o grab-registry.bat como administrador e coloque-o na pasta de artefatos ao lado do analyzer.exe
5. Execute o programa de sua escolha:
analyzer.exe C:\example.exe
