Начинающий
Начинающий
- Статус
- Оффлайн
- Регистрация
- 6 Мар 2026
- Сообщения
- 59
- Реакции
- 1
0xB8 валид оффсет, но все равно пишет что статик филд инвалид (base - читает)
sassfd:
#include "defines.h"
#include "utils/memory/driver.hpp"
#define OFFSET(name, type, offset) inline constexpr type name = offset
namespace il2cpp {
OFFSET(gchandle, uintptr_t, 0xE7CBF30);
}
namespace basenetworkable {
OFFSET(typeinfo, uintptr_t, 0xE4910A0);
OFFSET(static_fields, uintptr_t, 0xB8);
OFFSET(client_entities, uintptr_t, 0x38);
OFFSET(entity_list, uintptr_t, 0x10);
OFFSET(buffer, uintptr_t, 0x18);
};
namespace decrypt {
uintptr_t Il2cppGetHandle(int32_t ObjectHandleId)
{
const uint64_t Index = static_cast<uint64_t>(ObjectHandleId >> 3);
const uint64_t Table = static_cast<uint64_t>((ObjectHandleId & 7) - 1);
const uint64_t HandleBase = driver.g_GameAssembly + il2cpp::gchandle;
const uint64_t TableBase = HandleBase + (Table * 0x28);
const uint64_t ObjectArrayBase = driver.read<uint64_t>(TableBase + 0x8) + (Index << 3);
const uint8_t Mode = driver.read<uint8_t>(TableBase + 0x14);
if (Mode > 1) {
return driver.read<uint64_t>(ObjectArrayBase);
}
uint64_t Val = driver.read<uint64_t>(ObjectArrayBase);
Val = ~Val;
if (Val == ~0ULL) return 0;
return Val;
}
uintptr_t client_entity(uintptr_t a1)
{
uint32_t v5 = 0, v6 = 0, a2 = 0, a3 = 0;
uintptr_t v3 = a2, v7, v28 = 0, v29 = 0;
if (driver.read<UCHAR>(a1 + 16))
{
a2 = (uintptr_t)&v28;
v28 = driver.read<uintptr_t>(a1 + 24);
a3 = 2;
do {
v5 = *(ULONG*)a2;
a2 += 4LL;
v6 = ((16 * (v5 - 1146544416)) | ((unsigned int)(v5 - 1146544416) >> 28)) ^ 0x7DF13224;
*(ULONG*)(a2 - 4) = (v6 << 17) | (v6 >> 15);
a3 = (unsigned int)(a3 - 1);
} while ((ULONG)a3);
v7 = v28;
}
else
{
v7 = 0;
}
v29 = v7;
if (!v7)
return 0;
return Il2cppGetHandle(v7);
}
}
int main(){
while (!driver.attach(L"RustClient.exe")) {
std::cout << "waiting for you start rust...\n" << std::endl;
Sleep(1000);
}
uintptr_t base = driver.read<uintptr_t>(driver.g_GameAssembly + basenetworkable::typeinfo);
if (!base) {
std::cout << "[basenetworkable] -> typeinfo invalid.\n";
return 0;
}
uintptr_t static_fields = driver.read<uintptr_t>(base + basenetworkable::static_fields);
if (!static_fields) {
std::cout << "[basenetworkable] -> static_fields invalid.\n";
return 1;
}
uintptr_t client_entity_ptr = decrypt::client_entity(static_fields);
if (!client_entity_ptr) {
std::cout << "[decrypts] -> client_entity invalid.\n";
return 2;
}
uintptr_t entity_list = driver.read<uintptr_t>(client_entity_ptr + basenetworkable::entity_list);
if (!entity_list) {
std::cout << "[basenetworkable] -> entity_list invalid.\n";
return 3;
}
std::cout << std::hex;
std::cout << "[base] -> 0x" << base << std::endl;
std::cout << "[static_fields] -> 0x" << static_fields << std::endl;
std::cout << "[client_entity_ptr] -> 0x" << client_entity_ptr << std::endl;
std::cout << "[entity_list] -> 0x" << entity_list << std::endl;
return -1;
}