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.dev3445.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.dev3445-cp312-cp312-win_amd64.whl (4.4 MB view details)

Uploaded CPython 3.12Windows x86-64

sogen-0.0.1.dev3445-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.dev3445-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.dev3445-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.dev3445.tar.gz.

File metadata

  • Download URL: sogen-0.0.1.dev3445.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.dev3445.tar.gz
Algorithm Hash digest
SHA256 48468b98381d186787d8650cf5fe8d324fe4e04c67a9d37e184a61ab81b52a0b
MD5 d96b21c2632e47e1f6f62bdb369f5082
BLAKE2b-256 50cd5e61f16883213d90d17126f70c4ac0cca8680b399829c4dd427559d05483

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for sogen-0.0.1.dev3445-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 73abcee5d97d4f95e73a5a8b9cf1779dc31948fe6bf259bf978ed1522b9cc4c4
MD5 5516928a75adf56f9455d5d1f36d7846
BLAKE2b-256 71e893bfd38ca7eabd3162144cd2ef0d6d1a67e6f5301f87ebeae534289ac582

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for sogen-0.0.1.dev3445-cp312-cp312-manylinux_2_39_x86_64.whl
Algorithm Hash digest
SHA256 463ac3c407cffb37b722aec079b6a74d5da8778f93079a6914c91a8b376057ae
MD5 80a3815f9db0f591e854a9b67ae4f5b8
BLAKE2b-256 cd1f8750dfb6965376f9d33d5764d2381d63898da1d68393dcccab6b0bf336a4

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for sogen-0.0.1.dev3445-cp312-cp312-macosx_15_0_x86_64.whl
Algorithm Hash digest
SHA256 e470441ea079f498725d576d99128a333d97cc76c4216e754061596aa2d0f91b
MD5 61c1f4df081033dcf070d00abd7be0a6
BLAKE2b-256 b5c8630cff9edd5c25c79cb9936f46ebdb7180c51364fdc10ccf968272d6a83d

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for sogen-0.0.1.dev3445-cp312-cp312-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 1374744816a42406e56ab66d6cababe48e523804e3b762a641e53116bc364b15
MD5 9317c8f7da760a2d03c82919ffd14bca
BLAKE2b-256 8f0474886cb063ddbe6f00f33eb34457c5f4f956d84333ae015cf7e9ba4c5f7c

See more details on using hashes here.

Provenance

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