Skocz do zawartości

Podstawowa inżynieria wsteczna w NewZ dla początkujących.


Gość judasze
# CSH External VIP Project

Masz dosyć problemów z czynnikiem zaufania w CS2 lub notorycznymi banami?

Sprawdź CSH External VIP Project.


Więcej informacji  

Rekomendowane odpowiedzi

Aby zacząć rewersować NewZ najpierw musimy zrzucić grę z pamięci, ponieważ łańcuchy znaków są normalnie zaszyfrowane, są odszyfrowywane w momencie włączenia gry.

 

Jak zdumpować?

Najłatwiejszym sposobem jest użycie narzędzi takich jak PETools lub Scylla.

 

1. Uruchom grę i zaloguj się.

2. Wybierz proces "TheNewZ.exe", zdumpuj go i zapisz na dysku.

 

Teraz uruchom plik za pomocą programu IDA i możesz zacząć rewersować.

 

1. Znajdowanie CGame.

 

Aby otworzyć widok łańcuchów znaków kliknij Shift+F12 i wyszukaj string: "ClientGameLogic", powinieneś znaleźć:

  • zM6rvbm.png

Teraz kliknij to dwukrotnie i przejdź do pierwszego x-ref'a.

  • Azesb1C.png

"dword_12A6F1C" to wskaźnik do CGame, którego poszukujemy, teraz po prostu zmień nazwę na "pGame".

 

Teraz kliknij na "pGame" oraz "X" aby dostać listę x-ref'ów, wybierz drugą instrukcję cmp.

  • Lnpw9gz.png

Zaznaczona instrukcja jest w środku funkcji, która zwraca pGame.

  • nH4RtrP.png

 

Właśnie znalazłeś funkcję getGame  :D .

Teraz możesz wygenerować pattern do znalezienia tej funkcji lub użyć jej adresu, ale wtedy musisz go aktualizować za każdym razem kiedy zaktualizowana zostanie gra.

 

2. Znajdowanie CGameWorld

 

Ponownie szukaj stringa, tym razem "GameWorld()", skocz do pierwszego x-ref'a.

  • wzkDtdf.png

"dword_1275C28" to wskaźnik do GameWorld, ale możesz także wygenerować pattern.

 

Jeśli chcesz użyć tego adresu nie zapomnij odjąć od niego base adresu.

.text:00401000 ; Imagebase : 0x400000

3. Znajdowanie local player'a.

 

Wyszukaj po łańcuchu znaków "Me:", powinieneś otrzymać coś co wygląda jak to:

  • qZQ2KyF.png

Przejdź do pierwszego x-ref'a oraz kliknij F5 aby wygenerować pseudokod.

  • 7pb1oJf.png

Jak możesz zauważyć v12 używa funkcji getGamePointer(), więc musi to być wskaźnik do CGame.

sub_431180("Me: [0x%x]", *(_DWORD *)(pGame + 848632));

Wygląda jak funkcja formatowania stringa, więc:

*(_DWORD *)(pGame + 0xCF2F8)

To jest localplayer, którego szukamy.

 

4. Znajdowanie typu obiektu gracza.

 

Wyszukaj string "Weapon owner"

  • 1TQGObZ.png

Pierwszy x-ref oraz F5.

  • BvBMjNQ.png

Dla uproszczenia przekonwertuj liczby dziesiętne na heksadecymalne. 

Otrzymaliśmy "Weapon owner must be obj_Player", błąd otrzymuje jeśli (a3 + 0x28) + 0x208 nie jest równe 0x20.

 

weaponBase + weaponOwner + objectType & playerType

 

więc nasz offset do objectType to 0x208

i do playerType 0x20

 

więc w swojej głównej pętli możesz dać if((objAddr + objectType) & 0x20) { //obj to gracz }

 

5. Znajdowanie iteracji obiektów.

 

Standardowo wyszukaj "obj_Waterplane", pierwszy x-ref i wygeneruj pseudokod.

  • wrjwJXU.png

Jeśli masz na dysku kod źródłowy WarZ przejdź do "\\GameEngine\\gameobjects\\ObjManag.cpp" i jak możesz zauważyć gra używa GetFirstOfAllObjects oraz GetNextOfAllObjects.

Więc odwzoruj to i masz iterację obiektów  :D.

 

sub+439520 to GetFirstOfAllObjects i sub_439580 to GetNextOfAllObjects

dla wygody zmień ich nazwy.

  • Qo43snv.png

Aby znaleźć offsety do takich rzeczy jak np. zdrowie, stamina, viewangles użyj ReClassa.

 

Powinieneś dodatkowo zbypassować screenshotowanie w NewZ (jeśli grasz w oknie to winapi, jeśli fullscreen to d3d).

Odnośnik do komentarza

Zarchiwizowany

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

Gość
Ten temat został zamknięty. Brak możliwości dodania odpowiedzi.
×
×
  • Dodaj nową pozycję...

Powiadomienie o plikach cookie

Umieściliśmy na Twoim urządzeniu pliki cookie, aby pomóc Ci usprawnić przeglądanie strony. Możesz dostosować ustawienia plików cookie, w przeciwnym wypadku zakładamy, że wyrażasz na to zgodę. Regulamin. Polityka prywatności