Code:
void Engine::MakeInvisible()
{
static uint32_t addresses[] =
{
0x93f794, 0x93f810, 0x93f804, 0x93f764, 0x93f78c,
0x93f78c, 0x93f7f4, 0x93f7e4, 0x93f754, 0x93f780,
0x93f7d4, 0x93f7c4, 0x9423a0, 0x93f730,
0x93f73c, 0x942378, 0x942380, 0x8f74cc
};
for (uint32_t i = 0; i < sizeof(addresses) / sizeof(uint32_t); i++)
{
InvalidateString(reinterpret_cast<char*>(this->cshell_base_ + addresses[i]));
}
// M-idle
OverwriteString(reinterpret_cast<char*>(this->cshell_base_ + 0x8f7618), "M-HEBdown_d", 11);
}
void Engine::MakeVisible()
{
static uint32_t addresses[] =
{
0x93f794, 0x93f810, 0x93f804, 0x93f764, 0x93f78c,
0x93f78c, 0x93f7f4, 0x93f7e4, 0x93f754, 0x93f780,
0x93f7d4, 0x93f7c4, 0x9423a0, 0x93f730,
0x93f73c, 0x942378, 0x942380, 0x8f74cc
};
for (uint32_t i = 0; i < sizeof(addresses) / sizeof(uint32_t); i++)
{
ValidateString(reinterpret_cast<char*>(this->cshell_base_ + addresses[i]), 'M');
}
// M-idle
OverwriteString(reinterpret_cast<char*>(this->cshell_base_ + 0x8f7618), "M-idle", 6);
}
void InvalidateString(char* string)
{
ValidateString(string, 0);
}
void ValidateString(char* string, char original)
{
memcpy(reinterpret_cast<void*>(string), reinterpret_cast<void*>(&original), 1);
}
void OverwriteString(char* target, char* source, uint32_t length)
{
memcpy(reinterpret_cast<void*>(target), reinterpret_cast<void*>(source), length);
memcpy(reinterpret_cast<void*>(target + length), reinterpret_cast<void*>("\x00"), 1);
}