From 2c889a0bc06b19f5842d002f5d671aaab8c3b419 Mon Sep 17 00:00:00 2001 From: pg9182 <96569817+pg9182@users.noreply.github.com> Date: Sun, 5 Mar 2023 16:19:15 -0500 Subject: Extract ProcessConnectionlessPacket hook to separate file --- NorthstarDLL/NorthstarDLL.vcxproj | 1 + NorthstarDLL/NorthstarDLL.vcxproj.filters | 3 +++ NorthstarDLL/server/servernethooks.cpp | 16 ++++++++++++++++ NorthstarDLL/shared/exploit_fixes/ns_limits.cpp | 7 ++----- NorthstarDLL/shared/exploit_fixes/ns_limits.h | 1 + 5 files changed, 23 insertions(+), 5 deletions(-) create mode 100644 NorthstarDLL/server/servernethooks.cpp diff --git a/NorthstarDLL/NorthstarDLL.vcxproj b/NorthstarDLL/NorthstarDLL.vcxproj index da6ed9cd..f2607a82 100644 --- a/NorthstarDLL/NorthstarDLL.vcxproj +++ b/NorthstarDLL/NorthstarDLL.vcxproj @@ -530,6 +530,7 @@ + diff --git a/NorthstarDLL/NorthstarDLL.vcxproj.filters b/NorthstarDLL/NorthstarDLL.vcxproj.filters index 4be3288b..503caa63 100644 --- a/NorthstarDLL/NorthstarDLL.vcxproj.filters +++ b/NorthstarDLL/NorthstarDLL.vcxproj.filters @@ -1453,6 +1453,9 @@ Source Files\server + + Source Files\server + diff --git a/NorthstarDLL/server/servernethooks.cpp b/NorthstarDLL/server/servernethooks.cpp new file mode 100644 index 00000000..c5f4f75f --- /dev/null +++ b/NorthstarDLL/server/servernethooks.cpp @@ -0,0 +1,16 @@ +#include "engine/r2engine.h" +#include "shared/exploit_fixes/ns_limits.h" + +AUTOHOOK_INIT() + +AUTOHOOK(ProcessConnectionlessPacket, engine.dll + 0x117800, bool, , (void* a1, R2::netpacket_t* packet)) +{ + if (!g_pServerLimits->CheckConnectionlessPacketLimits(packet)) + return false; + return ProcessConnectionlessPacket(a1, packet); +} + +ON_DLL_LOAD_RELIESON("engine.dll", ServerNetHooks, ConVar, (CModule module)) +{ + AUTOHOOK_DISPATCH_MODULE(engine.dll) +} diff --git a/NorthstarDLL/shared/exploit_fixes/ns_limits.cpp b/NorthstarDLL/shared/exploit_fixes/ns_limits.cpp index 35756044..e69ef41c 100644 --- a/NorthstarDLL/shared/exploit_fixes/ns_limits.cpp +++ b/NorthstarDLL/shared/exploit_fixes/ns_limits.cpp @@ -144,10 +144,7 @@ char, __fastcall, (void* self, void* buf)) return ret; } -// clang-format off -AUTOHOOK(ProcessConnectionlessPacket, engine.dll + 0x117800, -bool, , (void* a1, R2::netpacket_t* packet)) -// clang-format on +bool ServerLimitsManager::CheckConnectionlessPacketLimits(R2::netpacket_t* packet) { static const ConVar* Cvar_net_data_block_enabled = R2::g_pCVar->FindVar("net_data_block_enabled"); @@ -196,7 +193,7 @@ bool, , (void* a1, R2::netpacket_t* packet)) } } - return ProcessConnectionlessPacket(a1, packet); + return true; } // this is weird and i'm not sure if it's correct, so not using for now diff --git a/NorthstarDLL/shared/exploit_fixes/ns_limits.h b/NorthstarDLL/shared/exploit_fixes/ns_limits.h index bbc0a85f..d1f7f2ed 100644 --- a/NorthstarDLL/shared/exploit_fixes/ns_limits.h +++ b/NorthstarDLL/shared/exploit_fixes/ns_limits.h @@ -46,6 +46,7 @@ class ServerLimitsManager void RemovePlayer(R2::CBaseClient* player); bool CheckStringCommandLimits(R2::CBaseClient* player); bool CheckChatLimits(R2::CBaseClient* player); + bool CheckConnectionlessPacketLimits(R2::netpacket_t* packet); }; extern ServerLimitsManager* g_pServerLimits; -- cgit v1.2.3