/Reloaded.Hooks

Advanced native function hooks for x86, x64. Welcome to the next level!

Primary LanguageC#GNU Lesser General Public License v3.0LGPL-3.0

Project Reloaded: Hooking



WTF You can unit test function hooks!?

Coverage NuGet Build Status

Introduction

The purpose of this project is to support extending (hooking) u̷nma͘na̕g̡ed͡ ͞cod҉e (͟A̸P͡Is)́ w͟͡i͠t̴͠h̨͢͡ ̸́͟p̢҉u̢͟r̷̀è͢ ̡mąń̨͜a͏̨g͢e̴d... wait... you've heard this before many times, haven't you?

Why stop at APIs? What if we could work with "something more"?

Well, that's about the goal of this library.

Feature Highlights

  • Support for x86 and x64 architectures.
  • Call & Hook unmanaged functions with custom calling conventions.
  • Stack function hooks. Double, Triple, Quadruple, n-tuple hook functions.
  • Generate native functions that convert CDECL/Microsoft x64 function calls to custom calling convention calls, and vice versa.
  • Detects & Patches common variations of existing function hooks when hooking. Hook functions hooked by other libraries; this feature is unique to Reloaded.Hooks.
  • Utility functions allowing you to deal with aspects such as function pointers and Virtual Function Tables.

Documentation

As advanced as the library may sound, in reality using the library is super simple. The following links below should help you get started with the library:

In addition, feel free to look through Reloaded.Hooks.Tests for some ideas 😉.

Contributions

As with the standard for all of the Reloaded-Project, repositories; contributions are very welcome and encouraged.

Feel free to implement new features, make bug fixes or suggestions so long as they are accompanied by an issue with a clear description of the pull request.

If you are implementing new features, please do provide the appropriate unit tests to cover the new features you have implemented; try to keep the coverage high 😊.

Authors & Contributions

Reloaded.Hooks uses the SharpDisasm library by Justin Stenning (spazzarama), a partial port of Udis86 by Vivek Thampi. Both of these libraries are originally distributed under the under the 2-clause "Simplified BSD License".