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

Python bindings require an emulation root. You can download a ready-made root here, or create your own by following the instructions in the wiki.

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 setup details and a 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.dev3485.tar.gz (21.0 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.dev3485-cp39-cp39-win_amd64.whl (3.7 MB view details)

Uploaded CPython 3.9Windows x86-64

sogen-0.0.1.dev3485-cp39-cp39-manylinux_2_39_x86_64.whl (6.7 MB view details)

Uploaded CPython 3.9manylinux: glibc 2.39+ x86-64

sogen-0.0.1.dev3485-cp39-cp39-macosx_15_0_x86_64.whl (5.5 MB view details)

Uploaded CPython 3.9macOS 15.0+ x86-64

sogen-0.0.1.dev3485-cp39-cp39-macosx_15_0_arm64.whl (4.7 MB view details)

Uploaded CPython 3.9macOS 15.0+ ARM64

File details

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

File metadata

  • Download URL: sogen-0.0.1.dev3485.tar.gz
  • Upload date:
  • Size: 21.0 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.dev3485.tar.gz
Algorithm Hash digest
SHA256 644092ace5b182da4a651379e6a9f127c17865a017a28e778eb6ed46cd60dfce
MD5 eeb9b38696ad936589a74ac034a4a864
BLAKE2b-256 63848bc73a36c9521eecaa28bb26af68ace5163c53933064e887f2fed27b73cd

See more details on using hashes here.

Provenance

The following attestation bundles were made for sogen-0.0.1.dev3485.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.dev3485-cp39-cp39-win_amd64.whl.

File metadata

File hashes

Hashes for sogen-0.0.1.dev3485-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 a4493ad9e052e9ec335eb0060b06eea3687289587999294ef5dbb6333be844e7
MD5 a8357f68c44f251404ec4f6779de5ea0
BLAKE2b-256 06e736a48119cd5d107bee6ce30318f777b5aca4985cfc0c0263b614714f39c6

See more details on using hashes here.

Provenance

The following attestation bundles were made for sogen-0.0.1.dev3485-cp39-cp39-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.dev3485-cp39-cp39-manylinux_2_39_x86_64.whl.

File metadata

File hashes

Hashes for sogen-0.0.1.dev3485-cp39-cp39-manylinux_2_39_x86_64.whl
Algorithm Hash digest
SHA256 798b19cba4523c4c198601477579f6670902d69798d3776392fb00a9cf2e5da9
MD5 50bf03ee1dac08579a8761c4c907b556
BLAKE2b-256 7f457201cb700535932cc3e45d1c4931c0d9f6c50e98c58678ae62b2903aa4e8

See more details on using hashes here.

Provenance

The following attestation bundles were made for sogen-0.0.1.dev3485-cp39-cp39-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.dev3485-cp39-cp39-macosx_15_0_x86_64.whl.

File metadata

File hashes

Hashes for sogen-0.0.1.dev3485-cp39-cp39-macosx_15_0_x86_64.whl
Algorithm Hash digest
SHA256 cf6736ec9d10d9cf289d8d40c58fc712293b3f58e32932af8ed0cebbaa2bcab8
MD5 88243fee94f01427ef43d142e53416b8
BLAKE2b-256 3322af36ce1e72863564c30c6d186da753d719da04de4323c1c8fb98727acfb4

See more details on using hashes here.

Provenance

The following attestation bundles were made for sogen-0.0.1.dev3485-cp39-cp39-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.dev3485-cp39-cp39-macosx_15_0_arm64.whl.

File metadata

File hashes

Hashes for sogen-0.0.1.dev3485-cp39-cp39-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 7085c0771a280e06bea1cfd5ca387c1c9ea268812773f3b42a4105683e80fa25
MD5 da51856b49cdf8b34bf2c3632382c05c
BLAKE2b-256 94bcaf9b53cc0a8da751fd9348a2a18b10e105ac0e07fe794a9f5df1f7791eb4

See more details on using hashes here.

Provenance

The following attestation bundles were made for sogen-0.0.1.dev3485-cp39-cp39-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