Skip to main content

Sogen Windows user-space emulator bindings

Project description


Sogen is a high-performance Windows user space emulator that operates at syscall level, providing full control over process execution through comprehensive hooking capabilities.

Perfect for security research, malware analysis, and DRM research where fine-grained control over process execution is required.

Built in C++ and powered by the backend of your choice:

Try it out: sogen.dev


[!WARNING]
Caution is advised when analyzing malware in Sogen, as host isolation might not be perfect.
To mitigate potential risk, use the web version to benefit from the additional safety provided by your browser's sandbox.

Key Features

  • 🔄 Syscall-Level Emulation
    • Instead of reimplementing Windows APIs, the emulator operates at the syscall level, allowing it to leverage existing system DLLs
  • 📝 Advanced Memory Management
    • Supports Windows-specific memory types including reserved, committed, built on top of Unicorn's memory management
  • 📦 Complete PE Loading
    • Handles executable and DLL loading with proper memory mapping, relocations, and TLS
  • Exception Handling
    • Implements Windows structured exception handling (SEH) with proper exception dispatcher and unwinding support
  • 🧵 Threading Support
    • Provides a scheduled (round-robin) threading model
  • 💾 State Management
    • Supports both full state serialization and fast in-memory snapshots
  • 💻 Debugging Interface
    • Implements GDB serial protocol for integration with common debugging tools (IDA Pro, GDB, LLDB, VS Code, ...)

Preview

Preview

YouTube Overview

YouTube Video

Click here for the slides.

Python Bindings

Install with:

pip install sogen

Example:

import sogen

emu = sogen.create_application("c:/test-sample.exe", None, 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)

See examples/python/README.md for a slightly larger example.

Quick Start (Windows + Visual Studio)

[!TIP]
Checkout the Wiki for more details on how to build & run the emulator on Windows, Linux, macOS, ...

1. Checkout the code:

git clone --recurse-submodules https://github.com/momo5502/sogen.git

2. Run the following command in an x64 Development Command Prompt in the cloned directory:

cmake --preset=vs2022

3. Build the solution that was generated at build/vs2022/emulator.sln

4. Create a registry dump by running the grab-registry.bat as administrator and place it in the artifacts folder next to the analyzer.exe

5. Run the program of your choice:

analyzer.exe C:\example.exe

Project details


Release history Release notifications | RSS feed

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

sogen-0.0.1.dev3459.tar.gz (20.9 MB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

sogen-0.0.1.dev3459-cp312-cp312-win_amd64.whl (4.4 MB view details)

Uploaded CPython 3.12Windows x86-64

sogen-0.0.1.dev3459-cp312-cp312-manylinux_2_39_x86_64.whl (8.6 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.39+ x86-64

sogen-0.0.1.dev3459-cp312-cp312-macosx_15_0_x86_64.whl (5.9 MB view details)

Uploaded CPython 3.12macOS 15.0+ x86-64

sogen-0.0.1.dev3459-cp312-cp312-macosx_15_0_arm64.whl (5.1 MB view details)

Uploaded CPython 3.12macOS 15.0+ ARM64

File details

Details for the file sogen-0.0.1.dev3459.tar.gz.

File metadata

  • Download URL: sogen-0.0.1.dev3459.tar.gz
  • Upload date:
  • Size: 20.9 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for sogen-0.0.1.dev3459.tar.gz
Algorithm Hash digest
SHA256 2a1d84c84ec21c8dc3895f7ad217e62a1c101db6930fb78bbda252a333553a30
MD5 8920cbfa7aa3b50020ecb8da84c69d2e
BLAKE2b-256 a16cc20c04fffab38489ed7f5baf627309aa41e022763490c54558bcbaaeb0a2

See more details on using hashes here.

Provenance

The following attestation bundles were made for sogen-0.0.1.dev3459.tar.gz:

Publisher: build-push.yml on momo5502/sogen

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file sogen-0.0.1.dev3459-cp312-cp312-win_amd64.whl.

File metadata

File hashes

Hashes for sogen-0.0.1.dev3459-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 c3762194d26c9eadbf7d5241109085dbfddf91dabf7d92d3eec598373dceb3f8
MD5 b304657df91e60942503838c603a9713
BLAKE2b-256 9adf89ef31f3c6ae6f0a3aa95987376799e85e5d753420ffb6c4a95205d1fa66

See more details on using hashes here.

Provenance

The following attestation bundles were made for sogen-0.0.1.dev3459-cp312-cp312-win_amd64.whl:

Publisher: build-push.yml on momo5502/sogen

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file sogen-0.0.1.dev3459-cp312-cp312-manylinux_2_39_x86_64.whl.

File metadata

File hashes

Hashes for sogen-0.0.1.dev3459-cp312-cp312-manylinux_2_39_x86_64.whl
Algorithm Hash digest
SHA256 81983d7db9c9e12a8108fef25c842586c8f180575731ea2e32e3bad64b397326
MD5 bc8120f66926d6cf1e24ffb0f1350d8a
BLAKE2b-256 192fc691c93d7dab71e530f2c7d7122a59f47534fb71c975bf8b23bf1287012c

See more details on using hashes here.

Provenance

The following attestation bundles were made for sogen-0.0.1.dev3459-cp312-cp312-manylinux_2_39_x86_64.whl:

Publisher: build-push.yml on momo5502/sogen

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file sogen-0.0.1.dev3459-cp312-cp312-macosx_15_0_x86_64.whl.

File metadata

File hashes

Hashes for sogen-0.0.1.dev3459-cp312-cp312-macosx_15_0_x86_64.whl
Algorithm Hash digest
SHA256 4ee1d66fcc82ad98f8d1ab36e07d8fe1b02d655d9653a1bf3c3384976e5c4508
MD5 9608e69752d67c0a45d239c69c29945d
BLAKE2b-256 58d5871520a351ce15a318623457d8925d0249b857daaccde3597b599fff4e1e

See more details on using hashes here.

Provenance

The following attestation bundles were made for sogen-0.0.1.dev3459-cp312-cp312-macosx_15_0_x86_64.whl:

Publisher: build-push.yml on momo5502/sogen

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file sogen-0.0.1.dev3459-cp312-cp312-macosx_15_0_arm64.whl.

File metadata

File hashes

Hashes for sogen-0.0.1.dev3459-cp312-cp312-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 804597ccd9f256d9dff514c50df2ac2638172b003fd09a700b1e6622e05a65de
MD5 f9345540e59f96200fad0b5ee6783b45
BLAKE2b-256 602d09aca1bf18fb5d340cd358f5536905df6478afc30139acd388396c66abd8

See more details on using hashes here.

Provenance

The following attestation bundles were made for sogen-0.0.1.dev3459-cp312-cp312-macosx_15_0_arm64.whl:

Publisher: build-push.yml on momo5502/sogen

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page