Начинающий
- Статус
- Оффлайн
- Регистрация
- 12 Май 2022
- Сообщения
- 220
- Реакции
- 11
Я уже успел поплакать это себе теперь пришла очередь этого форума, почему я не пойду на uc(noad)? потому что я еблан который еле как понимает английский и не может правильно понять что делать
я делаю по гайду отсюда:
я нашёл класс который мне нужен:
BaseNetworkable.%4e06d5458a7804f67326bc5bd9219d983ddfb09a
нашёл адрес: 0xD0C55B8
дальше мне нужно найти в ida это:
.data:000000018D0C55B8 BaseNetworkable_c dq 2001C5C7h ; DATA XREF: sub_180B50F10+23↑o
после псевдокод
я вижу что к v3 присваивается BaseNetworkable_c:
v3 = BaseNetworkable_c;
и где он используется:
в итоге получается что v4(sub_180B664A0) это декрипт
я получаю псевдокод и вижу это:
если я правильно понял этот блок кода декрипт:
я делаю примерный декрипт:
что я получаю в итоге это только хуй во рту
может проблема в il2cppgethandle?
используя этот гайд:
я нахожу это: sub_1806425D0
что я делаю дальше:
если правильно понимать то unk_18D3B3170 это наш оффсет? тогда 0x18D3B3170 это наш offset, дальше мы делаем decrypt:
вроде всё хорошо но я уже полностью перестал понимать что хорошо а что не так. можете меня тыкнуть мордой в место в котором я ошибся
я делаю по гайду отсюда:
Пожалуйста, авторизуйтесь для просмотра ссылки.
(noad)я нашёл класс который мне нужен:
BaseNetworkable.%4e06d5458a7804f67326bc5bd9219d983ddfb09a
нашёл адрес: 0xD0C55B8
дальше мне нужно найти в ida это:
.data:000000018D0C55B8 BaseNetworkable_c dq 2001C5C7h ; DATA XREF: sub_180B50F10+23↑o
после псевдокод
я вижу что к v3 присваивается BaseNetworkable_c:
v3 = BaseNetworkable_c;
и где он используется:
Pseudo:
if ( !*(_DWORD *)(BaseNetworkable_c + 224) )
{
sub_18063F880(BaseNetworkable_c);
v3 = BaseNetworkable_c;
}
v4 = sub_180B664A0(*(_QWORD *)(*(_QWORD *)(v3 + 184) + 24LL), qword_18D0C55A0);
в итоге получается что v4(sub_180B664A0) это декрипт
я получаю псевдокод и вижу это:
если я правильно понял этот блок кода декрипт:
Pseudo:
if ( *(_BYTE *)(a1 + 16) )
{
v4 = &v22;
v22 = *(_QWORD *)(a1 + 24);
v5 = 2;
do
{
v6 = *(_DWORD *)v4;
v4 = (signed __int64 *)((char *)v4 + 4);
*((_DWORD *)v4 - 1) = ((((v6 + 147996509) ^ 0xEF41CE88) + 1994885345) << 6)
| ((((v6 + 147996509) ^ 0xEF41CE88) + 1994885345) >> 26);
--v5;
}
while ( v5 );
v7 = v22;
}
я делаю примерный декрипт:
Pseudo:
inline uintptr_t decrypt_basenetworkable(uintptr_t a1)
{
if (!MemUtils::read<uint8_t>(a1 + 0x10))
return 0;
uint32_t eax_1 = MemUtils::read<uint32_t>(a1 + 0x18);
uint32_t edx_1 = MemUtils::read<uint32_t>(a1 + 0x1C);
eax_1 = ((eax_1 + 0x8C8B2D5) ^ 0xEF41CE88 + 0x76A1D5F1);
eax_1 = (eax_1 << 6) | (eax_1 >> 26);
edx_1 = ((edx_1 + 0x8C8B2D5) ^ 0xEF41CE88 + 0x76A1D5F1);
edx_1 = (edx_1 << 6) | (edx_1 >> 26);
uintptr_t handle = ((uintptr_t)edx_1 << 32) | eax_1;
return il2cppgethandle((int32_t)handle);
}}
что я получаю в итоге это только хуй во рту
может проблема в il2cppgethandle?
используя этот гайд:
Пожалуйста, авторизуйтесь для просмотра ссылки.
(noad)я нахожу это: sub_1806425D0
что я делаю дальше:
если правильно понимать то unk_18D3B3170 это наш оффсет? тогда 0x18D3B3170 это наш offset, дальше мы делаем decrypt:
Pseudo:
inline uintptr_t il2cppgethandle(int32_t ObjectHandleID)
{
uint64_t rdi_1 = (uint64_t)(ObjectHandleID >> 3);
uint64_t rcx_1 = (uint64_t)((ObjectHandleID & 7) - 1);
if (rcx_1 > 3)
return 0;
uintptr_t rsi_1 = MemUtils::read<uintptr_t>((rcx_1 * 0x28) + (GameAssembly + Il2cpp_GetHandle + 0x8));
uint32_t ecx_2 = MemUtils::read<uint32_t>((rcx_1 * 0x28) + (GameAssembly + Il2cpp_GetHandle + 0x10));
if ((uint32_t)rdi_1 >= ecx_2)
return 0;
uint32_t eax_1 = MemUtils::read<uint32_t>(rsi_1 + 4 * ((rdi_1 >> 5)));
if (((eax_1 >> (rdi_1 & 0x1F)) & 1) == 0)
return 0;
uintptr_t rdi_2 = (rcx_1 * 0x28) + (GameAssembly + Il2cpp_GetHandle + 0x8) + (rdi_1 << 3);
uint8_t cl_1 = MemUtils::read<uint8_t>((rcx_1 * 0x28) + (GameAssembly + Il2cpp_GetHandle + 0x14));
if (cl_1 > 1)
return MemUtils::read<uintptr_t>(rdi_2);
uint32_t eax_2 = MemUtils::read<uint32_t>(rdi_2);
eax_2 = ~eax_2;
return eax_2;
}
вроде всё хорошо но я уже полностью перестал понимать что хорошо а что не так. можете меня тыкнуть мордой в место в котором я ошибся
Последнее редактирование: