Использование найденного указателя при написании чита

Тема в разделе "Корзина", создана пользователем mraklbrw, 25 дек 2016.

Статус темы:
Закрыта.
  1. mraklbrw
    Всеем доброго дня.

    Только что разобрался с темой поиска указателей.

    Пробовал на игре Master of Defense посредством Cheat Engin-а.

    Нашёл указатель и оффсеты:

    "Main.exe"+0012FDB4

    84
    2B0
    224
    4BC
    0


    Написал чит-трейнер на Cheat Engine. Всё работает. Теперь хотелось бы написать чит-трейнер на C++.

    Проблема вот в чём: не пойму, что делать с указателем.

    К какой ячейке памяти обращаться?

    Я так полагаю, что должен быть конкретный hex-адрес.[DOUBLEPOST=1482764333][/DOUBLEPOST]Принцип понял, однако возникла некоторая проблема.

    Нашёл указатель второго уровня:

    "Main.exe"+0012F320
    50C
    1C0

    Определил базовый адрес программы:

    0x1012F454

    И пытаюсь прочитать значение переменной, отвечающей за монеты таким образом:


    #include "http.h"
    #include <iostream>
    #include <cstdlib>
    #include <fstream>
    #include <string>
    #include <cstring>
    #include <random>
    #include <urlmon.h>
    #include<Windows.h>
    #include <Shellapi.h>
    #include <process.h>
    #include <tlhelp32.h>
    #include <psapi.h>
    #pragma comment( lib, "psapi" )
    #pragma comment (lib, "urlmon.lib")

    #pragma warning(disable: 4996)
    using namespace std;

    // 0x002A1D28

    DWORD Base_Adress = 0x1012F454;
    DWORD pid;
    DWORD value_1 = 0x0012F320;
    DWORD get_value;

    int main()
    {

    HWND hwnd = FindWindowA(0, ("Master of Defense by Voodoo Dimention (c) 2006 "));

    GetWindowThreadProcessId(hwnd, &pid);

    if (hwnd)
    cout << "process id: " << pid << endl;
    else
    cout << "Window isn't found." << endl;

    HANDLE phandle = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pid);
    ReadProcessMemory(phandle, (LPVOID)(Base_Adress + value_1), &get_value, sizeof(get_value), 0);

    value_1 = get_value + 0x50C;

    ReadProcessMemory(phandle, (LPVOID)(value_1), &get_value, sizeof(get_value), 0);

    value_1 = get_value + 0x1C0;

    ReadProcessMemory(phandle, (LPVOID)(value_1), &get_value, sizeof(get_value), 0);

    cout << get_value;

    cin.get();
    cin.get();

    return 0;
    }




    Однако получаю значение 0.

    В чём я ошибся?[DOUBLEPOST=1482764794][/DOUBLEPOST]Думаю, что проблема в базовом адресе.

    Не знаю, как его найти в Cheat Engine.

    Определял его через стороннюю программу.[DOUBLEPOST=1482770793][/DOUBLEPOST]DWORD Base_Adress = 0x140CE0; // Базовый адрес п рограммы(игры)
    //DWORD Base_Adress = 0x1012F454;
    //DWORD Base_Adress = 0x00000000;
    DWORD pid;
    DWORD value_1 = 0x0012F320; // Первое смещение
    DWORD get_value;
    DWORD get_value_2;
    DWORD get_value_3;

    int main()
    {

    HWND hwnd = FindWindowA(0, ("Master of Defense by Voodoo Dimention (c) 2006 "));

    GetWindowThreadProcessId(hwnd, &pid);

    if (hwnd)
    cout << "process id: " << pid << endl;
    else
    cout << "Window isn't found." << endl;

    HANDLE phandle = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pid);

    ReadProcessMemory(phandle, (LPVOID)(Base_Adress + value_1), &get_value, sizeof(get_value), 0); // Получаем 1-ое значение

    cout << get_value << endl; // 1431...

    DWORD adres_2 = get_value + 0x50C;

    cout << "adr2 = " << adres_2 << endl;

    ReadProcessMemory(phandle, (LPVOID)adres_2, &get_value_2, sizeof(get_value_2), 0); // Получаем 2-ое значение

    cout << get_value_2 << endl;



    DWORD adres_3 = get_value_2 + 0x1C0;
    cout << "adr3 = " << adres_3 << endl;
    ReadProcessMemory(phandle, (LPVOID)adres_3, &get_value_3, sizeof(get_value_3), 0); // Получаем 3-ое значение
    cout << get_value_3 << endl;




    cin.get();
    cin.get();

    return 0;
    }


    Высчитывается 1-ое значение - базовый адрес + первый офсет(0x0012F320).
    Прибавляем к нему 50C - 2-ой офсет - и всё - 0 в значении, хотя в cheat engine наше п олученное значение - представлено как значение, а есть ещё и адрес, который хранит это значение, 00270000. И прибавляя к нему 50C, в Cheat Engine можно выйти на 2-ое значение. Как выйти на этот адрес?
     
Статус темы:
Закрыта.