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

Uploaded CPython 3.12Windows x86-64

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

File metadata

  • Download URL: sogen-0.0.1.dev3425.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.dev3425.tar.gz
Algorithm Hash digest
SHA256 22aa7517ea29a18dce37a14a1c375c0194f2523b066761acd808f056a17f4312
MD5 74740e7b39ac9014931dde1ad078400a
BLAKE2b-256 510c6681e45e36cf697543d544d5e861c68dc53015e4d44e1532eab9249413bf

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for sogen-0.0.1.dev3425-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 7cc1b8b99c4328b4c3e9c0c76fddb85a9280f2d7b86e7ba6a5f80b8e4a42349c
MD5 e12086ca745260fc5f3bbb50d994841c
BLAKE2b-256 94049b4e3fbd2f6065e92bbe1b4054ded645f576a81cbad1498b73948190f1fd

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for sogen-0.0.1.dev3425-cp312-cp312-manylinux_2_39_x86_64.whl
Algorithm Hash digest
SHA256 bc8fc76cde15d56ba195015b8b30d62761320ace54d45c334d255bf171ed7495
MD5 2fbf44d3d40b543aa0be6c922dda140f
BLAKE2b-256 78295c04c65fd02b9b17a860dd3a4ad5fc6808620cafa13785f3fd2ccd14d038

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for sogen-0.0.1.dev3425-cp312-cp312-macosx_15_0_x86_64.whl
Algorithm Hash digest
SHA256 119d288d6bbce74424711c5a1c3bd996c890d120ee0055a0bf5793656d30cbd1
MD5 3724ed8eee5635d4961492030e732252
BLAKE2b-256 a9ee9e0dcda6c4f05e738bfeef25cb380c88b242b7a1e35c8c014f6b6ee21cdc

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for sogen-0.0.1.dev3425-cp312-cp312-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 939284a92463a470d4efc68bada0c96de030012aa2007e9042b7144b4a753a81
MD5 63086e9d6fdf8dd1b01ce9ea3cbb7ce0
BLAKE2b-256 d57b6f2ba1dd0c02d3e1bfed4aafd5cbabc3bd395c1115253b147ddc2315e3b2

See more details on using hashes here.

Provenance

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