Skip to content

Commit

Permalink
Fix after CS:GO update [1.38.5.2 | 1544]
Browse files Browse the repository at this point in the history
  • Loading branch information
komashchenko committed Feb 3, 2023
1 parent 4c33272 commit 8701a02
Show file tree
Hide file tree
Showing 4 changed files with 23 additions and 23 deletions.
20 changes: 10 additions & 10 deletions plugin/client_precache_fix.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -33,9 +33,9 @@ bool ClientPrecacheFix::Init(char* error, size_t maxlength)
const uint8_t CNetworkStringTablePattern[] = "\x55\x8B\xEC\x51\x8B\x45\x1C\x53\x8B\x5D\x10\x56\x8B\xF1\x8B\x4D\x14\x57\x80\x66\x20\xFB\x89\x46\x24";
const uint8_t WriteUpdatePattern[] = "\x53\x8B\xDC\x83\xEC\x08\x83\xE4\xF0\x83\xC4\x04\x55\x8B\x6B\x04\x89\x6C\x24\x04\x8B\xEC\x81\xEC\x58\x05\x00\x00";
#else
const uint8_t WriteBaselinesPattern[] = "\x8B\x55\xA0\x8B\x07\x89\x3C\x24\x89\x54\x24\x04\xFF\x50\x14\x89\xC3\x8B\x46\x0C\x8B\x55\x14\x89\x1C";
const uint8_t CNetworkStringTablePattern[] = "\x55\x89\xE5\x57\x56\x53\x83\xEC\x2C\x8B\x5D\x08\x8B\x75\x18\x8B\x7D\x14\x80\x63\x20\xFB\xC7\x03";
const uint8_t WriteUpdatePattern[] = "\x55\x89\xE5\x57\x56\x53\x81\xEC\x9C\x04\x00\x00\x8B\x45\x18\x8B\x75\x08\x8B\x5D\x10\x39\x45\x14\x7E\x2A\x8B\x46\x18\x39\x45\x18";
const uint8_t WriteBaselinesPattern[] = "\x8B\x45\x08\x8B\x00\x8B\x40\x14\x3D\x2A\x2A\x2A\x2A\x0F\x85\x2A\x2A\x2A\x2A\x83\xEC\x08";
const uint8_t CNetworkStringTablePattern[] = "\x55\x89\xE5\x57\x56\x53\x83\xEC\x1C\x8B\x7D\x08\x8B\x45\x20\x8B\x5D\x18\x8B\x75\x14\x80\x67\x20\xFB";
const uint8_t WriteUpdatePattern[] = "\x55\x89\xE5\x57\x56\x53\x81\xEC\x5C\x04\x00\x00\x8B\x45\x18\x39\x45\x14\x8B\x75\x10\x7E\x2A\x8B\x45\x08\x8B\x40\x18\x39\x45\x18";
#endif

void* pWriteBaselines = g_PatternFinderEngine.Find<void*>(WriteBaselinesPattern, sizeof(WriteBaselinesPattern) - 1);
Expand Down Expand Up @@ -67,11 +67,11 @@ bool ClientPrecacheFix::Init(char* error, size_t maxlength)
m_pCNetworkStringTable_WriteUpdate = new subhook::Hook(pCNetworkStringTable_WriteUpdate, reinterpret_cast<void*>(CNetworkStringTable_WriteUpdateHook));
CNetworkStringTable_WriteUpdate = reinterpret_cast<decltype(CNetworkStringTable_WriteUpdate)>(m_pCNetworkStringTable_WriteUpdate->GetTrampoline());

uintptr_t pJmpBack = reinterpret_cast<uintptr_t>(WriteBaselines_GetTableHook) + WIN_LINUX(0x1C, 0x1A);
uintptr_t pJmpBack = reinterpret_cast<uintptr_t>(WriteBaselines_GetTableHook) + WIN_LINUX(0x1C, 0x1B);

