#libunity + 0x784C23C hooked
char* (*getrrud)(unsigned int* a1)
char* decrypt_string(unsigned int* a1)
{
if (a1 == 0)
return getrrud(a1);
size_t length = (size_t)(a1[2] - 1);
if (length == 0)
return strdup("");
uint16_t* src = (uint16_t*)(a1 + 9);
char* result = (char*)calloc(length + 1, 1);
const uint8_t key = 0xFE;
for (size_t i = 0; i < length; ++i)
{
uint32_t ch = src;
if ((ch & 0xFC00) == 0xD800 && i + 1 < length)
{
uint32_t low = src[i + 1];
ch = ((ch & 0x3FF) << 10) + (low & 0x3FF) + 0x10000;
++i;
}
result = static_cast<char>((ch & 0xFF) ^ key);
}
result[length] = '\0';
return result;
}
char* (*getrrud)(unsigned int* a1)
char* decrypt_string(unsigned int* a1)
{
if (a1 == 0)
return getrrud(a1);
size_t length = (size_t)(a1[2] - 1);
if (length == 0)
return strdup("");
uint16_t* src = (uint16_t*)(a1 + 9);
char* result = (char*)calloc(length + 1, 1);
const uint8_t key = 0xFE;
for (size_t i = 0; i < length; ++i)
{
uint32_t ch = src;
if ((ch & 0xFC00) == 0xD800 && i + 1 < length)
{
uint32_t low = src[i + 1];
ch = ((ch & 0x3FF) << 10) + (low & 0x3FF) + 0x10000;
++i;
}
result = static_cast<char>((ch & 0xFF) ^ key);
}
result[length] = '\0';
return result;
}