Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

Jak znaleźć offset i odczytać dane w c++?


Rekomendowane odpowiedzi

Opublikowano

Szukałem wielokrotnie skanerem na 2 komputerach i nie schodzi poniżej 20 (obrazek).

Zakładam, że każdy z nich jest dobry?

 

Dobra to teraz próbuję odczytać wartości. 

Znalazłem do tego taki kod 

int FindPointerAddr(HANDLE pHandle,int baseaddr, int pLevel, int offset0 = 0,int offset1 = 0,int offset2 = 0,int offset3 = 0, int offset4 = 0) 
{ 
   int Address = baseaddr; 
   int offset = 0; 
   for (int i = 0; i < pLevel; i++) 
   { 
      if (i == 0) 
      { 
         offset = offset0; 
      } 
      else if (i == 1) 
      { 
         offset = offset1; 
      } 
      else if (i == 2) 
      { 
         offset = offset2; 
      } 
      else if (i == 3) 
      { 
         offset = offset3; 
      } 
      else if (i == 4) 
      { 
         offset = offset4; 
      } 
      ReadProcessMemory(pHandle, (LPCVOID)Address, &Address , 4, NULL); 
      Address += offset; 
   } 
   return Address; 
}
unsigned long base = 0x01C06D68;
int offset0 = 0x118; 
int offset1 = 0x0; 
int offset2 = 0xFC; 
int offset3 = 0x890; 
int offset4 = 0x8E4; 

int myaddr = FindPointerAddr(hProcess, base, 5, offset0, offset1, offset2, offset3, offset4);
ReadProcessMemory(hProcess, (LPVOID)myaddr,  &liczba, sizeof(float), 0);

Jak próbuje wyświetlić liczbę, to wypisuje mi coś nie to...

powinno być 90 a pokazuje -0.0028 czy coś w tym stylu

 

 

Pytanie co do offsetu: każdy z powyższych jest dobry?

No i co robię nie tak, dlaczego nie udaje mi się wychwycić wartość adresu?

post-264676-0-72896200-1428594473.jpg

Opublikowano

Nie działa dobrze, ponieważ 0x01C06D68 to nie jest adres bazowy. Jest to offset od jakiegoś modułu, którego nazwę masz napisaną na początku. Musisz pobrać listę wszystkich modułów procesu, znaleźć właściwy i do jego adresu bazowego dodać 0x01C06D68 - to będzie ten pierwszy adres bazowy.

 

Co do tego że zostaje 20 pointerów - wskaźnik jest poprawny wtedy, gdy działa mimo restartów. Wszystkie są poprawne, używaj dowolnego. Ale najlepiej najpierw sprawdź czy działa np. na innych poziomach gry.

 

PS: Swoją drogą przekazuj offsety przez tablicę, bo istnieje taka zasada jak DRY.

Opublikowano

Mam tam napisane "gra.exe"+0x01C06D68

Nie kminię, co to są te moduły? Jeśli chodzi o procesy, to gra posiada tylko 1 proces.

Jak klikam w CE na Process List, to tam pisze 00000123-gra.exe. Mam wziąć 00000123 z CE, czy szukać adresu przez jakaś funkcję winapi?

 

Teraz to już się pogubiłem. Proces ma adres początkowy i końcowy (do niego robię uchwyt). A wewnątrz procesu adresy lecą od 0?

Więc +0x01C06D68 mam do 0 dodać?

Dlaczego skaner wyszukał mi offsety a nie pokazał bazę? 

 

PS. AHa to chodzi o to że bazą jest uchwyt + offset? 

Opublikowano

Proces ma moduły(exeki, wczytane dll'ki, inne), z których każda ma swój własny adres bazowy. Odczytywanie:

  • Dodajesz TlHelp32.h
  • Robisz sobie jakieś dwie zmienne typu HANDLE i MODULEENTRY32
  • Na twojej zmiennej typu HANDLE używasz funkcji CreateToolhelp32Snapshot z flagą TH32CS_SNAPMODULE
  • Ustawiasz .dwSize twojej zmiennej typu MODULEENTRY32 na sizeof tej zmiennej
  • Używasz Module32First
  • W twojej zmiennej typu MODULEENTRY32 będziesz miał informacje takie jak nazwa i adres bazowy(.szModule, .modBaseAddr)
  • Moduły przelatujesz używając Module32Next, zwróci 0 jak nie będzie więcej do odczytania
  • Do oczytanego adresu bazowego szukanego modułu("gra.exe") dodajesz 0x01C06D68 i masz swoje base

Więcej informacji o poszczególnych funkcjach znajdziesz w MSDN.

Opublikowano

Thx, działa. 

Szkoda, że na multi nie udaje mi się znaleźć tych parametrów, które są na singlu...

Ale i tak kod mi się przyda do hakowania innych gierek :D

 

PS. Czy jest jakiś lepszy skaner adresów od CheatEngine?

Chodzi o to, żeby się nie wieszało.

Bo np nie mogę sobie pozwolić na szukanie ogólnikami, tylko muszę bardziej ukonkretniać.

Ogólniki mam na myśli coś takiego - celuję w niebo szukam 0, celuje w ludzika szukam więcej niż 0 itp... (i w tym momencie mi się zawiesza bo jest za dużo tego wszystkiego)

No może po 20 minutach to ruszy, ale np z szukaniem pointerów to mi całkowicie wszystko padało. Po godzinie skanowania pointerów wyskakuje, error że access violation, po kliknięciu CE dalej muli w nieskończoność (na laptopie zostawiłem sobie na godzinkę i to nic nie dało).

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...