Относительный адрес в стеке и поиск статического указателя на него (у main очень, очень и очень вероятно, будет статический адрес фрейма при каждом запуске программы). Если вам нужна помощь, используйте отладчик! Я рекомендую Immunity Debugger.

ва вернулся, расстроенный и отчаянно ищущий помощи: D.

Я пытаюсь создать чит для простой программы, в основном это будет файл .dll, который изменит значение целого числа из основной программы, когда оно вводится в него с использованием своего базового адреса. Дело в том, что я не могу найти его с помощью чит-движка, потому что есть многоуровневые указатели с ОТРИЦАТЕЛЬНЫМ? Смещения. например:

//Starting pointer address
0x0033FCF0 -> 200

//Finding second level pointer using "Find out what's accessing this address" in Cheat Engine
**(mov eax,[ebp+08])** // **EAX=0x00000007** , **EPB=0x0033FCE8 => mov 00000007,[0033FCE8+08]**

2nd Level Pointer:
**(0033FCE8+18) -> 200**

Итак, я продолжаю искать следующий указатель, используя «Узнать, что ....», но при использовании T-SEARCH с адресом указателей второго уровня, я получаю 7-8 новых статических адресов.

Дело в том, что я не могу сказать, какой из них правильный, потому что чит-движок ОТКАЗЫВАЕТСЯ позволить мне добавить указатель, используя ОТРИЦАТЕЛЬНЫЙ? смещение.

Пример:

Base Pointer:
**mov eax,[epb-18] !!!** // Notice the **MINUS**

И вдобавок ко всему Cheat Engine отказывается принимать указатель с отрицательным смещением!

Итак, есть ли другой способ найти базовый адрес из указателей нескольких уровней? Решения OlyDBG / Idapro приветствуются. Большое спасибо, ребята!

Вот исходный код простой программы, которую я пытаюсь взломать:

#include <iostream>
#include <conio.h>
#include <windows.h>
#include <stdlib.h>

int main(){
    int hp = 100;
    while(1){
        std::cout << hp << std::endl;
        Sleep(3000);
        hp += 10;
        system("cls");
    }
    return 0;
}

Что я пытаюсь сделать, это отредактировать целое число hp с этим .dll

#include <windows.h>
#define BASE    0xBASE_POINTERS_ADDRESS_WHICH_I_NEED_TO_FIND
#define OFFSET  0xTHE_OFFSET
#define VALUE   90
void MainFunction()
{
      while(1)
      {
            if (GetAsyncKeyState(VK_MENU)&0x8000 && GetAsyncKeyState('C')&0x8000) 
            MessageBox(0,L"Alt + C was pressed!",L"MessageBox! ",0);
            *(int*)((*(int*)BASE) + OFFSET) = VALUE;

            Sleep(100); //Let the program rest, otherwise it hogs cpu resources.
      }
}

BOOL WINAPI DllMain(HINSTANCE MyInstance,DWORD reason_for_call,LPVOID PointerToVoid)
{
         if (reason_for_call == DLL_PROCESS_ATTACH) CreateThread(0,0,(LPTHREAD_START_ROUTINE)&MainFunction,0,0,0);
         return true;
}

Кстати, я пытаюсь взломать HP! ~ Ой, подожди, я уже это сказал, ну да ладно;)

Спасибо, ребята, храни вас всех!

Ответы на вопрос(1)

Ваш ответ на вопрос