// Set jmp address [pWriteBaselines + 0x8 | 0xF]
// Set jmp address [pWriteBaselines + 0x8 | 0x24]
UnprotectMem(pJmpBack, 4);
*reinterpret_cast<uint32_t*>(pJmpBack) = reinterpret_cast<uintptr_t>(pWriteBaselines) - pJmpBack + WIN_LINUX(0x8, 0xF) - 0x4;
*reinterpret_cast<uint32_t*>(pJmpBack) = reinterpret_cast<uintptr_t>(pWriteBaselines) - pJmpBack + WIN_LINUX(0x8, 0x24) - 0x4;

return true;
}
Expand Down Expand Up @@ -141,10 +141,10 @@ WIN_LINUX(__declspec(naked), __attribute__((naked))) void ClientPrecacheFix::Wri
__asm mov edx, [ebp+0x0C] // bf_write& buf
__asm mov edx, [edx+0x14] // buf::m_pDebugName
#else
__asm mov edx, [esi+0x14] // buf::m_pDebugName
__asm mov edx, [edi+0x14] // buf::m_pDebugName
#endif
__asm xor eax, eax
__asm cmp dword ptr [edx], 0x535F5653 // S_SV (SV_SendServerinfo->msg)
__asm cmp dword ptr [edx], 0x535F5653 // S_VS (SV_SendServerinfo->msg)
__asm sete al

// Call GetTableOverride
Expand All @@ -153,8 +153,8 @@ WIN_LINUX(__declspec(naked), __attribute__((naked))) void ClientPrecacheFix::Wri
__asm mov edx, edi // i
__asm mov ecx, ebx // this
#else
__asm mov edx, [ebp-0x60] // i
__asm mov ecx, edi // this
__asm mov edx, [ebp-0x5C] // i
__asm mov ecx, [ebp+0x8] // this
#endif
__asm call WriteBaselines_GetTableOverride

Expand Down
16 changes: 8 additions & 8 deletions plugin/limit_extender.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -36,11 +36,11 @@ bool LimitExtender::Init(char* error, size_t maxlength)
const uint8_t CHLTVClient_SendSignonDataPattern[] = "\x55\x8B\xEC\x83\xEC\x44\x56\x8B\xF1\x8B\x86\xF8\x01\x00\x00";
const uint8_t CBaseClient_SendSignonDataPattern[] = "\x55\x8B\xEC\x83\xE4\xF8\x83\xEC\x54\x53\x56\x57\x68";
#else
const uint8_t CreateNetworkStringTablesPattern[] = "\x55\x89\xE5\x83\xEC\x28\xA1\x2A\x2A\x2A\x2A\x8B\x10\xC7\x44\x24\x14\x01\x00\x00\x00\xC7\x44\x24\x10\x00\x00\x00\x00\xC7\x44\x24\x0C\x00\x00\x00\x00\xC7\x44\x24\x08\x00\x04\x00\x00\xC7\x44\x24\x04\x2A\x2A\x2A\x2A\x89\x04\x24\xFF\x52\x08\xA3\x2A\x2A\x2A\x2A\xA1\x2A\x2A\x2A\x2A\x8B\x10";
const uint8_t SendTablePattern[] = "\x55\x89\xE5\x57\x56\x53\x83\xEC\x4C\xA1\x2A\x2A\x2A\x2A\x8B\x7D\x08\x85\xC0";
const uint8_t CreateBaselinePattern[] = "\x55\x89\xE5\x57\x56\x53\x81\xEC\x8C\x40\x00\x00\xC7\x04\x24";
const uint8_t CHLTVClient_SendSignonDataPattern[] = "\x55\x89\xE5\x83\xEC\x48\x89\x5D\xF8\x8B\x5D\x08\x89\x75\xFC\x8B\xB3\xE4\x01\x00\x00";
const uint8_t CBaseClient_SendSignonDataPattern[] = "\x55\x89\xE5\x56\x53\x83\xEC\x50\x8B\x5D\x08\xC7\x04\x24";
const uint8_t CreateNetworkStringTablesPattern[] = "\x55\x89\xE5\x83\xEC\x10\xA1\x2A\x2A\x2A\x2A\x8B\x10\x6A\x01\x6A\x00\x6A\x00\x68\x00\x04\x00\x00\x68\x2A\x2A\x2A\x2A\x50\xFF\x52\x08\x83\xC4\x18";
const uint8_t SendTablePattern[] = "\x55\x89\xE5\x57\x56\x53\x83\xEC\x1C\x8B\x1D\x2A\x2A\x2A\x2A\x85\xDB\x0F\x85";
const uint8_t CreateBaselinePattern[] = "\x55\x89\xE5\x57\x56\x53\x81\xEC\x78\x40\x00\x00\x65\xA1\x14\x00\x00\x00\x89\x45\xE4\x31\xC0";
const uint8_t CHLTVClient_SendSignonDataPattern[] = "\x55\x89\xE5\x57\x56\x53\x83\xEC\x4C\x8B\x5D\x08\x8B\xB3\xE4\x01\x00\x00";
const uint8_t CBaseClient_SendSignonDataPattern[] = "\x55\x89\xE5\x57\x56\x53\x83\xEC\x68\x8B\x5D\x08\x68\x2A\x2A\x2A\x2A\xE8\x2A\x2A\x2A\x2A\x83\xC4\x10";
#endif

