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

Uploaded CPython 3.12Windows x86-64

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

File metadata

  • Download URL: sogen-0.0.1.dev3458.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.dev3458.tar.gz
Algorithm Hash digest
SHA256 efc2b2b974139d2a5dff47b38a5784028d202e5aa961834a90cb25c2bdb7bef5
MD5 b4b2f78294e3b5125ce17a6518c515d9
BLAKE2b-256 7f599588619e3ba2598819ce95b3d91745c332ebce2ecbf54e2a1a5bdb743ad4

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for sogen-0.0.1.dev3458-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 0810f97a0e0908732fcf00d684e7245a7911fb6c2e451901608f7362f761c1e6
MD5 3e0136bdc7ec8cd4fe43a6811250fed0
BLAKE2b-256 509cc1b4eff71a2a12e4ce18a91d477c54d30d5ca8e8baebaa5ed8abe2abef9e

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for sogen-0.0.1.dev3458-cp312-cp312-manylinux_2_39_x86_64.whl
Algorithm Hash digest
SHA256 ad4a1ed235127a4b3ea66304e6dd18bda723f0d7c43d6956d9d19ed25f1e3060
MD5 1607ebc143022560171e2c36f88d9a18
BLAKE2b-256 bb9b774ad425701c9e19f3204f214dc89a4f5954667584f2b65d8763c9341ad3

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for sogen-0.0.1.dev3458-cp312-cp312-macosx_15_0_x86_64.whl
Algorithm Hash digest
SHA256 0826ee7643e259e4855d2d6ea9a0e2bdffafa36f186c62121274f0ceb60e1ca1
MD5 8b513e111e8235729a1d6c9f5bd5e547
BLAKE2b-256 08a110d39c91f8537f7f261725db271eddd88939a2d5cd9e94eb5f5dc4d2b7e7

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for sogen-0.0.1.dev3458-cp312-cp312-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 e6930f1a75168482d94a5b399cb5d59f7b265110644192827f190f57dd95b698
MD5 0490fd24596250cd753a5c057809cc61
BLAKE2b-256 f6fcc359d207c5f9a9f2eb2545db42193c5590134482132fd023afc860df544c

See more details on using hashes here.

Provenance

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