Maurice Heumann 767c828110 Support for KnownDLLs (#694)
This is my attempt at solving #383

- For KnownDLLs I create the section objects at process setup, later in
NtOpenSection, I check if the root directory is KnownDLL or if it the
path starts with "\\KnownDll", and create a handle to the section
object.

- For handling STATUS_IMAGE_NOT_AT_BASE, I maintain a map of module
filepath -> module load count, at first load the module will get either
the preferred image or the whatever the memory manager gives, and if
load count is greater than 1, I return STATUS_IMAGE_NOT_AT_BASE, and for
that I had to allow loading multiple copies of the same DLL.

- Refactored some stuff, some functions that were used for pe file
parsing are now under winpe namespace.

- Added Dummy handler for NtFlushInstructionCache, WOW64 seems to need
it while loading.

- Remapping of win32u.dll and returning STATUS_IMAGE_NOT_AT_BASE is
problematic because ntdll.dll checks for that, and eventually crashes,
so as a workaround I don't allow remapping of it.
2026-01-14 08:27:21 +01:00
2025-01-10 21:13:15 +01:00
2026-01-14 08:49:09 +02:00
2025-10-12 17:21:51 +02:00
2025-06-18 18:23:31 +02:00
2025-03-18 20:58:26 +01:00
2025-07-11 13:43:21 +02:00
2025-05-29 10:13:17 +02:00
2024-10-23 19:10:13 +02:00


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 Unicorn Engine or the icicle-emu.

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 (currently broken 😕)
  • 💻 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.

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
Description
Languages
C++ 85.1%
TypeScript 9.9%
Rust 2.6%
CMake 1.5%
CSS 0.3%
Other 0.5%