Witam, pisze bota do pewnej gry.
Otoz potrzebuje wyciagnac z pamieci gry nick postaci aktualnie zalogowanej, ale ten nick po kazdym zalogowaniu jest w innym miejscu poprzedzony 4 bajtowym identyfikatorem ktory znajduje sie stale pod adresem 0x60EAD0, skanujac pamiec od adresu 0x60EB30 w dol mozna wyciagnac nick postaci ktory jest poprzedzony 4 bajtami iodentyfikatora. Prosze pomozcie mi jak moge wyciagnac ten nick skanujac pamiec! halp!
"po kazdym zalogowaniu jest w innym miejscu" - to znaczy że strukturka jest dynamicznie alokowana, a jej wskaźnik może być w stałym miejscu programu, w jakiejś klasie, lub na stosie...
Znajdź jeszcze raz adres tej strukturki i przeszukaj całą pamięć zajmowaną przez proces za 4-bajtową liczbą równą adresowi tej struktury. gdy już ją znajdziesz - VirtualQueryEx wskaże na typ strony pamięci gdzie jest owy wskaźnik - może to być stos, sekcja modułu lub inna, zwyczajna strona pamięci, jak na przykład heap.
Wynik z VirtualQueryEx możesz podstawić ewentualnie do GetModuleBaseName by sprawdzić czy jest to strona należąca do exe/dll. Jeśli to dll, to musisz uwzględnić relokację, czyli HMODULE+offset, zamiast bezpośredniego adresu.
51 :)
Taaa, i zapewne tak nie jeden raz, bo owy wskaźnik na dynamicznie tworzoną strukturę jest też pewnie w dynamicznie tworzonej strukturze, a wskaźnik na nią jest w jeszcze innej dynamicznie tworzonej strukturze i tak dalej i tak dalej. Dużo błądzenia, życzę powodzenia :)
chodzi o wykonanie takiego kodu
#include <windows.h>
#include <iostream>
using namespace std;
int main()
{
// Find tibia and get the process id.
HWND hWnd;
DWORD processId;
HANDLE hProcess;
hWnd = FindWindow("TibiaClient", 0);
GetWindowThreadProcessId(hWnd, &processId);
// Get access to the process so we can read and write to it.
hProcess = OpenProcess(PROCESS_ALL_ACCESS, false, processId);
char idpostaci[4];
ReadProcessMemory(hProcess, (LPVOID)0x60EAD0, &idpostaci, 4, 0);
skanuj pamiec od 0x60EB30 w dół i szukaj idpostaci
{
jesli znajdziesz id postaci w zakresie od 0x60EB30 w dol,
wyswietl dalsze 30 bajtow
cout << dalszebajty po id postaci;
}
getchar();
return 0;
}
q: siedemnaste: uzywaj tagow < cpp > < / cpp > w okolo kodu c++