Fix: 2024/04/18 update (#21)

* Fix signatures

* Use offset instead off midfunc signature

* Split signature + offset for games
This commit is contained in:
Natanel Shitrit 2024-04-23 20:48:58 +03:00 committed by GitHub
parent 3c2c79cb07
commit b563b80bae
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 38 additions and 9 deletions

View File

@ -29,12 +29,6 @@
"Signatures" "Signatures"
{ {
"CBaseServer__CheckMasterServerRequestRestart"
{
"library" "engine"
"windows" "\xE8\x2A\x2A\x2A\x2A\x83\x78\x04\x00\x74\x2A\xE8\x2A\x2A\x2A\x2A\x8B\x48\x04\x8B\x01\x8B\x40\x2C\xFF\xD0\x84\xC0\x74\x2A\x56"
}
"Steam3Server" "Steam3Server"
{ {
"library" "engine" "library" "engine"
@ -53,6 +47,14 @@
"engine" "hl2dm" "engine" "hl2dm"
} }
"Offsets"
{
"CheckMasterServerRequestRestart_Steam3ServerFuncOffset"
{
"windows" "1"
}
}
"Signatures" "Signatures"
{ {
"CBaseServer__ConnectClient" "CBaseServer__ConnectClient"
@ -86,6 +88,12 @@
"mac" "@_ZN11CBaseServer18CheckChallengeTypeEP11CBaseClientiR8netadr_siPKcii" "mac" "@_ZN11CBaseServer18CheckChallengeTypeEP11CBaseClientiR8netadr_siPKcii"
"windows" "\x55\x8B\xEC\x83\xEC\x14\x56\x57\x8B\x7D\x2A\x8B\xF1" "windows" "\x55\x8B\xEC\x83\xEC\x14\x56\x57\x8B\x7D\x2A\x8B\xF1"
} }
"CBaseServer__CheckMasterServerRequestRestart"
{
"library" "engine"
"windows" "\xE8\x2A\x2A\x2A\x2A\x83\x78\x04\x00\x74\x2A\xE8\x2A\x2A\x2A\x2A\x8B\x48\x04\x8B\x01\x8B\x40\x2C\xFF\xD0\x84\xC0\x74\x2A\x56"
}
} }
} }
@ -96,6 +104,14 @@
"engine" "tf2" "engine" "tf2"
} }
"Offsets"
{
"CheckMasterServerRequestRestart_Steam3ServerFuncOffset"
{
"windows" "240"
}
}
"Signatures" "Signatures"
{ {
"CBaseServer__ConnectClient" "CBaseServer__ConnectClient"
@ -103,7 +119,7 @@
"library" "engine" "library" "engine"
"linux" "@_ZN11CBaseServer13ConnectClientER8netadr_siiiiPKcS3_S3_i" "linux" "@_ZN11CBaseServer13ConnectClientER8netadr_siiiiPKcS3_S3_i"
"linux64" "@_ZN11CBaseServer13ConnectClientER8netadr_siiiiPKcS3_S3_i" "linux64" "@_ZN11CBaseServer13ConnectClientER8netadr_siiiiPKcS3_S3_i"
"windows" "\x55\x8B\xEC\x81\xEC\x24\x05\x00\x00" "windows" "\x55\x8B\xEC\x81\xEC\x24\x05\x00\x00\x53\x56\x57\x68\x2A\x2A\x2A\x2A"
} }
"CBaseServer__RejectConnection" "CBaseServer__RejectConnection"
@ -119,7 +135,7 @@
"library" "engine" "library" "engine"
"linux" "@_ZN11CBaseClient10SetSteamIDERK8CSteamID" "linux" "@_ZN11CBaseClient10SetSteamIDERK8CSteamID"
"linux64" "@_ZN11CBaseClient10SetSteamIDERK8CSteamID" "linux64" "@_ZN11CBaseClient10SetSteamIDERK8CSteamID"
"windows" "\x55\x8B\xEC\x56\x57\x8B\x7D\x08\x8B\xF1\x8D\x4E\x04" "windows" "\x55\x8B\xEC\x56\x8B\xF1\x57\x8B\x7D\x08\x8D\x4E\x04"
} }
"CBaseServer__CheckChallengeType" "CBaseServer__CheckChallengeType"
@ -129,6 +145,12 @@
"linux64" "@_ZN11CBaseServer18CheckChallengeTypeEP11CBaseClientiR8netadr_siPKcii" "linux64" "@_ZN11CBaseServer18CheckChallengeTypeEP11CBaseClientiR8netadr_siPKcii"
"windows" "\x55\x8B\xEC\x83\xEC\x14\x53\x8B\x5D\x14" "windows" "\x55\x8B\xEC\x83\xEC\x14\x53\x8B\x5D\x14"
} }
"CBaseServer__CheckMasterServerRequestRestart"
{
"library" "engine"
"windows" "\x55\x8B\xEC\x83\xEC\x1C\x53\x57\x33\xD2"
}
} }
} }
} }

View File

@ -359,8 +359,15 @@ bool Connect::SDK_OnLoad(char *error, size_t maxlen, bool late)
return false; return false;
} }
int steam3ServerFuncOffset = 0;
if (!g_pGameConf->GetOffset("CheckMasterServerRequestRestart_Steam3ServerFuncOffset", &steam3ServerFuncOffset) || steam3ServerFuncOffset == 0)
{
snprintf(error, maxlen, "Failed to find CheckMasterServerRequestRestart_Steam3ServerFuncOffset offset.\n");
return false;
}
//META_CONPRINTF("CheckMasterServerRequestRestart: %p\n", address); //META_CONPRINTF("CheckMasterServerRequestRestart: %p\n", address);
address = (void *)((intptr_t)address + 1); // Skip CALL opcode address = (void *)((intptr_t)address + steam3ServerFuncOffset);
intptr_t offset = (intptr_t)(*(void **)address); // Get offset intptr_t offset = (intptr_t)(*(void **)address); // Get offset
g_pSteam3ServerFunc = (Steam3ServerFunc)((intptr_t)address + offset + sizeof(intptr_t)); g_pSteam3ServerFunc = (Steam3ServerFunc)((intptr_t)address + offset + sizeof(intptr_t));