Fix realy exploit

This commit is contained in:
momo5502 2016-08-01 17:21:46 +02:00
parent 56b01bc2ae
commit bb65f463be
9 changed files with 47 additions and 31 deletions

2
deps/fmt vendored

@ -1 +1 @@
Subproject commit d5893c9a133382e1862c929c1d50ccaef2a6d2fc Subproject commit ed301089183f51d53f9f076b9676d9c2a1f7c505

2
deps/json11 vendored

@ -1 +1 @@
Subproject commit 913269c7a4cf9ab61a9748090c7e2484a2546a02 Subproject commit fb6cc808e0a3532d27ee336cd8f2e1ff06093f3b

2
deps/mongoose vendored

@ -1 +1 @@
Subproject commit b987df197436b8581a7a5a9e00c1d341f81fdb30 Subproject commit a6230bafe706006eae1bf18406420969c835330a

2
deps/protobuf vendored

@ -1 +1 @@
Subproject commit 2ba058c66c10781d57a332987be23e3fed0f9e1c Subproject commit 00d5a7f099065e2c8d119039c2f42c1f88ad8f59

View File

@ -684,7 +684,9 @@ namespace Components
{ {
if (entry->registered) if (entry->registered)
{ {
#ifdef DEBUG
Logger::Print("Received valid node list with %i entries from %s\n", list.address_size(), address.GetCString()); Logger::Print("Received valid node list with %i entries from %s\n", list.address_size(), address.GetCString());
#endif
entry->isDedi = list.is_dedi(); entry->isDedi = list.is_dedi();
entry->protocol = list.protocol(); entry->protocol = list.protocol();

View File

@ -106,6 +106,14 @@ namespace Components
return size; return size;
} }
void QuickPatch::CL_HandleRelayPacketCheck(Game::msg_t* msg, int client)
{
if (Command::Params().Length() >= 3)
{
Game::CL_HandleRelayPacket(msg, client);
}
}
QuickPatch::QuickPatch() QuickPatch::QuickPatch()
{ {
// protocol version (workaround for hacks) // protocol version (workaround for hacks)
@ -325,6 +333,7 @@ namespace Components
Utils::Hook::Set<BYTE>(0x412370, 0xC3); // SV_SteamAuthClient Utils::Hook::Set<BYTE>(0x412370, 0xC3); // SV_SteamAuthClient
Utils::Hook(0x414D92, QuickPatch::MsgReadBitsCompressCheckSV, HOOK_CALL).Install()->Quick(); // SV_ExecuteClientCommands Utils::Hook(0x414D92, QuickPatch::MsgReadBitsCompressCheckSV, HOOK_CALL).Install()->Quick(); // SV_ExecuteClientCommands
Utils::Hook(0x4A9F56, QuickPatch::MsgReadBitsCompressCheckCL, HOOK_CALL).Install()->Quick(); // CL_ParseServerMessage Utils::Hook(0x4A9F56, QuickPatch::MsgReadBitsCompressCheckCL, HOOK_CALL).Install()->Quick(); // CL_ParseServerMessage
Utils::Hook(0x5AA009, QuickPatch::CL_HandleRelayPacketCheck, HOOK_CALL).Install()->Quick(); // CL_HandleRelayPacket
Command::Add("unlockstats", [] (Command::Params params) Command::Add("unlockstats", [] (Command::Params params)
{ {

View File

@ -1,27 +1,28 @@
namespace Components namespace Components
{ {
class QuickPatch : public Component class QuickPatch : public Component
{ {
public: public:
typedef void(Callback)(); typedef void(Callback)();
QuickPatch(); QuickPatch();
~QuickPatch(); ~QuickPatch();
const char* GetName() { return "QuickPatch"; }; const char* GetName() { return "QuickPatch"; };
static void UnlockStats(); static void UnlockStats();
static void OnShutdown(Callback* callback); static void OnShutdown(Callback* callback);
static void OnFrame(Callback* callback); static void OnFrame(Callback* callback);
static void Once(Callback* callback); static void Once(Callback* callback);
private: private:
static wink::signal<wink::slot<Callback>> ShutdownSignal; static wink::signal<wink::slot<Callback>> ShutdownSignal;
static int64_t* GetStatsID(); static int64_t* GetStatsID();
static void ShutdownStub(int channel, const char* message); static void ShutdownStub(int channel, const char* message);
static int MsgReadBitsCompressCheckSV(const char *from, char *to, int size); static int MsgReadBitsCompressCheckSV(const char *from, char *to, int size);
static int MsgReadBitsCompressCheckCL(const char *from, char *to, int size); static int MsgReadBitsCompressCheckCL(const char *from, char *to, int size);
}; static void CL_HandleRelayPacketCheck(Game::msg_t* msg, int client);
} };
}

View File

@ -13,6 +13,7 @@ namespace Game
CL_ConnectFromParty_t CL_ConnectFromParty = (CL_ConnectFromParty_t)0x433D30; CL_ConnectFromParty_t CL_ConnectFromParty = (CL_ConnectFromParty_t)0x433D30;
CL_DownloadsComplete_t CL_DownloadsComplete = (CL_DownloadsComplete_t)0x42CE90; CL_DownloadsComplete_t CL_DownloadsComplete = (CL_DownloadsComplete_t)0x42CE90;
CL_DrawStretchPicPhysical_t CL_DrawStretchPicPhysical = (CL_DrawStretchPicPhysical_t)0x4FC120; CL_DrawStretchPicPhysical_t CL_DrawStretchPicPhysical = (CL_DrawStretchPicPhysical_t)0x4FC120;
CL_HandleRelayPacket_t CL_HandleRelayPacket = (CL_HandleRelayPacket_t)0x5A8C70;
CL_ResetViewport_t CL_ResetViewport = (CL_ResetViewport_t)0x4A8830; CL_ResetViewport_t CL_ResetViewport = (CL_ResetViewport_t)0x4A8830;
Cmd_AddCommand_t Cmd_AddCommand = (Cmd_AddCommand_t)0x470090; Cmd_AddCommand_t Cmd_AddCommand = (Cmd_AddCommand_t)0x470090;

View File

@ -24,6 +24,9 @@ namespace Game
typedef void(_cdecl * CL_DrawStretchPicPhysical_t)(float x, float y, float w, float h, float xScale, float yScale, float xay, float yay, const float *color, Game::Material* material); typedef void(_cdecl * CL_DrawStretchPicPhysical_t)(float x, float y, float w, float h, float xScale, float yScale, float xay, float yay, const float *color, Game::Material* material);
extern CL_DrawStretchPicPhysical_t CL_DrawStretchPicPhysical; extern CL_DrawStretchPicPhysical_t CL_DrawStretchPicPhysical;
typedef void(__cdecl * CL_HandleRelayPacket_t)(Game::msg_t* msg, int client);
extern CL_HandleRelayPacket_t CL_HandleRelayPacket;
typedef void(__cdecl * CL_ResetViewport_t)(); typedef void(__cdecl * CL_ResetViewport_t)();
extern CL_ResetViewport_t CL_ResetViewport; extern CL_ResetViewport_t CL_ResetViewport;