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

Uploaded CPython 3.12Windows x86-64

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

File metadata

  • Download URL: sogen-0.0.1.dev3440.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.dev3440.tar.gz
Algorithm Hash digest
SHA256 e43ec7ab738df03744c7935840fccc55061eb071daf496371571005b13878dc2
MD5 a07549c2e6f52e39fbb70f5e52f7b09e
BLAKE2b-256 7d37454b831217320e9ee49320f59c2d5883bb915b6949ad24530e362ff22889

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for sogen-0.0.1.dev3440-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 d967f3a22474ee659ae07c020196667c79f67622b7dacca3be168257f9c70773
MD5 c48d3df592368ce9be51493025325ee1
BLAKE2b-256 8d604f31f6402c07400d5e9639d6952bf66981ffd27094b074e39a284a0a8b8f

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for sogen-0.0.1.dev3440-cp312-cp312-manylinux_2_39_x86_64.whl
Algorithm Hash digest
SHA256 acfd5b38476cd2bfbe97241318c650a04d9c9d8900953f7d5bc42b7fdfc338b7
MD5 94bde0db135e2db88622b32d609a2b89
BLAKE2b-256 2dee21be3000802afeacbed88196f3ec30de8034d3dc5a8a195b7a08c2d219c0

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for sogen-0.0.1.dev3440-cp312-cp312-macosx_15_0_x86_64.whl
Algorithm Hash digest
SHA256 03156448cd33cc68d54d9a9edcd3e4b9a8e9611a1d844b36a5d3ca91387e7f09
MD5 7069061c6273446987814941778825e3
BLAKE2b-256 b40ee6f13d1a7fbbf74ee09a616995ecdc4c80377b989b8c5c7cb670de95016a

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for sogen-0.0.1.dev3440-cp312-cp312-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 2d6cbb9e4154ba6b2f5d478a14afcdf3950586cde233c1ba0f049b7ba9ba4353
MD5 7b86e8653e3447bf87321801b16db25c
BLAKE2b-256 f5185a869715a6f83bca09beede1a4aecfbbc456efa1c1a0dec4356365b267eb

See more details on using hashes here.

Provenance

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