Automatic offsets (pointers) finder

Posts 1–15 of 22 · Page 1 of 2
Automatic offsets (pointers) finder
How to use:
1) Launch Trove
2) Run exe file
3) Done, you can select and copy offset (pointer) which you need

The sequence of steps 1 and 2 is not important.
Worked for 4 updates already. (finder uses big length signatures for uniq, maybe i should make them less, but gamigo will never fix or change anything linked with cheats)

I was wondered when noticed posts where people were asking for explaining how to find "new pointer", because you can do it with Cheat Engine and youtube for 5 mins.
offsets finder_mpgh.net.rar7 KB · 808 downloads 2/61 malicious
Quote Originally Posted by Ass007 View Post
How to use:
1) Launch Trove
2) Run exe file
3) Done, you can select and copy offset (pointer) which you need

The sequence of steps 1 and 2 is not important.
Worked for 4 updates already. (finder uses big length signatures for uniq, maybe i should make them less, but gamigo will never fix or change anything linked with cheats)

I was wondered when noticed posts where people were asking for explaining how to find "new pointer", because you can do it with Cheat Engine and youtube for 5 mins.
I can't download it, it says "Invalid Attachment specified. If you followed a valid link, please notify the administrator."
Quote Originally Posted by Angel_Lok View Post
I can't download it, it says "Invalid Attachment specified. If you followed a valid link, please notify the administrator."
Attachment not approved yet. Waiting for moderator.
Source code
Since the moderator(s) are lazy to approve the .rar, here is the source

How to use:
1 case: open Visual Studio (not Code, real IDE) or CLion (or any other cringe ide), create console project -> put code -> compile -> done
2 case: open Visual Studio Code or other text editor which can use plugins -> install C++ compiler -> put code in "New file" -> compile -> done

P.S. Sorry for the cringe code, I'm noob in cpp

Code:
#include <iostream>
#include <vector>
#include <Windows.h>
#include <TlHelp32.h>

//big signatures for best guarantee (i just selected random length))

std::vector<int> player_offset_signature =
{
    0x55, 0x8B, 0xEC, 0x83, 0xE4, 0xF8, 0x83, 0xEC, 0x08, 0xF3, 0x0F, 0x2A, 0x45, 0x10, 0x56, 0x8B, 0xF1,
    0x57, 0x8B, 0x3D
};

std::vector<int> world_offset_signature =
{
    0x55, 0x8B, 0xEC, 0x83, 0x7D, 0x08, 0x04, 0x75, 0x10, 0xA1, -1, -1, -1, -1, 0x85, 0xC0, 0x74, 0x07,
    0xC6, 0x80, 0x59, 0x01, 0x00, 0x00, 0x01, 0x5D, 0xC2, 0x04, 0x00
};

std::vector<int> settings_offset_signature =
{
    0x89, 0x45, 0xF4, 0x8B, 0x11, 0xFF, 0x52, 0x0C, 0x8B, 0x0D, -1, -1, -1, -1, 0x8B, 0xD8,
    0x6A, 0x03, 0x68, -1, -1, -1, -1, 0x8B, 0x11, 0xFF, 0x52, 0x0C, 0x8B, 0x0D
};

std::vector<int> chat_state_offset_signature =
{
    0x8B, 0x0D, -1, -1, -1, -1, 0x6A, 0x00, 0x6A, 0x01, 0xC6, 0x41, 0x20, 0x00, 0xE8, -1,
    -1, -1, -1, 0x6A, 0x08, 0x8D, 0x8D, 0x60, 0xFF, 0xFF, 0xFF, 0xC7, 0x85, 0x60, 0xFF, 0xFF, 0xFF,
    0x00, 0x00, 0x00, 0x00, 0xC7, 0x85, 0x64, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xC7, 0x85, 0x68, 0xFF,
    0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xC6, 0x45, 0xF0, 0x01
};

HANDLE process_handle = 0;
int process_id = 0;
MODULEENTRY32W process_module;
UINT32 module_address = 0;

