Skip to content

Commit

Permalink
Add files via upload
Browse files Browse the repository at this point in the history
  • Loading branch information
lityrgia authored Aug 10, 2024
1 parent 193f545 commit 976d2b4
Show file tree
Hide file tree
Showing 39 changed files with 103,294 additions and 0 deletions.
31 changes: 31 additions & 0 deletions minhook try.sln
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 16
VisualStudioVersion = 16.0.34729.46
MinimumVisualStudioVersion = 10.0.40219.1
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "minhook try", "minhook try\minhook try.vcxproj", "{1D278078-892D-482A-8F84-4E065BB49AFF}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|x64 = Debug|x64
Debug|x86 = Debug|x86
Release|x64 = Release|x64
Release|x86 = Release|x86
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{1D278078-892D-482A-8F84-4E065BB49AFF}.Debug|x64.ActiveCfg = Debug|x64
{1D278078-892D-482A-8F84-4E065BB49AFF}.Debug|x64.Build.0 = Debug|x64
{1D278078-892D-482A-8F84-4E065BB49AFF}.Debug|x86.ActiveCfg = Debug|Win32
{1D278078-892D-482A-8F84-4E065BB49AFF}.Debug|x86.Build.0 = Debug|Win32
{1D278078-892D-482A-8F84-4E065BB49AFF}.Release|x64.ActiveCfg = Release|x64
{1D278078-892D-482A-8F84-4E065BB49AFF}.Release|x64.Build.0 = Release|x64
{1D278078-892D-482A-8F84-4E065BB49AFF}.Release|x86.ActiveCfg = Release|Win32
{1D278078-892D-482A-8F84-4E065BB49AFF}.Release|x86.Build.0 = Release|Win32
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {2106E81D-E98F-407B-9701-93AA834882E8}
EndGlobalSection
EndGlobal
185 changes: 185 additions & 0 deletions minhook try/MinHook.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,185 @@
/*
* MinHook - The Minimalistic API Hooking Library for x64/x86
* Copyright (C) 2009-2017 Tsuda Kageyu.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
* PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER
* OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/

#pragma once

#if !(defined _M_IX86) && !(defined _M_X64) && !(defined __i386__) && !(defined __x86_64__)
#error MinHook supports only x86 and x64 systems.
#endif

#include <windows.h>

// MinHook Error Codes.
typedef enum MH_STATUS
{
// Unknown error. Should not be returned.
MH_UNKNOWN = -1,

// Successful.
MH_OK = 0,

// MinHook is already initialized.
MH_ERROR_ALREADY_INITIALIZED,

// MinHook is not initialized yet, or already uninitialized.
MH_ERROR_NOT_INITIALIZED,

// The hook for the specified target function is already created.
MH_ERROR_ALREADY_CREATED,

// The hook for the specified target function is not created yet.
MH_ERROR_NOT_CREATED,

// The hook for the specified target function is already enabled.
MH_ERROR_ENABLED,

// The hook for the specified target function is not enabled yet, or already
// disabled.
MH_ERROR_DISABLED,

// The specified pointer is invalid. It points the address of non-allocated
// and/or non-executable region.
MH_ERROR_NOT_EXECUTABLE,

// The specified target function cannot be hooked.
MH_ERROR_UNSUPPORTED_FUNCTION,

// Failed to allocate memory.
MH_ERROR_MEMORY_ALLOC,

// Failed to change the memory protection.
MH_ERROR_MEMORY_PROTECT,

// The specified module is not loaded.
MH_ERROR_MODULE_NOT_FOUND,

// The specified function is not found.
MH_ERROR_FUNCTION_NOT_FOUND
}
MH_STATUS;

// Can be passed as a parameter to MH_EnableHook, MH_DisableHook,
// MH_QueueEnableHook or MH_QueueDisableHook.
#define MH_ALL_HOOKS NULL

#ifdef __cplusplus
extern "C" {
#endif

// Initialize the MinHook library. You must call this function EXACTLY ONCE
// at the beginning of your program.
MH_STATUS WINAPI MH_Initialize(VOID);

// Uninitialize the MinHook library. You must call this function EXACTLY
// ONCE at the end of your program.
MH_STATUS WINAPI MH_Uninitialize(VOID);

// Creates a hook for the specified target function, in disabled state.
// Parameters:
// pTarget [in] A pointer to the target function, which will be
// overridden by the detour function.
// pDetour [in] A pointer to the detour function, which will override
// the target function.
// ppOriginal [out] A pointer to the trampoline function, which will be
// used to call the original target function.
// This parameter can be NULL.
MH_STATUS WINAPI MH_CreateHook(LPVOID pTarget, LPVOID pDetour, LPVOID* ppOriginal);

// Creates a hook for the specified API function, in disabled state.
// Parameters:
// pszModule [in] A pointer to the loaded module name which contains the
// target function.
// pszProcName [in] A pointer to the target function name, which will be
// overridden by the detour function.
// pDetour [in] A pointer to the detour function, which will override
// the target function.
// ppOriginal [out] A pointer to the trampoline function, which will be
// used to call the original target function.
// This parameter can be NULL.
MH_STATUS WINAPI MH_CreateHookApi(
LPCWSTR pszModule, LPCSTR pszProcName, LPVOID pDetour, LPVOID* ppOriginal);

// Creates a hook for the specified API function, in disabled state.
// Parameters:
// pszModule [in] A pointer to the loaded module name which contains the
// target function.
// pszProcName [in] A pointer to the target function name, which will be
// overridden by the detour function.
// pDetour [in] A pointer to the detour function, which will override
// the target function.
// ppOriginal [out] A pointer to the trampoline function, which will be
// used to call the original target function.
// This parameter can be NULL.
// ppTarget [out] A pointer to the target function, which will be used
// with other functions.
// This parameter can be NULL.
MH_STATUS WINAPI MH_CreateHookApiEx(
LPCWSTR pszModule, LPCSTR pszProcName, LPVOID pDetour, LPVOID* ppOriginal, LPVOID* ppTarget);

// Removes an already created hook.
// Parameters:
// pTarget [in] A pointer to the target function.
MH_STATUS WINAPI MH_RemoveHook(LPVOID pTarget);

// Enables an already created hook.
// Parameters:
// pTarget [in] A pointer to the target function.
// If this parameter is MH_ALL_HOOKS, all created hooks are
// enabled in one go.
MH_STATUS WINAPI MH_EnableHook(LPVOID pTarget);

// Disables an already created hook.
// Parameters:
// pTarget [in] A pointer to the target function.
// If this parameter is MH_ALL_HOOKS, all created hooks are
// disabled in one go.
MH_STATUS WINAPI MH_DisableHook(LPVOID pTarget);

// Queues to enable an already created hook.
// Parameters:
// pTarget [in] A pointer to the target function.
// If this parameter is MH_ALL_HOOKS, all created hooks are
// queued to be enabled.
MH_STATUS WINAPI MH_QueueEnableHook(LPVOID pTarget);

// Queues to disable an already created hook.
// Parameters:
// pTarget [in] A pointer to the target function.
// If this parameter is MH_ALL_HOOKS, all created hooks are
// queued to be disabled.
MH_STATUS WINAPI MH_QueueDisableHook(LPVOID pTarget);

// Applies all queued changes in one go.
MH_STATUS WINAPI MH_ApplyQueued(VOID);

// Translates the MH_STATUS to its name as a string.
const char* WINAPI MH_StatusToString(MH_STATUS status);

#ifdef __cplusplus
}
#endif
58 changes: 58 additions & 0 deletions minhook try/dllmain.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
#include <Windows.h>
#include <iostream>
#include <vector>
#include <iomanip>
#include <string>
#include "options.h"
#include "MinHook.h"
#include "imguiHook.h"
#include "gui.h"

#define STB_IMAGE_WRITE_IMPLEMENTATION
#include <fstream>

#if defined _M_X64
#pragma comment(lib, "libMinHook.x64.lib")
#elif defined _M_IX86
#pragma comment(lib, "libMinHook.x86.lib")
#endif

#include "hooks.h"

#include <GL/gl.h>
#pragma comment(lib, "OpenGL32.lib")

void cheatInitialize() {

ImGuiHook::Load(renderGui);

MH_CreateHook(&SwapBuffers, Hooks::getSwapBuffers(), reinterpret_cast<void**>(&fn_SwapBuffers));
MH_CreateHook(&glDrawElements, Hooks::get_glDrawElements(), reinterpret_cast<void**>(&fn_glDrawElements));
MH_CreateHook(&glDrawArrays, Hooks::get_glDrawArrays(), reinterpret_cast<void**>(&fn_glDrawArrays));

MH_EnableHook(&SwapBuffers) == MH_OK;
MH_EnableHook(&glDrawElements) == MH_OK;
MH_EnableHook(&glDrawArrays) == MH_OK;

}

BOOL APIENTRY DllMain(HMODULE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
DisableThreadLibraryCalls(hModule);
cheatInitialize();
break;
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
break;
case DLL_PROCESS_DETACH:
ImGuiHook::Unload();
break;
}
return TRUE;
}
Loading

0 comments on commit 976d2b4

Please sign in to comment.