Начинающий
- Статус
- Оффлайн
- Регистрация
- 31 Окт 2022
- Сообщения
- 30
- Реакции
- 0
Почему BufferList = 0?
Вроде оффсеты правильные, и декрипторы тоже
EntityLoop:
BufferList всегда 0
decryptors:
Вроде оффсеты правильные, и декрипторы тоже
EntityLoop:
C++:
const auto base_networkable = g_driver->read_memory<uint64_t>(assembly + 0xBF9F388);
const auto static_fields = g_driver->read_memory<uint64_t>(base_networkable + 0xB8);
const auto ClientEntities =
g_driver->read_memory<uint64_t>(static_fields + 0x8);
const auto DecryptClientEntities = g_il2cpp->decrypt_wrapper(ClientEntities);
const auto unk4 =
g_driver->read_memory<uint64_t>(DecryptClientEntities + 0x10);
const auto DecryptEntityList = g_il2cpp->decrypt_parent(unk4);
auto BufferList =
g_driver->read_memory<uint64_t>(DecryptEntityList + 0x20);
const auto list = g_driver->read_memory<uint64_t>(BufferList + 0x10);
const auto count = g_driver->read_memory<uint32_t>(BufferList + 0x18);
std::cout << BufferList << std::endl;
BufferList всегда 0
decryptors:
Код:
constexpr size_t Il2cppHandle = 0xC2BFAA0;
bool c_il2cpp::TEST_BITD(uint32_t Value, uint32_t BitPosition) {
return (Value & (1 << BitPosition)) != 0;
}
uint64_t c_il2cpp::Il2cppGetHandle(int32_t ObjectHandleID)
{
uint64_t rdi_1 = ((uint64_t)(ObjectHandleID >> 3));
uint64_t rcx_1 = ((uint64_t)((ObjectHandleID & 7) - 1));
uintptr_t ObjectArray =
g_driver->read_memory<uintptr_t>((rcx_1 * 0x28) + (g_core->game_base + 0xC2BFAA0 + 0x8)) +
(rdi_1 << 3);
if (g_driver->read_memory<uint8_t>((rcx_1 * 0x28) + (g_core->game_base + 0xC2BFAA0 + 0x14)) > 1) {
return g_driver->read_memory<uintptr_t>(ObjectArray);
} else {
uint32_t eax = g_driver->read_memory<uint32_t>(ObjectArray);
eax = ~eax;
return eax;
}
return 0;
}
uint64_t c_il2cpp::decrypt_wrapper(uint64_t address) // aka decryptcliententites
{
uint64_t InputValue = g_driver->read_memory<uint64_t>(address + 0x18);
uint64_t* rdx = (uint64_t*)&InputValue;
uint32_t r8d = 0x2;
uint32_t eax, ecx, edx;
do {
ecx = *(uint32_t*)(rdx);
eax = *(uint32_t*)(rdx);
rdx = (uint64_t*)((uint8_t*)rdx + 0x4);
eax = eax << 0xc;
ecx = ecx >> 0x14;
ecx = ecx | eax;
ecx = ecx + 0xfe328184;
eax = ecx;
ecx = ecx << 0x1b;
eax = eax >> 0x5;
eax = eax | ecx;
eax = eax ^ 0xf713d580;
*((uint32_t*)rdx - 1) = eax;
--r8d;
} while (r8d);
return Il2cppGetHandle(InputValue);
}
uint64_t c_il2cpp::decrypt_parent(uint64_t address)
{
uint64_t InputValue = g_driver->read_memory<uint64_t>(address + 0x18);
uint64_t* rdx = (uint64_t*)&InputValue;
uint32_t r8d = 0x2;
uint32_t eax, ecx, edx;
do {
eax = *(uint32_t*)(rdx);
ecx = *(uint16_t*)((uint8_t*)rdx + 2);
rdx = (uint64_t*)((uint8_t*)rdx + 0x4);
eax = eax << 0x10;
ecx = ecx | eax;
ecx = ecx + 0xa8c93d59;
eax = ecx;
ecx = ecx << 0x10;
eax = eax >> 0x10;
eax = eax | ecx;
eax = eax ^ 0xc551eae4;
*((uint32_t*)rdx - 1) = eax;
--r8d;
} while (r8d);
return Il2cppGetHandle(InputValue);
}