added proper vtable checking for most classes

This commit is contained in:
EricPlayZ
2024-05-08 18:22:22 +03:00
parent f692641c28
commit fa6a9e0fb8
18 changed files with 64 additions and 8 deletions

View File

@ -1,4 +1,5 @@
#include <pch.h> #include <pch.h>
#include "..\offsets.h"
#include "CBulletPhysicsCharacter.h" #include "CBulletPhysicsCharacter.h"
#include "CoPhysicsProperty.h" #include "CoPhysicsProperty.h"
@ -23,6 +24,8 @@ namespace Engine {
CBulletPhysicsCharacter* ptr = pCoPhysicsProperty->pCBulletPhysicsCharacter; CBulletPhysicsCharacter* ptr = pCoPhysicsProperty->pCBulletPhysicsCharacter;
if (!Utils::Memory::IsValidPtrMod(ptr, "engine_x64_rwdi.dll")) if (!Utils::Memory::IsValidPtrMod(ptr, "engine_x64_rwdi.dll"))
return nullptr; return nullptr;
if (*reinterpret_cast<DWORD64**>(ptr) != Offsets::GetVT_CBulletPhysicsCharacter())
return nullptr;
return ptr; return ptr;
} __except (EXCEPTION_EXECUTE_HANDLER) { } __except (EXCEPTION_EXECUTE_HANDLER) {

View File

@ -1,4 +1,5 @@
#include <pch.h> #include <pch.h>
#include "..\offsets.h"
#include "CGSObject.h" #include "CGSObject.h"
#include "CLevel.h" #include "CLevel.h"
@ -12,6 +13,8 @@ namespace Engine {
CGSObject* ptr = pCLevel->pCGSObject; CGSObject* ptr = pCLevel->pCGSObject;
if (!Utils::Memory::IsValidPtrMod(ptr, "engine_x64_rwdi.dll")) if (!Utils::Memory::IsValidPtrMod(ptr, "engine_x64_rwdi.dll"))
return nullptr; return nullptr;
if (*reinterpret_cast<DWORD64**>(ptr) != Offsets::GetVT_CGSObject())
return nullptr;
return ptr; return ptr;
} __except (EXCEPTION_EXECUTE_HANDLER) { } __except (EXCEPTION_EXECUTE_HANDLER) {

View File

@ -18,6 +18,8 @@ namespace Engine {
CInput* ptr = *reinterpret_cast<CInput**>(Offsets::Get_g_CInput()); CInput* ptr = *reinterpret_cast<CInput**>(Offsets::Get_g_CInput());
if (!Utils::Memory::IsValidPtrMod(ptr, "engine_x64_rwdi.dll")) if (!Utils::Memory::IsValidPtrMod(ptr, "engine_x64_rwdi.dll"))
return nullptr; return nullptr;
if (*reinterpret_cast<DWORD64**>(ptr) != Offsets::GetVT_CInput())
return nullptr;
return ptr; return ptr;
} __except (EXCEPTION_EXECUTE_HANDLER) { } __except (EXCEPTION_EXECUTE_HANDLER) {

View File

@ -1,4 +1,5 @@
#include <pch.h> #include <pch.h>
#include "..\offsets.h"
#include "CGame.h" #include "CGame.h"
#include "CLevel.h" #include "CLevel.h"
@ -12,6 +13,8 @@ namespace Engine {
CLevel* ptr = pCGame->pCLevel; CLevel* ptr = pCGame->pCLevel;
if (!Utils::Memory::IsValidPtrMod(ptr, "engine_x64_rwdi.dll")) if (!Utils::Memory::IsValidPtrMod(ptr, "engine_x64_rwdi.dll"))
return nullptr; return nullptr;
if (*reinterpret_cast<DWORD64**>(ptr) != Offsets::GetVT_CLevel())
return nullptr;
return ptr; return ptr;
} __except (EXCEPTION_EXECUTE_HANDLER) { } __except (EXCEPTION_EXECUTE_HANDLER) {

View File

@ -11,6 +11,8 @@ namespace Engine {
CLobbySteam* ptr = *reinterpret_cast<CLobbySteam**>(Offsets::Get_CLobbySteam()); CLobbySteam* ptr = *reinterpret_cast<CLobbySteam**>(Offsets::Get_CLobbySteam());
if (!Utils::Memory::IsValidPtrMod(ptr, "engine_x64_rwdi.dll")) if (!Utils::Memory::IsValidPtrMod(ptr, "engine_x64_rwdi.dll"))
return nullptr; return nullptr;
if (*reinterpret_cast<DWORD64**>(ptr) != Offsets::GetVT_CLobbySteam())
return nullptr;
return ptr; return ptr;
} __except (EXCEPTION_EXECUTE_HANDLER) { } __except (EXCEPTION_EXECUTE_HANDLER) {

View File

@ -1,4 +1,5 @@
#include <pch.h> #include <pch.h>
#include "..\offsets.h"
#include "CGame.h" #include "CGame.h"
#include "CVideoSettings.h" #include "CVideoSettings.h"
@ -12,6 +13,8 @@ namespace Engine {
CVideoSettings* ptr = pCGame->pCVideoSettings; CVideoSettings* ptr = pCGame->pCVideoSettings;
if (!Utils::Memory::IsValidPtrMod(ptr, "engine_x64_rwdi.dll")) if (!Utils::Memory::IsValidPtrMod(ptr, "engine_x64_rwdi.dll"))
return nullptr; return nullptr;
if (*reinterpret_cast<DWORD64**>(ptr) != Offsets::GetVT_CVideoSettings())
return nullptr;
return ptr; return ptr;
} __except (EXCEPTION_EXECUTE_HANDLER) { } __except (EXCEPTION_EXECUTE_HANDLER) {

View File

@ -18,6 +18,8 @@ namespace GamePH {
DayNightCycle* ptr = *reinterpret_cast<DayNightCycle**>(Offsets::Get_g_DayNightCycle()); DayNightCycle* ptr = *reinterpret_cast<DayNightCycle**>(Offsets::Get_g_DayNightCycle());
if (!Utils::Memory::IsValidPtrMod(ptr, "gamedll_ph_x64_rwdi.dll")) if (!Utils::Memory::IsValidPtrMod(ptr, "gamedll_ph_x64_rwdi.dll"))
return nullptr; return nullptr;
if (*reinterpret_cast<DWORD64**>(ptr) != Offsets::GetVT_DayNightCycle())
return nullptr;
return ptr; return ptr;
} __except (EXCEPTION_EXECUTE_HANDLER) { } __except (EXCEPTION_EXECUTE_HANDLER) {

View File

@ -24,6 +24,8 @@ namespace GamePH {
FreeCamera* ptr = reinterpret_cast<FreeCamera*>(*pg_FreeCamera); FreeCamera* ptr = reinterpret_cast<FreeCamera*>(*pg_FreeCamera);
if (!Utils::Memory::IsValidPtrMod(ptr, "gamedll_ph_x64_rwdi.dll")) if (!Utils::Memory::IsValidPtrMod(ptr, "gamedll_ph_x64_rwdi.dll"))
return nullptr; return nullptr;
if (*reinterpret_cast<DWORD64**>(ptr) != Offsets::GetVT_FreeCamera())
return nullptr;
return ptr; return ptr;
} __except (EXCEPTION_EXECUTE_HANDLER) { } __except (EXCEPTION_EXECUTE_HANDLER) {

View File

@ -36,6 +36,8 @@ namespace GamePH {
GameDI_PH* ptr = pCGame->pGameDI_PH; GameDI_PH* ptr = pCGame->pGameDI_PH;
if (!Utils::Memory::IsValidPtrMod(ptr, "gamedll_ph_x64_rwdi.dll")) if (!Utils::Memory::IsValidPtrMod(ptr, "gamedll_ph_x64_rwdi.dll"))
return nullptr; return nullptr;
if (*reinterpret_cast<DWORD64**>(ptr) != Offsets::GetVT_GameDI_PH())
return nullptr;
return ptr; return ptr;
} __except (EXCEPTION_EXECUTE_HANDLER) { } __except (EXCEPTION_EXECUTE_HANDLER) {

View File

@ -1,5 +1,6 @@
#include <pch.h> #include <pch.h>
#include "..\Engine\CLevel.h" #include "..\Engine\CLevel.h"
#include "..\offsets.h"
#include "LevelDI.h" #include "LevelDI.h"
#include "PlayerObjProperties.h" #include "PlayerObjProperties.h"
@ -139,6 +140,8 @@ namespace GamePH {
LevelDI* ptr = pCLevel->pLevelDI; LevelDI* ptr = pCLevel->pLevelDI;
if (!Utils::Memory::IsValidPtrMod(ptr, "gamedll_ph_x64_rwdi.dll")) if (!Utils::Memory::IsValidPtrMod(ptr, "gamedll_ph_x64_rwdi.dll"))
return nullptr; return nullptr;
if (*reinterpret_cast<DWORD64**>(ptr) != Offsets::GetVT_LevelDI())
return nullptr;
return ptr; return ptr;
} __except (EXCEPTION_EXECUTE_HANDLER) { } __except (EXCEPTION_EXECUTE_HANDLER) {

View File

@ -1,4 +1,5 @@
#include <pch.h> #include <pch.h>
#include "..\offsets.h"
#include "LocalClientDI.h" #include "LocalClientDI.h"
#include "SessionCooperativeDI.h" #include "SessionCooperativeDI.h"
@ -12,6 +13,8 @@ namespace GamePH {
LocalClientDI* ptr = pSessionCooperativeDI->pLocalClientDI; LocalClientDI* ptr = pSessionCooperativeDI->pLocalClientDI;
if (!Utils::Memory::IsValidPtrMod(ptr, "gamedll_ph_x64_rwdi.dll")) if (!Utils::Memory::IsValidPtrMod(ptr, "gamedll_ph_x64_rwdi.dll"))
return nullptr; return nullptr;
if (*reinterpret_cast<DWORD64**>(ptr) != Offsets::GetVT_LocalClientDI())
return nullptr;
return ptr; return ptr;
} __except (EXCEPTION_EXECUTE_HANDLER) { } __except (EXCEPTION_EXECUTE_HANDLER) {

View File

@ -1,5 +1,6 @@
#include <pch.h> #include <pch.h>
#include "..\Engine\CGSObject2.h" #include "..\Engine\CGSObject2.h"
#include "..\offsets.h"
#include "LogicalPlayer.h" #include "LogicalPlayer.h"
namespace GamePH { namespace GamePH {
@ -12,6 +13,8 @@ namespace GamePH {
LogicalPlayer* ptr = pCGSObject2->pLogicalPlayer; LogicalPlayer* ptr = pCGSObject2->pLogicalPlayer;
if (!Utils::Memory::IsValidPtrMod(ptr, "gamedll_ph_x64_rwdi.dll")) if (!Utils::Memory::IsValidPtrMod(ptr, "gamedll_ph_x64_rwdi.dll"))
return nullptr; return nullptr;
if (*reinterpret_cast<DWORD64**>(ptr) != Offsets::GetVT_LogicalPlayer())
return nullptr;
return ptr; return ptr;
} __except (EXCEPTION_EXECUTE_HANDLER) { } __except (EXCEPTION_EXECUTE_HANDLER) {

View File

@ -13,6 +13,8 @@ namespace GamePH {
PlayerDI_PH* ptr = iLevel->pPlayerDI_PH; PlayerDI_PH* ptr = iLevel->pPlayerDI_PH;
if (!Utils::Memory::IsValidPtrMod(ptr, "gamedll_ph_x64_rwdi.dll")) if (!Utils::Memory::IsValidPtrMod(ptr, "gamedll_ph_x64_rwdi.dll"))
return nullptr; return nullptr;
if (*reinterpret_cast<DWORD64**>(ptr) != Offsets::GetVT_PlayerDI_PH())
return nullptr;
return ptr; return ptr;
} __except (EXCEPTION_EXECUTE_HANDLER) { } __except (EXCEPTION_EXECUTE_HANDLER) {

View File

@ -11,6 +11,8 @@ namespace GamePH {
PlayerState* ptr = *reinterpret_cast<PlayerState**>(Offsets::Get_PlayerState()); PlayerState* ptr = *reinterpret_cast<PlayerState**>(Offsets::Get_PlayerState());
if (!Utils::Memory::IsValidPtrMod(ptr, "gamedll_ph_x64_rwdi.dll")) if (!Utils::Memory::IsValidPtrMod(ptr, "gamedll_ph_x64_rwdi.dll"))
return nullptr; return nullptr;
if (*reinterpret_cast<DWORD64**>(ptr) != Offsets::GetVT_PlayerState())
return nullptr;
return ptr; return ptr;
} __except (EXCEPTION_EXECUTE_HANDLER) { } __except (EXCEPTION_EXECUTE_HANDLER) {

View File

@ -1,4 +1,5 @@
#include <pch.h> #include <pch.h>
#include "..\offsets.h"
#include "GameDI_PH.h" #include "GameDI_PH.h"
#include "SessionCooperativeDI.h" #include "SessionCooperativeDI.h"
@ -12,6 +13,8 @@ namespace GamePH {
SessionCooperativeDI* ptr = pGameDI_PH->pSessionCooperativeDI; SessionCooperativeDI* ptr = pGameDI_PH->pSessionCooperativeDI;
if (!Utils::Memory::IsValidPtrMod(ptr, "gamedll_ph_x64_rwdi.dll")) if (!Utils::Memory::IsValidPtrMod(ptr, "gamedll_ph_x64_rwdi.dll"))
return nullptr; return nullptr;
if (*reinterpret_cast<DWORD64**>(ptr) != Offsets::GetVT_SessionCooperativeDI())
return nullptr;
return ptr; return ptr;
} __except (EXCEPTION_EXECUTE_HANDLER) { } __except (EXCEPTION_EXECUTE_HANDLER) {

View File

@ -1,4 +1,5 @@
#include <pch.h> #include <pch.h>
#include "..\offsets.h"
#include "CoBaseCameraProxy.h" #include "CoBaseCameraProxy.h"
#include "FreeCamera.h" #include "FreeCamera.h"
#include "TPPCameraDI.h" #include "TPPCameraDI.h"
@ -17,6 +18,8 @@ namespace GamePH {
TPPCameraDI* ptr = pCoBaseCameraProxy->pTPPCameraDI; TPPCameraDI* ptr = pCoBaseCameraProxy->pTPPCameraDI;
if (!Utils::Memory::IsValidPtrMod(ptr, "gamedll_ph_x64_rwdi.dll")) if (!Utils::Memory::IsValidPtrMod(ptr, "gamedll_ph_x64_rwdi.dll"))
return nullptr; return nullptr;
if (*reinterpret_cast<DWORD64**>(ptr) != Offsets::GetVT_TPPCameraDI())
return nullptr;
return ptr; return ptr;
} __except (EXCEPTION_EXECUTE_HANDLER) { } __except (EXCEPTION_EXECUTE_HANDLER) {

View File

@ -29,27 +29,42 @@ static retType GetVT_## name () {\
} }
struct Offsets { struct Offsets {
AddVTOffset(FloatPlayerVariable, "gamedll_ph_x64_rwdi.dll", "FloatPlayerVariable", LPVOID)
AddVTOffset(BoolPlayerVariable, "gamedll_ph_x64_rwdi.dll", "BoolPlayerVariable", LPVOID)
AddVTOffset(TypedFieldMetaFloatPlayerVariable, "gamedll_ph_x64_rwdi.dll", "?$TypedFieldMeta@VFloatPlayerVariable@@@?$FieldsCollection@VPlayerVariables@@@constds", LPVOID)
AddVTOffset(TypedFieldMetaBoolPlayerVariable, "gamedll_ph_x64_rwdi.dll", "?$TypedFieldMeta@VBoolPlayerVariable@@@?$FieldsCollection@VPlayerVariables@@@constds", LPVOID)
// Input related // Input related
AddOffset(g_CInput, "engine_x64_rwdi.dll", "48 8B 0D [?? ?? ?? ?? 48 85 C9 74 ?? 48 8B 01 84 D2", Utils::SigScan::PatternType::RelativePointer, DWORD64**) AddOffset(g_CInput, "engine_x64_rwdi.dll", "48 8B 0D [?? ?? ?? ?? 48 85 C9 74 ?? 48 8B 01 84 D2", Utils::SigScan::PatternType::RelativePointer, DWORD64**)
// Player vars related // Player vars related
//AddOffset(LoadPlayerFloatVariable, "gamedll_ph_x64_rwdi.dll", "E8 [?? ?? ?? ?? 48 8B D0 48 8D 8C 24 ?? ?? ?? ?? E8 ?? ?? ?? ?? 48 8D 94 24 ?? ?? ?? ?? 48 8B 8C 24 ?? ?? ?? ?? E8 ?? ?? ?? ?? 48 8D 8C 24 ?? ?? ?? ?? E8 ?? ?? ?? ?? 48 8D 8C 24 ?? ?? ?? ?? E8 ?? ?? ?? ?? 48 8B 84 24 ?? ?? ?? ??", PatternType::RelativePointer, DWORD64*); AddVTOffset(FloatPlayerVariable, "gamedll_ph_x64_rwdi.dll", "FloatPlayerVariable", LPVOID)
AddVTOffset(BoolPlayerVariable, "gamedll_ph_x64_rwdi.dll", "BoolPlayerVariable", LPVOID)
AddVTOffset(TypedFieldMetaFloatPlayerVariable, "gamedll_ph_x64_rwdi.dll", "?$TypedFieldMeta@VFloatPlayerVariable@@@?$FieldsCollection@VPlayerVariables@@@constds", LPVOID)
AddVTOffset(TypedFieldMetaBoolPlayerVariable, "gamedll_ph_x64_rwdi.dll", "?$TypedFieldMeta@VBoolPlayerVariable@@@?$FieldsCollection@VPlayerVariables@@@constds", LPVOID)
AddOffset(LoadPlayerVars, "gamedll_ph_x64_rwdi.dll", "48 89 4C 24 ?? B8 ?? ?? ?? ?? E8 ?? ?? ?? ?? 48 2B E0 48 8B 8C 24", Utils::SigScan::PatternType::Address, LPVOID) AddOffset(LoadPlayerVars, "gamedll_ph_x64_rwdi.dll", "48 89 4C 24 ?? B8 ?? ?? ?? ?? E8 ?? ?? ?? ?? 48 2B E0 48 8B 8C 24", Utils::SigScan::PatternType::Address, LPVOID)
AddOffset(PlayerState, "gamedll_ph_x64_rwdi.dll", "4C 8B 35 [?? ?? ?? ?? 4C 8B E2", Utils::SigScan::PatternType::RelativePointer, LPVOID) AddOffset(PlayerState, "gamedll_ph_x64_rwdi.dll", "4C 8B 35 [?? ?? ?? ?? 4C 8B E2", Utils::SigScan::PatternType::RelativePointer, LPVOID)
// Game related // Game related
AddVTOffset(CBulletPhysicsCharacter, "engine_x64_rwdi.dll", "CBulletPhysicsCharacter", LPVOID)
AddVTOffset(CGSObject, "engine_x64_rwdi.dll", "CGSObject", LPVOID)
AddVTOffset(CInput, "engine_x64_rwdi.dll", "CInput", LPVOID)
AddVTOffset(CLevel, "engine_x64_rwdi.dll", "CLevel", LPVOID)
AddVTOffset(CLobbySteam, "engine_x64_rwdi.dll", "CLobbySteam", LPVOID)
AddVTOffset(CVideoSettings, "engine_x64_rwdi.dll", "CVideoSettings", LPVOID)
AddVTOffset(DayNightCycle, "gamedll_ph_x64_rwdi.dll", "DayNightCycle", LPVOID)
AddVTOffset(FreeCamera, "gamedll_ph_x64_rwdi.dll", "FreeCamera", LPVOID)
AddVTOffset(GameDI_PH, "gamedll_ph_x64_rwdi.dll", "GameDI_PH", LPVOID)
AddVTOffset(LevelDI, "gamedll_ph_x64_rwdi.dll", "LevelDI", LPVOID)
AddVTOffset(LocalClientDI, "gamedll_ph_x64_rwdi.dll", "LocalClientDI", LPVOID)
AddVTOffset(LogicalPlayer, "gamedll_ph_x64_rwdi.dll", "LogicalPlayer", LPVOID)
AddVTOffset(PlayerDI_PH, "gamedll_ph_x64_rwdi.dll", "PlayerDI_PH", LPVOID)
AddVTOffset(PlayerState, "gamedll_ph_x64_rwdi.dll", "PlayerState", LPVOID)
AddVTOffset(SessionCooperativeDI, "gamedll_ph_x64_rwdi.dll", "SessionCooperativeDI", LPVOID)
AddVTOffset(TPPCameraDI, "gamedll_ph_x64_rwdi.dll", "TPPCameraDI", LPVOID)
AddStaticOffset(gameDI_PH2_offset, 0x28) AddStaticOffset(gameDI_PH2_offset, 0x28)
AddOffset(CLobbySteam, "engine_x64_rwdi.dll", "48 8B 05 [?? ?? ?? ?? 48 85 C0 74 ?? 48 83 C0", Utils::SigScan::PatternType::RelativePointer, LPVOID) AddOffset(CLobbySteam, "engine_x64_rwdi.dll", "48 8B 05 [?? ?? ?? ?? 48 85 C0 74 ?? 48 83 C0", Utils::SigScan::PatternType::RelativePointer, LPVOID)
AddOffset(g_PlayerObjProperties, "gamedll_ph_x64_rwdi.dll", "48 89 0D [?? ?? ?? ?? E8 ?? ?? ?? ?? 48 85 C0", Utils::SigScan::PatternType::RelativePointer, LPVOID) AddOffset(g_PlayerObjProperties, "gamedll_ph_x64_rwdi.dll", "48 89 0D [?? ?? ?? ?? E8 ?? ?? ?? ?? 48 85 C0", Utils::SigScan::PatternType::RelativePointer, LPVOID)
AddOffset(g_DayNightCycle, "gamedll_ph_x64_rwdi.dll", "48 8B 0D [?? ?? ?? ?? 48 85 C9 74 ?? E8 ?? ?? ?? ?? 84 C0 74 ?? B0 ?? 48 83 C4 ?? C3 32 C0", Utils::SigScan::PatternType::RelativePointer, LPVOID) AddOffset(g_DayNightCycle, "gamedll_ph_x64_rwdi.dll", "48 8B 0D [?? ?? ?? ?? 48 85 C9 74 ?? E8 ?? ?? ?? ?? 84 C0 74 ?? B0 ?? 48 83 C4 ?? C3 32 C0", Utils::SigScan::PatternType::RelativePointer, LPVOID)
//AddOffset(g_CameraFPPDI, "gamedll_ph_x64_rwdi.dll", "48 89 05 [?? ?? ?? ?? 40 84 FF", PatternType::RelativePointer, DWORD64*) //AddOffset(g_CameraFPPDI, "gamedll_ph_x64_rwdi.dll", "48 89 05 [?? ?? ?? ?? 40 84 FF", PatternType::RelativePointer, DWORD64*)
AddOffset(g_FreeCamera, "gamedll_ph_x64_rwdi.dll", "48 89 05 [?? ?? ?? ?? 48 89 4C 24", Utils::SigScan::PatternType::RelativePointer, DWORD64*) AddOffset(g_FreeCamera, "gamedll_ph_x64_rwdi.dll", "48 89 05 [?? ?? ?? ?? 48 89 4C 24", Utils::SigScan::PatternType::RelativePointer, DWORD64*)
//AddOffset(CameraFPPDI_VT, "gamedll_ph_x64_rwdi.dll", "48 8D 05 [?? ?? ?? ?? 48 89 07 48 8D 4F 60", PatternType::RelativePointer, DWORD64)
AddOffset(SaveGameCRCBoolCheck, "gamedll_ph_x64_rwdi.dll", "FF 50 ?? [40 22 DF 0F 85 ?? ?? ?? ?? 0F B6 05 ?? ?? ?? ?? 48 8D 3D", Utils::SigScan::PatternType::Address, LPVOID) AddOffset(SaveGameCRCBoolCheck, "gamedll_ph_x64_rwdi.dll", "FF 50 ?? [40 22 DF 0F 85 ?? ?? ?? ?? 0F B6 05 ?? ?? ?? ?? 48 8D 3D", Utils::SigScan::PatternType::Address, LPVOID)
// Functions // Functions

View File

@ -119,7 +119,7 @@ namespace Utils {
// Here I'm checking for <= 8 as we're adding 0x8 to it. So if the pattern scan returns 0 we still head the fuck out // Here I'm checking for <= 8 as we're adding 0x8 to it. So if the pattern scan returns 0 we still head the fuck out
if (vtableAddr <= 8) if (vtableAddr <= 8)
return 0; continue;
return vtableAddr; return vtableAddr;