void get_process_id(const wchar_t* process_name)
{
    HANDLE snapshot_handle = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
    if (snapshot_handle != INVALID_HANDLE_VALUE)
    {
        PROCESSENTRY32 process_entry;
        process_entry.dwSize = sizeof(process_entry);

        if (Process32First(snapshot_handle, &process_entry))
        {
            do
            {
                if (!_wcsicmp(process_entry.szExeFile, process_name))
                {
                    process_id = process_entry.th32ProcessID;
                    goto End;
                }
            } while (Process32Next(snapshot_handle, &process_entry));

        }
    }
End:
    CloseHandle(snapshot_handle);
}

void get_process_module(const wchar_t* module_name)
{
    MODULEENTRY32W moduleEntry;
    HANDLE snapshot_handle = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE | TH32CS_SNAPMODULE32, process_id);
    if (snapshot_handle != INVALID_HANDLE_VALUE)
    {
        MODULEENTRY32 mod_entry;
        mod_entry.dwSize = sizeof(mod_entry);
        if (Module32First(snapshot_handle, &mod_entry))
        {
            do
            {
                if (!_wcsicmp(mod_entry.szModule, module_name))
                {
                    process_module = mod_entry;
                    module_address = (UINT32)mod_entry.modBaseAddr;
                    goto End;
                }
            } while (Module32Next(snapshot_handle, &mod_entry));
        }
    }
End:
    CloseHandle(snapshot_handle);
}

int read_int(UINT32 address)
{
    return ReadProcessMemory(process_handle, (LPCVOID)address, &address, sizeof(int), 0) ? (int)address : 0;
}

int find_signature_address(std::vector<int> pattern)
{
    DWORD module_size = process_module.modBaseSize;
    auto buffer = (byte*)malloc(module_size);
    ReadProcessMemory(process_handle, (LPCVOID)module_address, buffer, module_size, 0);
    //ReadProcessMemory(process_handle, module_address, buffer);
    //ReadProcessMemory(process.Handle, moduleAddress, buffer, moduleSize, out _);

    int compare = 0;
    UINT32 count = pattern.size();

    int first_byte = pattern[0];
    auto is_first_empty = first_byte == -1;
    for (int i = 0; i < module_size; i++)
    {
        if (buffer[i] != first_byte && !is_first_empty) continue;
        for (int g = 1; g < count; g++)
        {
            if (buffer[i + g] != pattern[g] && pattern[g] != -1)
            {
                compare = 1;
                break;
            }

            compare++;
            if (compare == count)
            {
                free(buffer);
                return i + module_address;
            }
        }
    }

    free(buffer);
    return 0;
}

int main()
{
    SetConsoleTitle(L"Offsets finder");
    get_process_id(L"Trove.exe");
    while (process_id == 0)
    {
        printf("process not found\n");
        Sleep(1000);
        get_process_id(L"Trove.exe");
    }
    printf("process found: %X (%i)\n\n", process_id, process_id);
    get_process_module(L"Trove.exe");
    process_handle = OpenProcess(PROCESS_ALL_ACCESS, NULL, process_id);

    UINT32 local_player_offset, world_offset, settings_offset, chat_state_offset;

    UINT32 address = find_signature_address(player_offset_signature) + player_offset_signature.size();
    address = read_int(address);
    local_player_offset = address - module_address;

    address = find_signature_address(world_offset_signature) + 10;
    address = read_int(address);
    world_offset = address - module_address;

    address = find_signature_address(settings_offset_signature) + settings_offset_signature.size();
    address = read_int(address);
    settings_offset = address - module_address;

    address = find_signature_address(chat_state_offset_signature) + 2;
    address = read_int(address);
    chat_state_offset = address - module_address;

    printf("Local Player offset: %X\nWorld offset: %X\nSettings offset: %X\nChat State offset: %X\n", local_player_offset, world_offset, settings_offset, chat_state_offset);

    getchar();
    return 0;
}
Quote Originally Posted by Ass007 View Post
Since the moderator(s) are lazy to approve the .rar, here is the source

How to use:
1 case: open Visual Studio (not Code, real IDE) or CLion (or any other cringe ide), create console project -> put code -> compile -> done
2 case: open Visual Studio Code or other text editor which can use plugins -> install C++ compiler -> put code in "New file" -> compile -> done

P.S. Sorry for the cringe code, I'm noob in cpp

Code:
#include <iostream>
#include <vector>
#include <Windows.h>
#include <TlHelp32.h>

//big signatures for best guarantee (i just selected random length))

