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

Uploaded CPython 3.12Windows x86-64

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

File metadata

  • Download URL: sogen-0.0.1.dev3477.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.dev3477.tar.gz
Algorithm Hash digest
SHA256 95c7a6b8477acda3750885af574bf2e82c837ec4974413fe53bacb6523982555
MD5 daec6dc5f381fa6c81645fa046f508d5
BLAKE2b-256 12d9769045af879b08d68c55fdf9e8b2f22a7b098081e7e8e8af16b69f9f39cd

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for sogen-0.0.1.dev3477-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 987181edf9bede0f02823d91b527f1603f9918c5f54fef2c3af5c4a01105790a
MD5 a238298abce8ae87218c501df9f06e76
BLAKE2b-256 355381d1eb981e887c56ea071824554ff652764c4320e0e0bef645b686748ac6

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for sogen-0.0.1.dev3477-cp312-cp312-manylinux_2_39_x86_64.whl
Algorithm Hash digest
SHA256 effd996b19ec27cc522b3cdfebb5e47d7e611f7435cd5ca7ac1d8abf90948eb4
MD5 f8789f9c582795f6e7b7550a21f6cbc9
BLAKE2b-256 502d27a0b78d8a117f23c385de1f24c4bebe7b27abda1c51f7a59324085d6b7c

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for sogen-0.0.1.dev3477-cp312-cp312-macosx_15_0_x86_64.whl
Algorithm Hash digest
SHA256 9e5cd2b2c5831d324b621755086551c40ad4b72c6d3f88c0d0ea601abe5d7b84
MD5 a897fb722b4c5078fd37ad02cbc7138e
BLAKE2b-256 4a966557a27547ddd1f6d63768c17e9691c0a7e4fcf2b5214ee79d63e7656911

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for sogen-0.0.1.dev3477-cp312-cp312-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 1ac69c53ec34135f7ff64c2024b7eb45e396f3e064d072ef0ca603d102151690
MD5 3998dc41fc80a29d7d8fcdf444641b43
BLAKE2b-256 d479d84f544d57b105d4f968daec511856286438e4dfef7735f27a4a18caade9

See more details on using hashes here.

Provenance

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