From 5407207984215b10701747b117dd16832fc20420 Mon Sep 17 00:00:00 2001 From: Mr-X-GTA <110748953+Mr-X-GTA@users.noreply.github.com> Date: Fri, 4 Jul 2025 22:20:43 +0200 Subject: [PATCH] fix: fix BattlEyeServerProcessPlayerJoin (#606) --- src/core/memory/Module.hpp | 9 ++++----- src/game/backend/AnticheatBypass.cpp | 14 +++++++++----- .../Anticheat/GetAnticheatInitializedHash2.cpp | 3 ++- src/game/pointers/Pointers.cpp | 4 ++-- 4 files changed, 17 insertions(+), 13 deletions(-) diff --git a/src/core/memory/Module.hpp b/src/core/memory/Module.hpp index cc2978f..a856094 100644 --- a/src/core/memory/Module.hpp +++ b/src/core/memory/Module.hpp @@ -119,7 +119,6 @@ namespace YimMenu inline bool Module::IsExported(const std::string_view symbolName) const { - return GetExportImpl(symbolName) != nullptr; } @@ -141,14 +140,14 @@ namespace YimMenu const auto ordinalOffsets = m_Base.Add(exportDirectory->AddressOfNameOrdinals).As(); const auto funcOffsets = m_Base.Add(exportDirectory->AddressOfFunctions).As(); - for (std::size_t i = 0; i < exportDirectory->NumberOfFunctions; i++) + for (std::size_t i = 0; i < exportDirectory->NumberOfNames; i++) { if constexpr (std::is_convertible_v) { - if (ordinalOffsets[i] != symbol) + if (exportDirectory->Base + ordinalOffsets[i] != symbol) continue; - return m_Base.Add(funcOffsets[i]).As(); + return m_Base.Add(funcOffsets[ordinalOffsets[i]]).As(); } else if constexpr (std::is_convertible_v) { @@ -156,7 +155,7 @@ namespace YimMenu if (strcmp(functionName, symbol.data())) continue; - return m_Base.Add(funcOffsets[i]).As(); + return m_Base.Add(funcOffsets[ordinalOffsets[i]]).As(); } else { diff --git a/src/game/backend/AnticheatBypass.cpp b/src/game/backend/AnticheatBypass.cpp index 29971a7..c3fa2e9 100644 --- a/src/game/backend/AnticheatBypass.cpp +++ b/src/game/backend/AnticheatBypass.cpp @@ -121,12 +121,16 @@ namespace YimMenu if (m_IsFSLLoaded) { - HMODULE hFSL = GetModuleHandleA("WINMM.dll"); - if (hFSL) + Module* FSL = nullptr; + for (auto& module : ModuleMgr.GetModules()) + if (module.first == "WINMM.dll"_J && module.second->IsExported("LawnchairGetVersion")) + FSL = module.second.get(); + + if (FSL) { - auto LawnchairGetVersion = reinterpret_cast(GetProcAddress(hFSL, "LawnchairGetVersion")); - auto LawnchairIsProvidingLocalSaves = reinterpret_cast(GetProcAddress(hFSL, "LawnchairIsProvidingLocalSaves")); - auto LawnchairIsProvidingBattlEyeBypass = reinterpret_cast(GetProcAddress(hFSL, "LawnchairIsProvidingBattlEyeBypass")); + auto LawnchairGetVersion = FSL->GetExport("LawnchairGetVersion"); + auto LawnchairIsProvidingLocalSaves = FSL->GetExport("LawnchairIsProvidingLocalSaves"); + auto LawnchairIsProvidingBattlEyeBypass = FSL->GetExport("LawnchairIsProvidingBattlEyeBypass"); if (LawnchairGetVersion && LawnchairIsProvidingLocalSaves && LawnchairIsProvidingBattlEyeBypass) { diff --git a/src/game/hooks/Anticheat/GetAnticheatInitializedHash2.cpp b/src/game/hooks/Anticheat/GetAnticheatInitializedHash2.cpp index b74eb13..358bfc8 100644 --- a/src/game/hooks/Anticheat/GetAnticheatInitializedHash2.cpp +++ b/src/game/hooks/Anticheat/GetAnticheatInitializedHash2.cpp @@ -8,7 +8,8 @@ namespace YimMenu::Hooks std::uint32_t Anticheat::GetAnticheatInitializedHash2(void* ac_var, std::uint32_t seed) { auto orig = (*Pointers.AnticheatContext) ? (*Pointers.AnticheatContext)->m_BattlEyeEnabled : false; - (*Pointers.AnticheatContext)->m_BattlEyeEnabled = true; // integ checks will boot us out if we set this outside this function + if (*Pointers.AnticheatContext) + (*Pointers.AnticheatContext)->m_BattlEyeEnabled = true; // integ checks will boot us out if we set this outside this function auto ret = BaseHook::Get>()->Original()(ac_var, seed); if (*Pointers.AnticheatContext) (*Pointers.AnticheatContext)->m_BattlEyeEnabled = orig; diff --git a/src/game/pointers/Pointers.cpp b/src/game/pointers/Pointers.cpp index 5e63a10..dc652c8 100644 --- a/src/game/pointers/Pointers.cpp +++ b/src/game/pointers/Pointers.cpp @@ -384,9 +384,9 @@ namespace YimMenu HasGTAPlus = addr.Add(3).Rip().As(); }); - constexpr auto battlEyeServerProcessPlayerJoinPtrn = Pattern<"BA 2D AD 45 3F">("BattlEyeServerProcessPlayerJoin"); + constexpr auto battlEyeServerProcessPlayerJoinPtrn = Pattern<"41 57 41 56 41 55 41 54 56 57 55 53 48 83 EC 48 48 89 D3 48 89 CE E9">("BattlEyeServerProcessPlayerJoin"); scanner.Add(battlEyeServerProcessPlayerJoinPtrn, [this](PointerCalculator ptr) { - BattlEyeServerProcessPlayerJoin = ptr.Sub(0x72).As(); + BattlEyeServerProcessPlayerJoin = ptr.As(); }); constexpr auto assistedAimShouldReleaseEntityPtrn = Pattern<"80 7F 28 04 75 6A">("AssistedAimShouldReleaseEntity");