uintptr_t pCreateNetworkStringTables = g_PatternFinderServer.Find<uintptr_t>(CreateNetworkStringTablesPattern, sizeof(CreateNetworkStringTablesPattern) - 1);
Expand Down Expand Up @@ -84,7 +84,7 @@ bool LimitExtender::Init(char* error, size_t maxlength)
}

// Maxentries parameter
m_pMaxEntries = reinterpret_cast<uint32_t*>(pCreateNetworkStringTables + WIN_LINUX(0x2F, 0x63));
m_pMaxEntries = reinterpret_cast<uint32_t*>(pCreateNetworkStringTables + WIN_LINUX(0x2F, 0x37));

// DT_ParticleSystem::m_iEffectIndex::m_nBits
ServerClass* pClasses = g_pServerGameDLL->GetAllServerClasses();
Expand All @@ -109,13 +109,13 @@ bool LimitExtender::Init(char* error, size_t maxlength)
}

// g_SendTableCRC
m_pSendTableCRC = *reinterpret_cast<uint32_t**>(pSendTable_Init + WIN_LINUX(0xCD, 0x10E));
m_pSendTableCRC = *reinterpret_cast<uint32_t**>(pSendTable_Init + WIN_LINUX(0xCD, 0xEC));

// Transfer modified table to clients
m_pSendTables = g_pCVar->FindVar("sv_sendtables");

// sv.m_FullSendTables
m_pFullSendTables = *reinterpret_cast<bf_write**>(pCreateBaseline + WIN_LINUX(0xA5, 0x75));
m_pFullSendTables = *reinterpret_cast<bf_write**>(pCreateBaseline + WIN_LINUX(0xA5, 0xBC));

m_pCHLTVClient_SendSignonData = new subhook::Hook(pCHLTVClient_SendSignonData, reinterpret_cast<void*>(CHLTVClient_SendSignonDataHook));

Expand Down
2 changes: 1 addition & 1 deletion plugin/particle_fix.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -99,5 +99,5 @@ void ParticleFix::LevelInit(char const* pszMapName)

