diff --git a/PolygonClientUtilities/Classes.h b/PolygonClientUtilities/Classes.h index 26e0d08..018bd6b 100644 --- a/PolygonClientUtilities/Classes.h +++ b/PolygonClientUtilities/Classes.h @@ -3,19 +3,38 @@ #include "Config.h" #include -struct Game +struct Tuple { - void* padding1[26]; // 2010 has a class size of 104 + void* padding1[4]; + bool padding2; + bool padding3; }; -const auto Game__initializeConstruct = (void * (__thiscall*)(void* _this, int a2))0x455D40; - struct DataModel { void* padding1[CLASSPADDING_DATAMODEL__JOBID + PADDING_STRUCT]; std::string jobId; }; +struct Game +{ + // void* padding1[26]; // 2010 has a class size of 104 + void* padding1[8]; + // int dataModel; + // void* padding2[17]; + std::shared_ptr dataModel; + void* padding2[9]; +}; + +const auto Game__initializeClass = (Game * (__thiscall*)(void* _this, int a2))0x455D40; + +const auto sub_47C280 = (int(__thiscall*)(int _this, int a2))0x47C280; +const auto sub_902680 = (void * (__thiscall*)(void * _this))0x902680; +const auto ServiceProvider__createScriptContext = (void * (__thiscall*)(void* _this))0x4282E0; +const auto ScriptContext__setTimeout = (void (__thiscall*)(void* _this, double seconds))0x616EB0; +// const auto ScriptContext__execute = (void * (__thiscall*)(void* _this, void* a1, int identity, const char* script, const char* name, int arguments))0x617CF0; +const auto ScriptContext__execute = (void (__thiscall*)(void* _this, int identity, const char* script, const char* name))0x617C80; + struct Http { #if PADDING_STRUCT != 0 diff --git a/PolygonClientUtilities/Debug/PolygonClientUtilities.ilk b/PolygonClientUtilities/Debug/PolygonClientUtilities.ilk index bca18fe..972eb3f 100644 Binary files a/PolygonClientUtilities/Debug/PolygonClientUtilities.ilk and b/PolygonClientUtilities/Debug/PolygonClientUtilities.ilk differ diff --git a/PolygonClientUtilities/DebugScriptContext.cpp b/PolygonClientUtilities/DebugScriptContext.cpp new file mode 100644 index 0000000..6fbf371 --- /dev/null +++ b/PolygonClientUtilities/DebugScriptContext.cpp @@ -0,0 +1,15 @@ +#include "pch.h" +#include "DebugScriptContext.h" + +/* ScriptContext__execute_t ScriptContext__execute = (ScriptContext__execute_t)0x617CF0; + +void* __fastcall ScriptContext__execute_hook(void* _this, void*, void* a1, int identity, const char* script, const char* name, void* arguments) +{ + printf("ScriptContext::execute called\n"); + printf("_this: %p\n", _this); + printf("Identity: %d\n", identity); + printf("Script: %s\n", script); + printf("Name: %s\n", name); + printf("Arguments: %p\n", arguments); + return ScriptContext__execute(_this, a1, identity, script, name, arguments); +} */ \ No newline at end of file diff --git a/PolygonClientUtilities/DebugScriptContext.h b/PolygonClientUtilities/DebugScriptContext.h new file mode 100644 index 0000000..a37e170 --- /dev/null +++ b/PolygonClientUtilities/DebugScriptContext.h @@ -0,0 +1,7 @@ +#pragma once + +#include "Classes.h" + +/* typedef void* (__thiscall* ScriptContext__execute_t)(void* _this, void* a1, int identity, const char* script, const char* name, void* arguments); +void* __fastcall ScriptContext__execute_hook(void* _this, void*, void* a1, int identity, const char* script, const char* name, void* arguments); +extern ScriptContext__execute_t ScriptContext__execute; */ \ No newline at end of file diff --git a/PolygonClientUtilities/PolygonClientUtilities.vcxproj b/PolygonClientUtilities/PolygonClientUtilities.vcxproj index d102ffc..ff00ca4 100644 --- a/PolygonClientUtilities/PolygonClientUtilities.vcxproj +++ b/PolygonClientUtilities/PolygonClientUtilities.vcxproj @@ -163,8 +163,8 @@ - + @@ -180,8 +180,8 @@ - + diff --git a/PolygonClientUtilities/PolygonClientUtilities.vcxproj.filters b/PolygonClientUtilities/PolygonClientUtilities.vcxproj.filters index 2d6f92e..8d0ad7e 100644 --- a/PolygonClientUtilities/PolygonClientUtilities.vcxproj.filters +++ b/PolygonClientUtilities/PolygonClientUtilities.vcxproj.filters @@ -60,15 +60,15 @@ Header Files\Hooks - - Header Files\Hooks - Header Files\Hooks Header Files\Hooks + + Header Files\Hooks + @@ -107,14 +107,14 @@ Source Files\Hooks - - Source Files\Hooks - Source Files\Hooks Source Files\Hooks + + Source Files\Hooks + \ No newline at end of file diff --git a/PolygonClientUtilities/RCCOutput.cpp b/PolygonClientUtilities/RCCOutput.cpp index 7a8c1b4..75fcb4c 100644 --- a/PolygonClientUtilities/RCCOutput.cpp +++ b/PolygonClientUtilities/RCCOutput.cpp @@ -44,15 +44,45 @@ void __fastcall StandardOut__print_hook(int _this, void*, int type, std::string* if (message->compare("NewGame") == 0) { + printf("\n"); + printf("Attempting to create new Game...\n"); - int v2; - void* v3; - void* v4; - - // v3 = operator new(104u); - v3 = new Game(); - v4 = Game__initializeConstruct(v3, 0); - v2 = Game__construct_hook((Game*)v4); + + Game* game = new Game(); + int result = Game__construct(Game__initializeClass(game, 0)); + + if (result) + { + printf("Failed to create new Game! (returned %d)\n", result); + } + else + { + // int datamodel = game[4]; + printf("Successfully created new Game! (%p)\n", game); + // printf("Address of DataModel: %08X\n", game->dataModel); + // printf("Attempting to set DataModel Job ID to 'deez nuts'...\n"); + // game->dataModel->jobId = "deez nuts"; + printf("Length of DataModel Job ID: %d\n", game->dataModel->jobId.length()); + + printf("Attempting to create service provider...\n"); + + void* dataModelPointer = game->dataModel.get(); + printf("Address of dataModelPointer: %p\n", dataModelPointer); + + printf("Calling ServiceProvider::create()...\n"); + void* scriptContext = ServiceProvider__createScriptContext(dataModelPointer); + printf("Address of scriptContext: %p\n", scriptContext); + + printf("Calling ScriptContext::execute()...\n"); + // void* arg; + // ScriptContext__execute(scriptContext, &arg, 1, "print('hi')", "hi", 0); + ScriptContext__execute(scriptContext, 1, "print('hi')", "hi"); + + // printf("Calling ScriptContext::setTimeout()...\n"); + // ScriptContext__setTimeout(scriptContext, 5); + + printf("\n"); + } } switch (type) diff --git a/PolygonClientUtilities/dllmain.cpp b/PolygonClientUtilities/dllmain.cpp index e128538..da41a1a 100644 --- a/PolygonClientUtilities/dllmain.cpp +++ b/PolygonClientUtilities/dllmain.cpp @@ -4,6 +4,7 @@ //#include "RobloxMFCHooks.h" #include "DebugGame.h" +#include "DebugScriptContext.h" // #include "TestHttpGetPost.h" #include "TrustCheck.h" #include "VerifySignatureBase64.h" @@ -26,6 +27,7 @@ START_PATCH_LIST() ADD_PATCH(Game__construct, Game__construct_hook) +// ADD_PATCH(ScriptContext__execute, ScriptContext__execute_hook) // ADD_PATCH(Http_httpGetPostWinInet, Http_httpGetPostWinInet_hook) ADD_PATCH(Http__trustCheck, Http__trustCheck_hook)