From 2ec7b2c7f16cab6bb28fa7de2b86e6ec876d9eb7 Mon Sep 17 00:00:00 2001 From: Segfault <5221072+Segfaultd@users.noreply.github.com> Date: Sun, 9 Mar 2025 22:20:55 +0100 Subject: [PATCH] Disabled VFS inheritance. Reversed methods --- code/client/src/core/hooks/vfs.cpp | 23 ++++++++++++++++++- code/client/src/sdk/patterns.cpp | 7 ++++++ code/client/src/sdk/patterns.h | 7 ++++++ .../ue/sys/filesystem/c_virtual_file_system.h | 2 +- 4 files changed, 37 insertions(+), 2 deletions(-) diff --git a/code/client/src/core/hooks/vfs.cpp b/code/client/src/core/hooks/vfs.cpp index d4477ba9..db7ebe55 100644 --- a/code/client/src/core/hooks/vfs.cpp +++ b/code/client/src/core/hooks/vfs.cpp @@ -4,6 +4,10 @@ #include +#include "sdk/patterns.h" +#include "sdk/ue/sys/filesystem/c_virtual_file_system.h" +#include "sdk/ue/sys/filesystem/c_virtual_file_system_cache.h" + #include "vfs.h" namespace MafiaMP::Core::Hooks { @@ -34,7 +38,24 @@ namespace MafiaMP::Core::Hooks { } } +typedef __int64(__fastcall *C_VirtualFileSystemCache__AddDirectoryContentToCache_t)(SDK::ue::sys::filesystem::C_VirtualFileSystemCache *, const char *); +C_VirtualFileSystemCache__AddDirectoryContentToCache_t C_VirtualFileSystemCache__AddDirectoryContentToCache_original = nullptr; + +__int64 __fastcall C_VirtualFileSystemCache__AddDirectoryContentToCache(SDK::ue::sys::filesystem::C_VirtualFileSystemCache *pThis, const char *path) { + // Framework::Logging::GetLogger("VFS")->trace("Adding directory content to cache: {}", path); + return C_VirtualFileSystemCache__AddDirectoryContentToCache_original(pThis, path); +} + +typedef void *(__fastcall *C_VirtualFileSystem__Open_t)(SDK::ue::sys::filesystem::C_VirtualFileSystem *, char const *, unsigned int, char const *, unsigned char); +C_VirtualFileSystem__Open_t C_VirtualFileSystem__Open_original = nullptr; + +void *__fastcall C_VirtualFileSystem__Open(SDK::ue::sys::filesystem::C_VirtualFileSystem *pThis, char const *path, unsigned int a2, char const *a3, unsigned char a4) { + //Framework::Logging::GetLogger("VFS")->trace("Opening file: {}", path); + return C_VirtualFileSystem__Open_original(pThis, path, a2, a3, a4); +} + static InitFunction init([]() { - // MafiaMP::Core::Hooks::MafiaMPVFS::Install(); + MH_CreateHook((LPVOID)SDK::gPatterns.C_VirtualFileSystemCache__AddDirectoryContentToCache, (PBYTE)C_VirtualFileSystemCache__AddDirectoryContentToCache, reinterpret_cast(&C_VirtualFileSystemCache__AddDirectoryContentToCache_original)); + MH_CreateHook((LPVOID)SDK::gPatterns.C_VirtualFileSystem__Open, (PBYTE)C_VirtualFileSystem__Open, reinterpret_cast(&C_VirtualFileSystem__Open_original)); }, "VFS"); diff --git a/code/client/src/sdk/patterns.cpp b/code/client/src/sdk/patterns.cpp index 5e98c4cf..87d58377 100644 --- a/code/client/src/sdk/patterns.cpp +++ b/code/client/src/sdk/patterns.cpp @@ -458,6 +458,13 @@ namespace SDK { gPatterns.C_VehicleRealLightManager__SetReflectorLightsOn = reinterpret_cast(hook::get_pattern("48 83 EC ? 4C 8B C9 84 D2 74 ? 45 84 C0")); gPatterns.C_VehicleRealLightManager__SetVisible = reinterpret_cast(hook::get_pattern("48 89 5C 24 ? 57 48 83 EC ? 8B 41 ? 0F B6 FA D1 E8")); + // C_VirtualFileSystem + gPatterns.C_VirtualFileSystem__Mount = reinterpret_cast(hook::get_pattern("48 89 4C 24 ? 55 53 57 41 54 41 56 41 57 48 8D 6C 24 ? 48 81 EC ? ? ? ? 4D 8B F8")); + gPatterns.C_VirtualFileSystem__Open = reinterpret_cast(hook::get_pattern("48 89 5C 24 ? 48 89 6C 24 ? 48 89 74 24 ? 48 89 7C 24 ? 41 56 48 83 EC ? 48 8B 41 ? 48 8B E9")); + + // C_VirtualFileSystemCache + gPatterns.C_VirtualFileSystemCache__AddDirectoryContentToCache = reinterpret_cast(hook::get_pattern("48 89 5C 24 ? 48 89 74 24 ? 57 48 83 EC ? 80 B9 ? ? ? ? ? 48 8B F2 48 8B F9 74")); + // C_WAnimPlaybackManager gPatterns.C_WAnimPlaybackManager__PlayState = hook::get_opcode_address("E8 ? ? ? ? 4C 39 7F 50"); diff --git a/code/client/src/sdk/patterns.h b/code/client/src/sdk/patterns.h index 13892429..cd11b51b 100644 --- a/code/client/src/sdk/patterns.h +++ b/code/client/src/sdk/patterns.h @@ -408,6 +408,13 @@ namespace SDK { uint64_t C_VehicleRealLightManager__SetReflectorLightsOn = 0x0; uint64_t C_VehicleRealLightManager__SetVisible = 0x0; + // C_VirtualFileSystem + uint64_t C_VirtualFileSystem__Mount = 0x0; + uint64_t C_VirtualFileSystem__Open = 0x0; + + // C_VirtualFileSystemCache + uint64_t C_VirtualFileSystemCache__AddDirectoryContentToCache = 0x0; + // C_WAnimPlaybackManager uint64_t C_WAnimPlaybackManager__PlayState = 0x0; diff --git a/code/client/src/sdk/ue/sys/filesystem/c_virtual_file_system.h b/code/client/src/sdk/ue/sys/filesystem/c_virtual_file_system.h index a3114148..ee2d0f15 100644 --- a/code/client/src/sdk/ue/sys/filesystem/c_virtual_file_system.h +++ b/code/client/src/sdk/ue/sys/filesystem/c_virtual_file_system.h @@ -75,7 +75,7 @@ namespace SDK::ue::sys::filesystem { //TODO: continue }; - class C_VirtualFileSystem : public I_VirtualFileSystem { + class C_VirtualFileSystem /*: public I_VirtualFileSystem */ { }; }