explaingit

zvxhash/void-sniff

23C++Audience · researcherComplexity · 4/5Setup · hard

TLDR

A Windows research tool that injects a DLL into a running process and logs specific system calls it makes, highlighting patterns commonly used in malicious code injection.

Mindmap

mindmap
  root((repo))
    What it does
      Hooks ntdll calls
      Logs API activity
      Flags suspicious patterns
    Tech stack
      C++ x64
      Visual Studio 2022
      CMake
    Use cases
      Study program behavior
      Detect code injection
      Learn hooking internals
    Audience
      Security researchers
      Malware analysts
Click or tap to explore — scroll the page freely

Code map

Detail Auto

An interactive map of this repo's files and how they connect — its source is parsed live in your browser. Click Visualize to build it.

filefunction / class

Things people build with this

USE CASE 1

Inject the DLL into any Windows process to watch its file, process, and memory calls in real time via a color-coded console log.

USE CASE 2

Identify suspicious patterns like a process opening another with injection-level permissions by reviewing the flagged log entries.

USE CASE 3

Study how low-level Windows API hooking works by reading a from-scratch hook engine that patches the first 14 bytes of ntdll functions.

Tech stack

C++CMakeVisual StudioWindows x64

Getting it running

Difficulty · hard Time to first run · 1h+

Requires Windows x64, Visual Studio 2022, CMake 3.20+, and manual DLL injection into a live target process.

No license information is provided in the explanation.

In plain English

VoidSniff is a Windows tool for watching what a program does at a low level while it runs. It packages itself as a single DLL file that you inject into another process, after which it intercepts specific operating system calls that process makes and prints a colored log of what it found. The goal is to help people understand and study program behavior, particularly patterns that show up in malicious software such as injecting code into other processes or replacing a process's memory with different code. The tool works by patching the entry points of three specific Windows functions inside ntdll, which is the core Windows library that almost every program uses to talk to the operating system. The three functions it watches are: one that handles opening or creating files, one that opens handles to other running processes, and one that maps sections of memory from one process into another. When any of these are called, VoidSniff logs what happened, who called it, and flags anything that looks suspicious, such as a process opening another process with permissions typically used for code injection. Because VoidSniff writes its own hook engine from scratch without borrowing any external hooking library, it is also a demonstration of how this kind of interception works at the machine-code level. It overwrites the first 14 bytes of a function with a jump instruction pointing to its own code, saves the original bytes, and restores them briefly when it needs to call the real function through. Building it requires Windows, Visual Studio 2022, and CMake 3.20 or newer. Running it means injecting the compiled DLL into whatever process you want to observe, then watching the console window it opens for a live feed of activity. Pressing F10 cleanly removes all hooks and unloads the DLL from the target process. The project is deliberately scoped to x64 Windows only and is described as a research and educational tool rather than something for production use.

Copy-paste prompts

Prompt 1
I compiled void-sniff as a DLL on Windows x64 with CMake and Visual Studio 2022. Walk me through injecting it into a target process and explain what each colored log entry represents.
Prompt 2
Using void-sniff's 14-byte jump trampoline approach, help me write a new hook for NtCreateThread that follows the same pattern used for the three existing ntdll hooks.
Prompt 3
I see NtOpenProcess calls in my void-sniff log with a high access mask value. Help me decode the flags to determine whether this looks like a code injection attempt.
Prompt 4
How does void-sniff restore the original ntdll bytes before calling the real function through the hook, and why is that step necessary to avoid an infinite loop?
Open on GitHub → Explain another repo

← zvxhash on gitmyhub — every repo by this author, as a profile.

Verify against the repo before relying on details.