std::vector<int> player_offset_signature =
{
    0x55, 0x8B, 0xEC, 0x83, 0xE4, 0xF8, 0x83, 0xEC, 0x08, 0xF3, 0x0F, 0x2A, 0x45, 0x10, 0x56, 0x8B, 0xF1,
    0x57, 0x8B, 0x3D
};

std::vector<int> world_offset_signature =
{
    0x55, 0x8B, 0xEC, 0x83, 0x7D, 0x08, 0x04, 0x75, 0x10, 0xA1, -1, -1, -1, -1, 0x85, 0xC0, 0x74, 0x07,
    0xC6, 0x80, 0x59, 0x01, 0x00, 0x00, 0x01, 0x5D, 0xC2, 0x04, 0x00
};

std::vector<int> settings_offset_signature =
{
    0x89, 0x45, 0xF4, 0x8B, 0x11, 0xFF, 0x52, 0x0C, 0x8B, 0x0D, -1, -1, -1, -1, 0x8B, 0xD8,
    0x6A, 0x03, 0x68, -1, -1, -1, -1, 0x8B, 0x11, 0xFF, 0x52, 0x0C, 0x8B, 0x0D
};

std::vector<int> chat_state_offset_signature =
{
    0x8B, 0x0D, -1, -1, -1, -1, 0x6A, 0x00, 0x6A, 0x01, 0xC6, 0x41, 0x20, 0x00, 0xE8, -1,
    -1, -1, -1, 0x6A, 0x08, 0x8D, 0x8D, 0x60, 0xFF, 0xFF, 0xFF, 0xC7, 0x85, 0x60, 0xFF, 0xFF, 0xFF,
    0x00, 0x00, 0x00, 0x00, 0xC7, 0x85, 0x64, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xC7, 0x85, 0x68, 0xFF,
    0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xC6, 0x45, 0xF0, 0x01
};

HANDLE process_handle = 0;
int process_id = 0;
MODULEENTRY32W process_module;
UINT32 module_address = 0;

void get_process_id(const wchar_t* process_name)
{
    HANDLE snapshot_handle = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
    if (snapshot_handle != INVALID_HANDLE_VALUE)
    {
        PROCESSENTRY32 process_entry;
        process_entry.dwSize = sizeof(process_entry);

        if (Process32First(snapshot_handle, &process_entry))
        {
            do
            {
                if (!_wcsicmp(process_entry.szExeFile, process_name))
                {
                    process_id = process_entry.th32ProcessID;
                    goto End;
                }
            } while (Process32Next(snapshot_handle, &process_entry));

        }
    }
End:
    CloseHandle(snapshot_handle);
}

void get_process_module(const wchar_t* module_name)
{
    MODULEENTRY32W moduleEntry;
    HANDLE snapshot_handle = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE | TH32CS_SNAPMODULE32, process_id);
    if (snapshot_handle != INVALID_HANDLE_VALUE)
    {
        MODULEENTRY32 mod_entry;
        mod_entry.dwSize = sizeof(mod_entry);
        if (Module32First(snapshot_handle, &mod_entry))
        {
            do
            {
                if (!_wcsicmp(mod_entry.szModule, module_name))
                {
                    process_module = mod_entry;
                    module_address = (UINT32)mod_entry.modBaseAddr;
                    goto End;
                }
            } while (Module32Next(snapshot_handle, &mod_entry));
        }
    }
End:
    CloseHandle(snapshot_handle);
}

int read_int(UINT32 address)
{
    return ReadProcessMemory(process_handle, (LPCVOID)address, &address, sizeof(int), 0) ? (int)address : 0;
}

int find_signature_address(std::vector<int> pattern)
{
    DWORD module_size = process_module.modBaseSize;
    auto buffer = (byte*)malloc(module_size);
    ReadProcessMemory(process_handle, (LPCVOID)module_address, buffer, module_size, 0);
    //ReadProcessMemory(process_handle, module_address, buffer);
    //ReadProcessMemory(process.Handle, moduleAddress, buffer, moduleSize, out _);

    int compare = 0;
    UINT32 count = pattern.size();

    int first_byte = pattern[0];
    auto is_first_empty = first_byte == -1;
    for (int i = 0; i < module_size; i++)
    {
        if (buffer[i] != first_byte && !is_first_empty) continue;
        for (int g = 1; g < count; g++)
        {
            if (buffer[i + g] != pattern[g] && pattern[g] != -1)
            {
                compare = 1;
                break;
            }

            compare++;
            if (compare == count)
            {
                free(buffer);
                return i + module_address;
            }
        }
    }

    free(buffer);
    return 0;
}

