From b7f33a9c4067f41b742e08c8817a53f6ff62cbb6 Mon Sep 17 00:00:00 2001 From: Jack Back Date: Sun, 31 Mar 2024 22:35:15 +0200 Subject: [PATCH] maint(network): very good fix --- src/client/component/dedicated.cpp | 4 ++++ src/client/component/network.cpp | 10 ++++++++++ 2 files changed, 14 insertions(+) diff --git a/src/client/component/dedicated.cpp b/src/client/component/dedicated.cpp index 434345e..03b951b 100644 --- a/src/client/component/dedicated.cpp +++ b/src/client/component/dedicated.cpp @@ -294,6 +294,10 @@ namespace dedicated utils::hook::call(0x140412FD3, execute_console_command); utils::hook::nop(0x140412FE9, 5); + // disable check on an unregistered relay dvar + utils::hook::nop(0x14041E9EB, 4); + utils::hook::set(0x14041E9EF, 0xEB); + utils::hook::nop(0x1404DDC2E, 5); // don't load config file utils::hook::set(0x140416100, 0xC3); // don't save config file utils::hook::set(0x1402E5830, 0xC3); // disable self-registration diff --git a/src/client/component/network.cpp b/src/client/component/network.cpp index 6f77828..d88a626 100644 --- a/src/client/component/network.cpp +++ b/src/client/component/network.cpp @@ -94,6 +94,11 @@ namespace network // Rather than try and let the player in, just tell them they are a duplicate player and reject connection game::NET_OutOfBandPrint(game::NS_SERVER, from, "error\nYou are already connected to the server."); } + + void* memmove_stub(void* dest, const void* src, std::size_t count) + { + return std::memmove(dest, src, std::min(count, 1262)); + } } void on(const std::string& command, const callback& callback) @@ -278,6 +283,11 @@ namespace network // ignore built in "print" oob command for security reasons utils::hook::set(0x1402C6AA4, 0xEB); + + // patch buffer overflow + utils::hook::call(0x14041D355, memmove_stub); + // this patches a crash found in a subroutine registered using atexit + utils::hook::set(0x140815D4E, 0xEB); } } };