const char* ParticleFix::GetPluginDescription()
{
return "ParticleFix (1.0.2) by Phoenix (˙·٠●Феникс●٠·˙)";
return "ParticleFix (1.0.3) by Phoenix (˙·٠●Феникс●٠·˙)";
}
8 changes: 4 additions & 4 deletions plugin/precache_fix.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -33,9 +33,9 @@ bool PrecacheFix::Init(char* error, size_t maxlength)
const uint8_t ParseParticleEffectsPattern[] = "\x55\x8B\xEC\x83\xEC\x14\x8A\x45\x08\x8D\x4D\xEC\x0F\x57\xC0\xA2\x2A\x2A\x2A\x2A\x57\x0F\x11\x45\xEC";
const uint8_t PrecacheStandardParticleSystemsPattern[] = "\x55\x8B\xEC\x51\x56\x8B\x35\x2A\x2A\x2A\x2A\x57\x33\xFF\x0F\xB7\x46\x26\x85\xC0\x0F\x8E";
#else
const uint8_t CParticleSystemDefinitionPattern[] = "\x55\x89\xE5\x57\x56\x31\xF6\x53\x83\xEC\x3C\x8B\x5D\x08\x89\x1C\x24\xE8\x2A\x2A\x2A\x2A\x8D\x83\x44\x01\x00\x00";
const uint8_t ParseParticleEffectsPattern[] = "\x55\x89\xE5\x57\x56\x8D\x7D\xD4\x53\x83\xEC\x3C\x0F\xB6\x45\x08\x89\x44\x24\x04\xA1\x2A\x2A\x2A\x2A\x89\x04\x24";
const uint8_t PrecacheStandardParticleSystemsPattern[] = "\x55\x89\xE5\x56\x53\x31\xDB\x83\xEC\x10\xEB\x07\x8D\x74\x26\x00\x83\xC3\x01\xA1\x2A\x2A\x2A\x2A\x89\x04\x24\xE8";
const uint8_t CParticleSystemDefinitionPattern[] = "\x55\x89\xE5\x56\x53\x8B\x5D\x08\x8B\x43\x64\x85\xC0\x74\x2A\x90\x50\xE8\x2A\x2A\x2A\x2A\x8B\x43\x64\x5E\x85\xC0";
const uint8_t ParseParticleEffectsPattern[] = "\x55\x89\xE5\x57\x56\x8D\x7D\xD4\x53\x83\xEC\x34\x0F\xB6\x45\x08\x50\xFF\x35\x2A\x2A\x2A\x2A\xE8\x2A\x2A\x2A\x2A\xC7\x45\xD4\x00\x00\x00\x00";
const uint8_t PrecacheStandardParticleSystemsPattern[] = "\x55\x89\xE5\x56\x53\x31\xDB\xEB\x2A\x8D\xB4\x26\x00\x00\x00\x00\x83\xC3\x01\x83\xEC\x0C\xFF\x35\x2A\x2A\x2A\x2A\xE8\x2A\x2A\x2A\x2A\x83\xC4\x10";
#endif

CParticleSystemDefinition_destructor = g_PatternFinderServer.Find<decltype(CParticleSystemDefinition_destructor)>(CParticleSystemDefinitionPattern, sizeof(CParticleSystemDefinitionPattern) - 1);
Expand Down Expand Up @@ -66,7 +66,7 @@ bool PrecacheFix::Init(char* error, size_t maxlength)
#ifdef _WIN32
m_pParticleSystemDictionary = **reinterpret_cast<CParticleSystemDictionary***>(reinterpret_cast<uintptr_t>(pPrecacheStandardParticleSystems) + 0x7);
#else
m_pParticleSystemDictionary = *reinterpret_cast<CParticleSystemDictionary**>(reinterpret_cast<uintptr_t>(**reinterpret_cast<void***>(reinterpret_cast<uintptr_t>(pPrecacheStandardParticleSystems) + 0x14)) + 0x8C);
m_pParticleSystemDictionary = *reinterpret_cast<CParticleSystemDictionary**>(reinterpret_cast<uintptr_t>(**reinterpret_cast<void***>(reinterpret_cast<uintptr_t>(pPrecacheStandardParticleSystems) + 0x18)) + 0x8C);
#endif

m_pPrecacheStandardParticleSystemsHook = new subhook::Hook(pPrecacheStandardParticleSystems, reinterpret_cast<void*>(PrecacheStandardParticleSystemsHook));
Expand Down

0 comments on commit 8701a02

Please sign in to comment.