int main()
{
    SetConsoleTitle(L"Offsets finder");
    get_process_id(L"Trove.exe");
    while (process_id == 0)
    {
        printf("process not found\n");
        Sleep(1000);
        get_process_id(L"Trove.exe");
    }
    printf("process found: %X (%i)\n\n", process_id, process_id);
    get_process_module(L"Trove.exe");
    process_handle = OpenProcess(PROCESS_ALL_ACCESS, NULL, process_id);

    UINT32 local_player_offset, world_offset, settings_offset, chat_state_offset;

    UINT32 address = find_signature_address(player_offset_signature) + player_offset_signature.size();
    address = read_int(address);
    local_player_offset = address - module_address;

    address = find_signature_address(world_offset_signature) + 10;
    address = read_int(address);
    world_offset = address - module_address;

    address = find_signature_address(settings_offset_signature) + settings_offset_signature.size();
    address = read_int(address);
    settings_offset = address - module_address;

    address = find_signature_address(chat_state_offset_signature) + 2;
    address = read_int(address);
    chat_state_offset = address - module_address;

    printf("Local Player offset: %X\nWorld offset: %X\nSettings offset: %X\nChat State offset: %X\n", local_player_offset, world_offset, settings_offset, chat_state_offset);

    getchar();
    return 0;
}
Why when I put this code in VS I have error "cannot open source file "iostream". Please run the 'Select IntelliSense Configuration...' command to locate your system headers." "cannot open source file "Windows.h" "cannot open source file "TlHelp32.h". What do I need to remove these errors?
question about offsets
Quote Originally Posted by Ass007 View Post
How to use:
1) Launch Trove
2) Run exe file
3) Done, you can select and copy offset (pointer) which you need

The sequence of steps 1 and 2 is not important.
Worked for 4 updates already. (finder uses big length signatures for uniq, maybe i should make them less, but gamigo will never fix or change anything linked with cheats)

I was wondered when noticed posts where people were asking for explaining how to find "new pointer", because you can do it with Cheat Engine and youtube for 5 mins.
Like when I open this .exe file there's 4 offsets(local player,world,settings,chat state)what type of those offsets is Pointer that I need for fishing bot, and still I need to find StateWaterOffset and WaterOffset by myself right?
Quote Originally Posted by miNysus View Post
Like when I open this .exe file there's 4 offsets(local player,world,settings,chat state)what type of those offsets is Pointer that I need for fishing bot, and still I need to find StateWaterOffset and WaterOffset by myself right?
I have the same issue, I'm using Nippy, (sorry that may be a dumb question) but don't you need the other pointers as well ? Such as these :

Pointer=
WaterOffset=
ChocoOffset=
LavaOffset=
PlasmaOffset=
StateWaterOffset=
StateChocoOffset=
StateLavaOffset=
StatePlasmaOffset=

I'm sorta stuck without these
Quote Originally Posted by Let's Have No Fun View Post
I have the same issue, I'm using Nippy, (sorry that may be a dumb question) but don't you need the other pointers as well ? Such as these :

Pointer=
WaterOffset=
ChocoOffset=
LavaOffset=
PlasmaOffset=
StateWaterOffset=
StateChocoOffset=
StateLavaOffset=
StatePlasmaOffset=

I'm sorta stuck without these
If you need to catch other fish not only from water you need other offsets
**removed reply since i tested what i said and it still didnt work for finding fishing base pointer + offset so dont want to confuse anyone**
Quote Originally Posted by miNysus View Post
If you need to catch other fish not only from water you need other offsets
But it doesn't even provide water offsets ? I'm a bit confused.. :'o
for fishing its usles
Привет. Почему-то не работает поинтер на флай, offset, все перепробовал с твоей программой, ни 1 код не подходит
Need offers ms speed pls help
Trove Movement Speed hack via STAT.
Prog works as before, gamigo added some vars so last offsets changed
Posts 1–15 of 22 · Page 1 of 2

Post a Reply

Similar Threads

Tags for this Thread

None

Talk with us