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

Uploaded CPython 3.12Windows x86-64

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

File metadata

  • Download URL: sogen-0.0.1.dev3478.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.dev3478.tar.gz
Algorithm Hash digest
SHA256 66f49343cb646237893a3578eedc33f91f86f5757f4b2a3b85a611d96ad246d7
MD5 8a0e98891348e3078dc03f490096543a
BLAKE2b-256 9f07e8973a55116c1006fc695bb5d3bdac621a70b47a327882d33de091c1d426

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for sogen-0.0.1.dev3478-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 39ddb27907ac74ed32e0a53c42f00de3c3273932d1fc7a40b2ca82e7bcc501db
MD5 f8d01d2a085cb079c94f456652d49063
BLAKE2b-256 c56c12cc1d552bc5fafbbe953ff1cf64cb116ddc7b644cd7545be0447d42ddf3

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for sogen-0.0.1.dev3478-cp312-cp312-manylinux_2_39_x86_64.whl
Algorithm Hash digest
SHA256 0497583e4d9f00727d04c7cd7f4d71360525f49cb1608c32ffe6c14318798af7
MD5 400d43357f7fc588e5ff66627843015a
BLAKE2b-256 0e9842463d56f77561fbc5cddda96bae7cb85a1ee31f79fcf97990a53f4f81d6

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for sogen-0.0.1.dev3478-cp312-cp312-macosx_15_0_x86_64.whl
Algorithm Hash digest
SHA256 c63469393058b52d101bfe6bdef4dee64d3c3479a74e822cce47651a2614dd0b
MD5 3fc749146a6ce3109f6d3dcdbdd98521
BLAKE2b-256 1f989869fd8b890893b473ddbc350a948396a19c92bdf857f141ffce54125d93

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for sogen-0.0.1.dev3478-cp312-cp312-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 46cdf9aa9f7e4b7a286c5d9af0f1153db017acfff7bc44a6b84aedf62af509d0
MD5 68d318bd1e8224e88efe6407d9dafd94
BLAKE2b-256 f92ba78be764e8ae720623f505d0f4aace7064c751dfbc914389aea4f75c2d05

See more details on using hashes here.

Provenance

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