Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- inline bool bittest(int data, unsigned char index)
- {
- return (data & (1 << index)) != 0;
- }
- array<int> ^GetVehicleModels(UINT64 baseFuncAddr)
- {
- UINT16 HashTableEntries = *reinterpret_cast<UINT16*>(baseFuncAddr + *reinterpret_cast<int*>(baseFuncAddr + 3) + 7);
- int cmp1 = *reinterpret_cast<int*>(*reinterpret_cast<int*>(baseFuncAddr + 0x52) + baseFuncAddr + 0x56);
- UINT64 mov2 = *reinterpret_cast<UINT64*>(*reinterpret_cast<int*>(baseFuncAddr + 0x63) + baseFuncAddr + 0x67);
- UINT64 mul3 = *reinterpret_cast<UINT64*>(*reinterpret_cast<int*>(baseFuncAddr + 0x7A) + baseFuncAddr + 0x7E);
- UINT64 add4 = *reinterpret_cast<UINT64*>(*reinterpret_cast<int*>(baseFuncAddr + 0x81) + baseFuncAddr + 0x85);
- struct HashNode
- {
- int hash;
- UINT16 data;
- UINT16 padding;
- HashNode* next;
- };
- HashNode** HashMap = *reinterpret_cast<HashNode***>(*reinterpret_cast<int*>(baseFuncAddr + 0x24) + baseFuncAddr + 0x28);
- List<int> ^hashes = gcnew List<int>();
- for (int i = 0;i<HashTableEntries;i++)
- {
- for (HashNode* cur = HashMap[i]; cur; cur = cur->next)
- {
- cur->hash;
- UINT16 data = cur->data;
- if ((int)data < cmp1 && bittest(*reinterpret_cast<int*>(mov2 + (4 * data >> 5)), data & 0x1F))
- {
- UINT64 addr1 = add4 + mul3 * data;
- if (addr1)
- {
- UINT64 addr2 = *reinterpret_cast<PUINT64>(addr1);
- if (addr2)
- {
- if ((*reinterpret_cast<PBYTE>(addr2 + 157) & 0x1F) == 5)
- {
- hashes->Add(cur->hash);
- }
- }
- }
- }
- }
- }
- return hashes->ToArray();
- }
- //
- address = FindPattern("\x0F\xB6\xDB\xBA\x00\x00\x00\x00\x24\x1F\x3C\x05", "xxxx????xxxx");
- GetVehicleModels(*reinterpret_cast<int*>(address - 0xF) + address - 0xB);
Add Comment
Please, Sign In to add comment