Skip to content
This repository was archived by the owner on Jan 4, 2026. It is now read-only.
/ SigHunt Public archive

Windows pattern scan for x86/64 application.

License

Notifications You must be signed in to change notification settings

Bourdon94m/SigHunt

Repository files navigation

SigHunt Banner

SigHunt

Header-only C++ pattern scanner
Ultra-fast signature scanner leveraging multithreading and SSE (Streaming SIMD Extensions).


🚀 Overview

SigHunt is a lightweight, header-only C++ library designed for pattern scanning both in external processes and in the current (internal) module.
It’s built for speed and simplicity — fully multithreaded and accelerated with SSE instructions, making it ideal for high-performance memory scanning applications.


⚙️ Features

  • 🧠 Header-only – just include SigHunt.h, no build setup required.
  • Multithreaded scanning – automatic parallelization for faster results.
  • 🧩 SSE optimized – uses vectorized comparisons for ultra-fast byte matching.
  • 🔍 External & internal scanning – supports both process memory and local scanning.
  • 🧱 Cross-module compatible – works with any PE module (DLL/EXE).
  • 🧼 Clean and modern C++17 design – no dependencies, no macros, no hassle.

🧰 Usage Example

#include "SigHunt.h"
#include <chrono>

int main()
{
    auto start = std::chrono::high_resolution_clock::now();

    // External scanning
    uintptr_t addr = SigHunt::External::Find("CalculatorApp.exe",
        "E8 C3 ?? ?? ?? ?? ?? 90");

    // Internal scanning
    uintptr_t addr2 = SigHunt::Internal::Find("E8 C3 ?? ?? ?? ?? ?? 90");

    // Find all external matches
    std::vector<uintptr_t> allResExternal = SigHunt::External::FindAll("CalculatorApp.exe",
        "E8 C3 ?? ?? ?? ?? ?? 90");

    // Find all internal matches
    std::vector<uintptr_t> allResInternal = SigHunt::Internal::FindAll("E8 C3 ?? ?? ?? ?? ?? 90");

    // VTable instances from first match
    std::vector<uintptr_t> vtableInstances = SigHunt::VTableScanner::FindVTableInstances(addr);

    auto end = std::chrono::high_resolution_clock::now();
    auto ms = std::chrono::duration_cast<std::chrono::milliseconds>(end - start);

    std::cout << "External: 0x" << std::hex << addr << std::endl;
    std::cout << "Internal: 0x" << std::hex << addr2 << std::endl;
    std::cout << "All External matches: " << std::dec << allResExternal.size() << std::endl;
    std::cout << "All Internal matches: " << std::dec << allResInternal.size() << std::endl;
    std::cout << "VTable instances: " << std::dec << vtableInstances.size() << std::endl;
    std::cout << "Total scan time: " << std::dec << ms.count() << "ms\n";

    return 0;
}

🧩 Integration

Simply drop SigHunt.h into your project and include it:

#include "SigHunt.h"

No linking, no setup.
The library is entirely header-only and self-contained.


🧠 Notes

  • Tested on Windows 10/11 (x64)
  • Requires a compiler supporting C++17 or higher
  • Best performance on CPUs with SSE2+ support (almost all modern CPUs)

⚖️ License

This project is licensed under the MIT License — you're free to use, modify, and distribute it with attribution.
See the LICENSE file for details.


💚 Credits

Created by Bourdon94m — passionate about reverse engineering, low-level C++, and system internals.
Contributions, improvements, or optimizations are always welcome.


About

Windows pattern scan for x86/64 application.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages