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

Uploaded CPython 3.12Windows x86-64

sogen-0.0.1.dev3471-cp312-cp312-manylinux_2_39_x86_64.whl (8.7 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.39+ x86-64

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

File metadata

  • Download URL: sogen-0.0.1.dev3471.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.dev3471.tar.gz
Algorithm Hash digest
SHA256 1df6b72845aab57413b10dd42bf47eaca57242cfa4d997e518d8f4780a0ab1c5
MD5 44f01abfb0dcf3b0a77e63712f7c3ec1
BLAKE2b-256 ad4e7abf4158d11850f259ed05b2c95fe787b21c145abf663e69d9c33c68c54c

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for sogen-0.0.1.dev3471-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 0b1bc92b1b90c64c573f905053ab5eed417f4eb5e634303c385aa20531ac48ea
MD5 68c05ad94e1f7f8392afb2327ebffc94
BLAKE2b-256 36c51cb16c3402b9d27324e87f4805de5efdc281900dc6337e9f84102a785633

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for sogen-0.0.1.dev3471-cp312-cp312-manylinux_2_39_x86_64.whl
Algorithm Hash digest
SHA256 c547d310553ba2fc7023d0692a45e01125935fe01d3b205ab9af6d407e12502c
MD5 fca2eca92c47f8f2b94ea3fa9d13adaa
BLAKE2b-256 1e21f5259325a4e9f896247029f961a5293e722fe7fa787b65fa9cdcd028b01d

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for sogen-0.0.1.dev3471-cp312-cp312-macosx_15_0_x86_64.whl
Algorithm Hash digest
SHA256 c2c0c7b555016591816e73984d990728d99d70fd4eca22e2703c280bf7581310
MD5 e660f6511d351d76e2fc766116ed8143
BLAKE2b-256 cd19ffeb510c2a4ee99db9f1c5ae7beadfb52335cea7c53fd42aab95ac0df6a6

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for sogen-0.0.1.dev3471-cp312-cp312-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 ffa1534c541632f60867c4ef223cf70d82767928ae08953f83f1c7435b96a2ce
MD5 02215b02b258e1bb1da97bca831640ea
BLAKE2b-256 8d6ea83e7707c69bf194d413abcd916045626ee34c5f7941a71bc91dede93d52

See more details on using hashes here.

Provenance

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