ScriptContext execution for Datamodel via DLL
This commit is contained in:
parent
9885235a4b
commit
c232462906
|
|
@ -3,19 +3,38 @@
|
||||||
#include "Config.h"
|
#include "Config.h"
|
||||||
#include <oaidl.h>
|
#include <oaidl.h>
|
||||||
|
|
||||||
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
|
struct DataModel
|
||||||
{
|
{
|
||||||
void* padding1[CLASSPADDING_DATAMODEL__JOBID + PADDING_STRUCT];
|
void* padding1[CLASSPADDING_DATAMODEL__JOBID + PADDING_STRUCT];
|
||||||
std::string jobId;
|
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> 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
|
struct Http
|
||||||
{
|
{
|
||||||
#if PADDING_STRUCT != 0
|
#if PADDING_STRUCT != 0
|
||||||
|
|
|
||||||
Binary file not shown.
|
|
@ -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);
|
||||||
|
} */
|
||||||
|
|
@ -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; */
|
||||||
|
|
@ -163,8 +163,8 @@
|
||||||
</ItemDefinitionGroup>
|
</ItemDefinitionGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClInclude Include="Config.h" />
|
<ClInclude Include="Config.h" />
|
||||||
<ClInclude Include="DebugDatamodel.h" />
|
|
||||||
<ClInclude Include="DebugGame.h" />
|
<ClInclude Include="DebugGame.h" />
|
||||||
|
<ClInclude Include="DebugScriptContext.h" />
|
||||||
<ClInclude Include="MFCCommandLine.h" />
|
<ClInclude Include="MFCCommandLine.h" />
|
||||||
<ClInclude Include="PlayerCommandLine.h" />
|
<ClInclude Include="PlayerCommandLine.h" />
|
||||||
<ClInclude Include="RCCOutput.h" />
|
<ClInclude Include="RCCOutput.h" />
|
||||||
|
|
@ -180,8 +180,8 @@
|
||||||
<ClInclude Include="VerifySignatureBase64.h" />
|
<ClInclude Include="VerifySignatureBase64.h" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClCompile Include="DebugDatamodel.cpp" />
|
|
||||||
<ClCompile Include="DebugGame.cpp" />
|
<ClCompile Include="DebugGame.cpp" />
|
||||||
|
<ClCompile Include="DebugScriptContext.cpp" />
|
||||||
<ClCompile Include="dllmain.cpp" />
|
<ClCompile Include="dllmain.cpp" />
|
||||||
<ClCompile Include="MFCCommandLine.cpp" />
|
<ClCompile Include="MFCCommandLine.cpp" />
|
||||||
<ClCompile Include="LUrlParser.cpp">
|
<ClCompile Include="LUrlParser.cpp">
|
||||||
|
|
|
||||||
|
|
@ -60,15 +60,15 @@
|
||||||
<ClInclude Include="RCCOutput.h">
|
<ClInclude Include="RCCOutput.h">
|
||||||
<Filter>Header Files\Hooks</Filter>
|
<Filter>Header Files\Hooks</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
<ClInclude Include="DebugDatamodel.h">
|
|
||||||
<Filter>Header Files\Hooks</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="TestHttpGetPost.h">
|
<ClInclude Include="TestHttpGetPost.h">
|
||||||
<Filter>Header Files\Hooks</Filter>
|
<Filter>Header Files\Hooks</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
<ClInclude Include="DebugGame.h">
|
<ClInclude Include="DebugGame.h">
|
||||||
<Filter>Header Files\Hooks</Filter>
|
<Filter>Header Files\Hooks</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
|
<ClInclude Include="DebugScriptContext.h">
|
||||||
|
<Filter>Header Files\Hooks</Filter>
|
||||||
|
</ClInclude>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClCompile Include="dllmain.cpp">
|
<ClCompile Include="dllmain.cpp">
|
||||||
|
|
@ -107,14 +107,14 @@
|
||||||
<ClCompile Include="RCCOutput.cpp">
|
<ClCompile Include="RCCOutput.cpp">
|
||||||
<Filter>Source Files\Hooks</Filter>
|
<Filter>Source Files\Hooks</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<ClCompile Include="DebugDatamodel.cpp">
|
|
||||||
<Filter>Source Files\Hooks</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="TestHttpGetPost.cpp">
|
<ClCompile Include="TestHttpGetPost.cpp">
|
||||||
<Filter>Source Files\Hooks</Filter>
|
<Filter>Source Files\Hooks</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<ClCompile Include="DebugGame.cpp">
|
<ClCompile Include="DebugGame.cpp">
|
||||||
<Filter>Source Files\Hooks</Filter>
|
<Filter>Source Files\Hooks</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
|
<ClCompile Include="DebugScriptContext.cpp">
|
||||||
|
<Filter>Source Files\Hooks</Filter>
|
||||||
|
</ClCompile>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
</Project>
|
</Project>
|
||||||
|
|
@ -44,15 +44,45 @@ void __fastcall StandardOut__print_hook(int _this, void*, int type, std::string*
|
||||||
|
|
||||||
if (message->compare("NewGame") == 0)
|
if (message->compare("NewGame") == 0)
|
||||||
{
|
{
|
||||||
|
printf("\n");
|
||||||
|
|
||||||
printf("Attempting to create new Game...\n");
|
printf("Attempting to create new Game...\n");
|
||||||
int v2;
|
|
||||||
void* v3;
|
Game* game = new Game();
|
||||||
void* v4;
|
int result = Game__construct(Game__initializeClass(game, 0));
|
||||||
|
|
||||||
// v3 = operator new(104u);
|
if (result)
|
||||||
v3 = new Game();
|
{
|
||||||
v4 = Game__initializeConstruct(v3, 0);
|
printf("Failed to create new Game! (returned %d)\n", result);
|
||||||
v2 = Game__construct_hook((Game*)v4);
|
}
|
||||||
|
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<ScriptContext>()...\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)
|
switch (type)
|
||||||
|
|
|
||||||
|
|
@ -4,6 +4,7 @@
|
||||||
//#include "RobloxMFCHooks.h"
|
//#include "RobloxMFCHooks.h"
|
||||||
|
|
||||||
#include "DebugGame.h"
|
#include "DebugGame.h"
|
||||||
|
#include "DebugScriptContext.h"
|
||||||
// #include "TestHttpGetPost.h"
|
// #include "TestHttpGetPost.h"
|
||||||
#include "TrustCheck.h"
|
#include "TrustCheck.h"
|
||||||
#include "VerifySignatureBase64.h"
|
#include "VerifySignatureBase64.h"
|
||||||
|
|
@ -26,6 +27,7 @@
|
||||||
|
|
||||||
START_PATCH_LIST()
|
START_PATCH_LIST()
|
||||||
ADD_PATCH(Game__construct, Game__construct_hook)
|
ADD_PATCH(Game__construct, Game__construct_hook)
|
||||||
|
// ADD_PATCH(ScriptContext__execute, ScriptContext__execute_hook)
|
||||||
// ADD_PATCH(Http_httpGetPostWinInet, Http_httpGetPostWinInet_hook)
|
// ADD_PATCH(Http_httpGetPostWinInet, Http_httpGetPostWinInet_hook)
|
||||||
|
|
||||||
ADD_PATCH(Http__trustCheck, Http__trustCheck_hook)
|
ADD_PATCH(Http__trustCheck, Http__trustCheck_hook)
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue