#include "Hooking.hpp" #include "BaseHook.hpp" #include "DetourHook.hpp" #include "VMTHook.hpp" #include "game/hooks/Hooks.hpp" #include "game/pointers/Pointers.hpp" namespace YimMenu { Hooking::Hooking() { BaseHook::Add(new DetourHook("WndProc", Pointers.WndProc, Hooks::Window::WndProc)); auto swapchain_vft = *reinterpret_cast(*Pointers.SwapChain); BaseHook::Add(new DetourHook("Present", swapchain_vft[Hooks::SwapChain::VMTPresentIdx], Hooks::SwapChain::Present)); BaseHook::Add(new DetourHook("ResizeBuffers", swapchain_vft[Hooks::SwapChain::VMTResizeBuffersIdx], Hooks::SwapChain::ResizeBuffers)); BaseHook::Add(new DetourHook("QueueDependency", Pointers.QueueDependency, Hooks::Anticheat::QueueDependency)); BaseHook::Add(new DetourHook("PrepareMetricForSending", Pointers.PrepareMetricForSending, Hooks::Anticheat::PrepareMetricForSending)); BaseHook::Add(new DetourHook("GetThreadContext", reinterpret_cast(GetProcAddress(LoadLibraryA("kernel32.dll"), "GetThreadContext")), Hooks::Anticheat::GetThreadContext)); BaseHook::Add(new DetourHook("HttpStartRequest", Pointers.HttpStartRequest, Hooks::Anticheat::HttpStartRequest)); BaseHook::Add(new DetourHook("RunScriptThreads", Pointers.RunScriptThreads, Hooks::Script::RunScriptThreads)); BaseHook::Add(new DetourHook("InitNativeTables", Pointers.InitNativeTables, Hooks::Script::InitNativeTables)); BaseHook::Add(new DetourHook("ScriptVM", reinterpret_cast(Pointers.ScriptVM), Hooks::Script::ScriptVM)); BaseHook::Add(new DetourHook("AssignPhysicalIndex", Pointers.AssignPhysicalIndex, Hooks::Info::AssignPhysicalIndex)); BaseHook::Add(new DetourHook("NetworkPlayerMgrShutdown", Pointers.NetworkPlayerMgrShutdown, Hooks::Info::NetworkPlayerMgrShutdown)); BaseHook::Add(new DetourHook("ReceiveNetMessage", Pointers.ReceiveNetMessage, Hooks::Network::ReceiveNetMessage)); BaseHook::Add(new DetourHook("IsNodeInScope", Pointers.IsNodeInScope, Hooks::Spoofing::IsNodeInScope)); BaseHook::Add(new DetourHook("ShouldUseNodeCache", Pointers.ShouldUseNodeCache, Hooks::Spoofing::ShouldUseNodeCache)); BaseHook::Add(new DetourHook("WriteNetArrayData", Pointers.WriteNetArrayData, Hooks::Spoofing::WriteNetArrayData)); BaseHook::Add(new DetourHook("WriteNodeData", Pointers.WriteNodeData, Hooks::Spoofing::WriteNodeData)); BaseHook::Add(new DetourHook("WriteSyncTree", Pointers.WriteSyncTree, Hooks::Spoofing::WriteSyncTree)); } Hooking::~Hooking() { DestroyImpl(); } bool Hooking::Init() { return GetInstance().InitImpl(); } void Hooking::Destroy() { GetInstance().DestroyImpl(); BytePatches::RestoreAll(); } bool Hooking::InitImpl() { BaseHook::EnableAll(); m_MinHook.ApplyQueued(); return true; } void Hooking::DestroyImpl() { BaseHook::DisableAll(); m_MinHook.ApplyQueued(); for (auto it : BaseHook::Hooks()) { delete it; } BaseHook::Hooks().clear(); } }