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
  • 0

Pierwszy Raz Z Cheat Engine - poradnik


PsychoBoy11

Pytanie

Opublikowano

pc5a1.png

Pełny poradnik jak przejść swój pierwszy tutorial w Cheat Engine. Oparty na Cheat Engine Tutorial v3. Pisany przeze mnie na podstawie mojego doświadczenia, więc popraw mnie jeżeli jestem gdzieś w błędzie smile.gif

 

 

1. Wstęp

Witaj! Skoro trafiłeś na ten tutorial to znaczy, że już wiesz czym jest Cheat Engine i chciałbyś się dowiedzieć jakie są tego możliwości i jak można z nich skorzystać smile.gif Tak dla przypomnienia tu mamy krótki opis od kokosza:

http://www.mpcforum.pl/topic/99778-cheat-engine-krotki-opis/

Polecam również mój krótki poradnik wyjaśniający niektóre pojęcia:

http://www.mpcforum.pl/topic/245787-poradnik-pojecia-skroty-i-typy-danych/

 

Ten poradnik wyjaśni Ci jak krok po kroku jak przejść Tutorial od autora Cheat Engine - DarkByte'a. Możnaby pomyśleć po co tutorial do tutoriala? Okej, a więc DarkByte pisał ten tut z myślą o osobach posiadających wiedzę taką jak on, jednak dla wielu osób jest to nie małym kłopotem. Drugim powodem jest to iż wiele osób ma problemy ze zrozumieniem nowych pojęć całkowicie po angielsku wink.gif

 

A więc zacznijmy:

 

Po pierwsze uruchom Cheat Engine, następnie w folderze gdzie masz CE (Cheat Engine) uruchom Tutorial.exe.

Teraz musimy nakierować CE w który proces będziemy ingerować smile.gif W lewym górnym rogu CE mamy taki komputerek z lupą, klikamy na niego i wyskoczy nam Process list.

W tym oknie musimy odszukać proces Tutorial.exe, jest ułożony według czasu działania, więc szukaj na samym dole. Kliknij dwa razy na odnaleziony proces.

 

Jeśli wszystko dobrze poszło u góry w CE powinna pojawić się nazwa procesu i jego PID (Process ID czyli identyfikator dla danego procesu np. 000006C8). Przechodzimy do kroku pierwszego (który w tutorialu jest oznaczony jako krok 2.).

 

Screeny wygasły? Pobierz paczkę ze wszystkimi screenami z tuta:

http://psychoboy.tk/pliki/Tut_CE.rar

</time.h>

 

2. Exact value Scanning

 

Hasło: 090453

 

W oknie tutoriala przejdź do kroku pierwszego zatytułowanego "Exact value scanning". Na dole możesz zobaczyć informacje Health: 100. Naszym zadaniem jest odszukanie w pamięci adresu który trzyma tą wartość i zmienienie jej na 1000. Posłużymy się tu najłatwiejszą metodą znalezienia tego adresu czyli "Exact value", co znaczy skanowanie w poszukiwaniu dokładnie znanej nam wartości (wiemy że to 100). A więc pokolei, popatrzmy na to zdjęcie:

7GArv.png

 

Postępujemy zgodnie z numerami:

1. Wpisujemy value czyli wartość Health

2. Upewniamy się że jako Scan Type jest wybrany Exact Value.

3. Upewniamy się że jako Value Type jest wybrany 4 bytes (co znaczy że szukamy wartości liczbowej Long, taką właśnie jest Health)

4. Klikamy First Scan

5. W tym polu powinny pojawić się wszystkie adresy 4-bajtowe posiadające wartość liczbową 100, a nad polem jest informacja o ilości znalezionych adresów.

 

S9l7D.png

Okej, zasadniczy problem to ilość adresów. My chcemy znaleźć ten jeden odpowiadający za ilość Health, a znaleźliśmy więcej (u mnie aż 67). A więc musimy przefiltrować nasz skan, czyli zrobić Next Scan, aby zredukować liczbę złych adresów. Jak zapewne zauważyłeś, niektóre adresy z listy są zielone. Oznacza to, że są to adresy statyczne (wyjaśnione w moim poradniku nt. pojęć).

 

Skoro chcemy przefiltrować znalezione adresy to musimy zmienić wartość Health i zrobić ponowny skan z pośród znalezionych adresów. Wracamy do okna Tutorial'a i klikamy Hit Me!

Teraz spowrotem do okna CE, w oknie gdzie mamy wpisać Value wpisujemy nową wartość Health (np. 97) i klikamy tym razem na Next Scan (nie First Scan bo to byłby nowy skan).

eTebd.png

Skoro mamy już odpowiedni adres, teraz nasuwa się pytanie jak zmienić jego wartość?

 

To proste, wystarczy kliknąć dwa razy na Value w adresie dodanym do CT (Cheat Table). W oknie wpisujemy wartość 1000 bo taki był cel naszego zadania.

Jak wszystko dobrze poszło w Tutorialu powinien odblokować się przycisk Next. Przechodzimy do kroku trzeciego.

 

 

2. Exact value Scanning - Video-Tutorial

 

 

 

 

3. Unknown initial value

 

Hasło: 419482

 

W tym kroku zajmiemy się innym typem skanowania zatytułowanym "Unknown initial value". Naszym celem jest zmienienie odszukanej wartości na 5000. Jak widzimy w oknie Tutoriala nie mamy już podanej dokładnej wartości Health, jest tylko pokazany pasek który pokazuje ile jej mamy, ale nie znamy wartości od jakiej się zaczyna ten pasek. Wiadome jest nam tylko, że wartość jest pomiędzy 0 a 500. Jeśli nie znamy wartości możemy się posłużyć metodą "Unknown initial value" która przeskanuje wszystkie adresy danego typu o każdej wartości (znów to będzie 4-bytes, większość aplikacji używa głównie tego typu). A więc przechodzimy do CE i klikamy na New Scan, ustawiamy Scan Type:

XDsvi.png

Klikamy na First Scan.

WfGaI.png

Jak można było się spodziewać, znaleźliśmy całą masę adresów o typie danych "4-bytes". Tak jak w poprzednim kroku musimy przefiltrować adresy, aby znaleźć ten jeden prawidłowy adres. Posłużymy się tu metodą "Decreased Value" (ang. wartość zmniejszona), czyli poszukamy wartości które się zmniejszyły od pierwszego skanowania. Ale najpierw musimy tą wartość zmniejszyć, więc w Tutorialu klikamy Hit Me!

0yceO.png

Jak widzimy pasek się zmniejszył a wraz z nim wartość tego adresu, a więc przechodzimy spowrotem do CE i ustawiamy Scan Type na Decreased Value, a następnie klikamy Next Scan:

xyXG4.png

Zapewne tak jak i ja znaleźliście o wiele za dużo adresów (u mnie ponad 10 tysięcy):

NkE7k.png

Musimy ponownie nacisnąć Hit Me! i zrobić Next Scan z wybranym typem skanowania "Decreased Value". Robimy tak 2-4 razy aż uzyskamy małą liczbe adresów np. 15:

uCwh2.png

Skoro wiemy, że nasz adres jest z przedziału 0-500 to teraz spośród tych adresów na pewno znajdziemy poprawny. U mnie to wartość 464 (u was na pewno inaczej), tak jak poprzednio zmieniamy jej wartość, tym razem na 5000, aby przejść do następnego kroku.

 

 

3. Unknown initial value - Video-Tutorial

 

 

 

 

4. Floating points

 

Hasło: 890124

 

W poprzednich krokach szukaliśmy wartości całkowitych (501, 100). W pamięci używane są również typy danych zwane "Floating Points". Są to wartości liczbowe zmiennoprzecinkowe (czyli posiadające cyfry po przecinku, np. 3.14, 502.11). Pierwszym takim typem jest "Float". W grach używane są one wszędzie gdzie jest potrzebna precyzja. Drugim bardzo podobnym typem jest jeszcze bardziej precyzyjny typ danych zwany "Double". Jest to także wartość liczbowa zmiennoprzecinkowa z tym, że on jest używany tam gdzie potrzebna jest naprawdę dokładna precyzja.

espa9.png

Jak widzimy w Tutorialu mamy teraz dwie wartości do odszukania - Health i Ammo. Pierwszy jest typu Float a drugi typu Double. Skoro znamy wartości obu adresów to posłużymy się najskuteczniejszą metodą Exact Value.

 

A więc w CE wybieramy New Scan, wpisujemy wartość Health - 100, jako Scan Type wybieramy Exact Value i jako Value Type wybieramy Float.

YidV3.png

Jak widać mi się udało znaleźć ten adres za pierwszym razem. Jeśli ty masz więcej wyników musisz przefiltrować adresy, czyli zrobić Next Scan. Klikamy 2x na adres aby go dodać do listy.

 

Teraz szukamy drugiego adresu, klikamy na New Scan, wpisujemy wartość Ammo - 100 i jako Value Type wybieramy Double.

JjMSP.png

Tu również znalazłem za pierwszym razem. Klikamy 2x na adres aby go dodać do listy.

Zaznaczamy oba adresy, klikamy na Value i wpisujemy 5000.

YGNBy.png

 

Jak wszystko dobrze zrobiłeś, w Tutorialu przycisk Next powinien się odblokować. Przechodzimy do następnego kroku.

 

 

4. Floating points - Video-Tutorial

 

 

 

 

5. Code Finder

 

Hasło: 888899

Musisz wiedzieć, że wszystkie adresy nie-statyczne wyszukane przez Ciebie nie są zawsze w tym samym miejscu. W tym kroku postaram się wyjaśnić wam jak używać potężnego narzędzia CE zwane debuggerem dzięki któremu możemy znaleźć wskaźniki (ale o tym w następnym kroku). Dzięki debuggerze autor stworzył narzędzie które znajduje kod asemblera prowadzący pod dany adres i nazwał je "Code Finder", ale wszystko po kolei. Naszym celem jest znalezienie kodu, który zmienia wartość po naciśnięciu "Change Value" w Tutorialu i zastąpienie go kodem który nic nie robi, aby zatrzymać zmienianie wartości.

 

Najpierw musimy wyszukać szukany adres, który ma wartość 100. Robimy "Exact Value scanning" dokładnie tak samo jak w pierwszym kroku, czyli szukamy wartości 100, klikamy Change Value i robimy Next Scan, aż znajdziemy ten jeden prawidłowy adres i dodajemy go do listy. Nie powinno to być już problemem. Teraz musimy uruchomić Code Finder, robimy to tak:

3Ex26.png

Chcemy się dowiedzieć jaki kod odpowiada za to co sprawia, że ta wartość się zmienia. A więc klikamy prawym na adres i wybieramy pozycje "Find out what writes to this address". Teraz CE zapyta się czy chcemy uruchomić debugger, klikamy na Yes. Pojawia się nam okno:

cxDRZ.png

W tym oknie jest lista opcodów które zmieniły wartość tego adresu. Opcode to skrót od Operation code, czyli właśnie tego kodu odpowiadającego za zmienianie wartości. Ale dlaczego nie ma wyników? Ponieważ debugger pracuje w czasie rzeczywistym, musimy tą wartość zmienić, żeby debugger mógł jakoś sprawdzić który to opcode odpowiada za ten adres. A więc w oknie Tutoriala klikamy Change Value i teraz w liście powinniśmy mieć wynik:

S3o7k.png

Widzimy adres i kod odpowiadający za zmiane tej wartości. Naszym zadaniem jest zastąpienie go kodem który nic nie robi. Klikamy prawym na adres na liście i wybieramy opcje "Replace with code that does nothing (NOP)", pojawi się okno:

krZrj.png

To tylko nazwa dla nowego kodu, nic nie zmieniamy i klikamy OK.

Możemy już wyłączyć debugger, klikamy na dole tego okienka na przycisk Stop. Pozamykaj okna debuggera i kliknij w Tutorialu na Change Value.

Jeśli wszystko dobrze zrobiłeś, wartość nie powinna się zmienić, a przycisk Next powinien zostać odblokowany. Przechodzimy do następnego kroku.

 

 

5. Code Finder - Video-Tutorial

 

 

 

 

6. Pointers

 

Hasło: 098712

 

W poprzednim kroku nauczyliśmy się korzystać z narzędzia "Code Finder". W tym kroku wykorzystamy to narzędzie, aby znaleźć wskaźnik na adres.

 

Wskaźnik/Pointer - Adres statyczny o typie danych Unsigned long (aka DWORD), różniący się tylko tym że są one używane do wskazywania na jakiś obiekt (adres, strukture, klase, właściwie cokolwiek w pamięci)

 

Do czego jest nam potrzebny taki wskaźnik? Jak wiemy większość adresów w pamięci gry/programu to adresy które za każdym uruchomieniem gry są inne. Wskaźnik to specjalny typ danych które zawsze wskazuje na dany adres, bez względu na to ile razy wyłączymy gre, a więc jest to adres statyczny. A więc zacznijmy:

qQpQw.png

Jak widzimy tym razem mamy dwa przyciski - pierwszy "Change Value" służy do zmiany wartości pod tym adresem, a drugi "Change Pointer" służy do zmiany lokalizacji w pamięci gdzie znajduje się ten adres. To doskonały sposób na demonstracje jak działa wskaźnik, ponieważ po zmianie lokalizacji w pamięci stary adres już nie będzie się odwoływał do tej wartości, aczkolwiek jeśli pozyskamy wskaźnik to po zmianie lokalizacji będzie on wskazywał na nową lokalizacje (to tak jakby zrobić restart gry).

 

No to jedziemy, znajdź adres pod którym jest wartość z Tutoriala, przy pomocy "Exact Value Scanning". Czyli First Scan, Change Value i przefiltrowanie adresów (Next Scan). Nie używaj "Change pointer"! Jeśli nadal masz z tym problem to zajrzyj do drugiego kroku. Po odszukaniu adresu dodaj go do listy adresów (Cheat Table):

DSjzM.png

 

Naszym celem jest zablokowane adresu na wartości 5000, pomimo przeniesieniu lokalizacji adresu, możemy to zrobić przez wskaźnik (ang. pointer).

Musimy więc znaleźć co ma dostęp do tego adresu, aby znaleźć pointer który wskazuje na ten adres z naszą wartością. Aby to zrobić klikamy prawym przyciskiem myszy na adres i wybieramy opcje "Find out what accesses this address". Jak już w poprzednim kroku tłumaczyłem, musimy zmienić wartość żeby znaleźć szukany adres, więc kliknij teraz na Change Value. Najprawdopodobniej dostaniesz wyniki podobne do tych:

2h9OV.png

 

Teraz nasuwa się pytanie, który z nich trzeba wybrać? Zapamiętaj! Wybieraj zawsze ten który ma jakieś podane informacje między nawiasami [], np. mov eax,[eax]. Kliknij na dole Stop, aby debugger już nie pracował skoro znaleźliśmy adresy. Teraz skoro wszystkie z nich mają informacje między nawiasami, to wybieramy pierwszy lepszy klikając na niego dwa razy. Wyskoczy takie okienko:

RHqJ2.png

Tu są podane szczegółowe informacje o tej instrukcji.

1 - Tu jest ta instrukcja oraz adres którego szukamy czyli [eax]

2 - To jest podana wartość jakiej mamy szukać, aby znaleźć adres

 

NOTA: Czasami bywa że do tej instrukcji dochodzi offset np.[eax+15c], w tym wypadku musimy również sobie gdzieś zapisać tą informacje że offset to 15c.

 

No to teraz przechodzimy do głównego okna CE, robimy New Scan i zaznaczamy Hex (ponieważ wskaźniki przyjmują wartości heksadecymalne), wpisujemy tą wartość podaną w tamtym oknie i klikamy First Scan, powinno to wyglądać tak:

VJvws.png

Na nasze szczęście znaleźliśmy adres bazowy (statyczny), więc on zawsze będzie wskazywał na ten adres, jednak w 8 kroku poruszymy temat o wielopoziomowych wskaźnikach. Dodajemy wskaźnik do listy adresów. Klikamy dwa razy na jego adres, ukaże się coś takiego:

eH8MQ.png

Wszystko jest jak najbardziej OK, kopiujemy ten adres czyli Tutorial.exe+60C34 (u was może być inaczej). Teraz klikamy na Add Address Manually i robimy według screena:

ORcba.png

Teraz klikamy OK i jeśli wszystko jest dobrze to i adres i wskaźnik powinny mieć tą samą wartość, teraz zaznaczamy Frozen (aby zablokować możliwość zmiany wartości na inną) i ustawiamy 5000 jako Value, screen:

pG5mj.png

Jeśli wszystko dobrze zrobiłeś, to możesz przejść do następnego kroku.

 

 

6. Pointers - Video-Tutorial

 

 

7. Code Injection

 

Hasło: 013370

 

Code Injection to technika wstrzyknięcia swojego kodu do jakiegoś procesu. Jest to wykonywane na zasadzie skoku, to znaczy w miejscu gdzie ma się wywołać nasz kod (na przykład naciśnięcie guzika) stworzymy skok który przekieruje oryginalną funkcje do naszej.

Celem jest sprawienie aby guzik "Hit me" zwiększał wartość Health o 2 zamiast ją zmniejszać o 1. A więc musimy w miejscu gdzie on zmniejsza tą wartość stworzyć skok do funkcji która będzie zwiększać go o 2.

 

Zaczniemy jak zwykle od znalezienia adresu pod którym jest wartość Health, używając oczywiście metody "Exact value scanning" z drugiego kroku.

Gdy już go znajdziemy, musimy znaleźć instrukcje (opcode), która odpowiada za zmniejszanie wartości o 1 podczas klikania "Hit me!". W tym celu klikamy prawym na adres i wybieramy "Find out what writes this address"

SDf2J.png

Jak już wiemy z piątego kroku musimy zmienić wartość, żeby znaleźć instrukcję. Klikamy na "Hit me" i w liście powinien pojawić się adres. Możemy już kliknąć na dole po prawej Stop, aby zatrzymać pracę debuggera.Teraz wybieramy ten adres i klikamy na przycisk "Show disassembler" w menu również po prawej. Pojawi się nam okno disassemblera (co to jest zostało wyjaśnione w innym moim tucie nt. pojęć):

YJAFE.png

Mamy zaznaczony pierwszy adres, pod którym jest właśnie ta nasza instrukcja (opcode), a jest to instrukcja:

dec [ebx+00000310] - dec oznacza decrement czyli zmniejszenie wartości, co by się zgadzało bo po kliknięciu Hit Me ona się zmniejsza.

 

Mając wybrany ten adres wchodzimy w menu Tools->Auto assemble:

XJQwp.png

Pojawi nam się okno tworzenia skryptu AA - Auto Assembly, jest to skrypt pozwalający nam na tworzenie bloków pamięci w jakimś procesie. W nim stworzymy kod który będzie dodawał wartość o 2 po kliknięciu Hit Me. Wchodzimy teraz w menu Template i wybieramy Code Injection, pojawi się takie okno:

yztgl.png

Po kliknięciu OK, mamy o to taki kod:

D0zJ1.png

Jak już mówiłem naszym celem jest zrobienie, aby przycisk Hit Me, dodawał wartość 2 do adresu. Do tego służy instrukcja add (przeciwieństwo dec), ale najpierw komentujemy oryginalną instrukcje, czyli żeby już nie zmniejszała wartości: (Poprostu dodajemy dwa slashe // przed instrukcją)

originalcode:
//dec [ebx+00000310]

Gdybyśmy teraz wykonali ten kod to po naciśnięciu Change Value nic by się nie stało, więc musimy dodać instrukcje zwiększającą wartość o 2:

newmem: //this is allocated memory, you have read,write,execute access
//place your code here
add [ebx+00000310],2

Instrukcja jest prosta, dodaje liczbę 2 do tego samego adresu który był podany przy instrukcji orginalnej (dec) - ebx+00000310. Pamiętajmy że musi to być wstawione za newmem. Teraz klikamy na Execute a następnie potwierdzamy, że chcemy wstrzyknąć kod do programu klikając Yes.

 

Zamykamy wszystkie okienka Cheat Engine, teraz klikamy na Change Value i przycisk Next powinien się odblokować.

 

 

7. Code Injection - Video-Tutorial

 

 

 

 

8. Multilevel pointers

 

Hasło: 525927

 

W 6 kroku mówiliśmy o pojęciu Wskaźnik (ang. Pointer). Wiemy, że wskaźnik statyczny to adres który nie ulega zmianie i zawsze wskazuje na dany adres w pamięci - jest to tak zwany Base address czyli adres bazowy. Istnieje również jego analogiczna odmiana - wskaźnik niestatyczny, który po zrestartowaniu gry już nie będzie wskazywał na ten sam adres. W tym kroku poznamy jak można znaleźć wskaźnik wielopoziomowy tak, aby nie ulegał zmianie.

 

Wskaźnik wielopoziomowy - W pamięci gry/programu często występuje zjawisko, że wskaźnik wskazuje na wskaźnik, może występować nawet 10-krotne lub większe połączenie wskaźników, w zależności od ilości tych wskaźników można określić poziom. Naszym zadaniem jest znalezienie adresu bazowego do 4-poziomowego wskaźnika za pomocą debuggera, a wygląda to tak:

Adres (wskaźnik) bazowy --> Wskaźnik 3 --> Wskaźnik 2 --> Wskaźnik 1 --> Adres docelowy

 

Jeśli nie znajdziemy adresu bazowego, wtedy po prostu te 3 wskaźniki po restarcie będą bezużyteczne. Lecz gdy CE ma poprawny adres bazowy, on przy pomocy offsetu wyliczy 3 wskaźnik, ten z kolei wyliczy drugi, ten z kolei wyliczy 1 i w końcu będzie wskazywać na adres docelowy w tym wypadku wartość Health.

 

Więc jaki jest nasz plan działań? Robimy tak samo jak przy kroku pierwszym z tym, że wszystko musimy powtórzyć 4 razy:

1. Szukamy adresu Health.

2. Wyszukujemy wskaźnik dla adresu Health.

3. Wyszukujemy wskaźnik na wskaźnik dla adresu Health.

4. Wyszukujemy wskaźnik na wskaźnik na wskaźnik dla adresu Health.

5. Wyszukujemy wskaźnik na wskaźnik na wskaźnik na wskaźnik dla adresu Health.

 

Brzmi to jak totalny bezsens, jednak nie poddawaj się, bo w praktyce jego znalezienie i użycie wcale nie jest trudne. Wskaźniki wielopoziomowe często występują w grach MMO choćby w celu zabezpieczenia gry, rzadko zaś w SP bo nie ma potrzeby jej ochrony.

 

A więc zaczynamy jak zawsze od znalezienia adresu. Robimy "Exact Value scanning" dokładnie tak samo jak w poprzednich krokach, czyli szukamy wartości Health, klikamy Change Value i robimy Next Scan, aż znajdziemy ten jeden prawidłowy adres i dodajemy go do listy. Nie powinno to być już problemem.

pttCz.png

Teraz uruchamiamy Code Finder klikając prawym na adres Health i wybieramy "Find out what accesses this address". Ukaże się nam okno Code Findera:

R4qqc.png

Teraz klikamy "Change Value" i w oknie mamy wynik, klikamy na niego dwa razy, widzimy szczegółowe informacje:

q2grK.png

Interesują nas dwie rzeczy: pierwsza to wartość którą mamy wyszukać, w moim wypadku to 01C253E4 i druga to jego offset czyli w moim wypadku +18. No to możemy już wyłączyć debugger i zamknąć i tak jak w kroku szóstym wyszukujemy tą wartość:

ryRZ6.png

Mamy pierwszy wynik, dodajemy go do listy adresów i jego adres kopiujemy. Teraz klikamy na przycisk "Add Address Manually" po prawej stronie okna CE. Zaznaczamy że jest to Pointer, jako adres podajemy znaleziony adres a jako offset podajemy ten z instrukcji [ebx+18] czyli 18:

fBVVb.png

Jak widzimy nasz adres wskazuje na adres Health, jednak nie jest to adres bazowy, gdyby był to jego adres byłby w formie [Moduł.exe+Offset] a CE by go prawdopodobnie wyświetlało na zielono. Więc szukamy następnego poziomu, czyli wskaźnika na ten wskaźnik. Klikamy prawym na nasz wskaźnik i wybieramy "Find out what accesses this pointer", pojawi się okno:

EdpOF.png

Wybieramy pierwszą opcje, bo chcemy znaleźć co 'używa' tego wskaźnika. Znów mamy okno Code Findera, chyba już dobrze wiemy co robić. Zmieniamy wartość Health i otwieramy znaleziony wynik, mamy coś takiego:

LLYzI.png

Mamy adres którego musimy poszukać - 01C25394, ale w nawiasie [eax] nie ma żadnej dodatkowej wartości - czyli nie ma offsetu. Szukamy wskaźnika tak samo jak szukaliśmy przy pierwszym wskaźniku, dodajemy go do listy. Klikamy "Add Address Manually", zaznaczamy że jest to Pointer, teraz skoro wiemy, że jest to drugi wskaźnik czyli dwupoziomowy wskaźnik to klikamy na "Add pointer" i pojawi się nam nowe pole gdzie mamy wpisać adres i offset:

FP0oK.png

 

Teraz w drugim poziomie czyli ostatnim wskaźniku (zaznaczone kolorem czerwonym) wpisujemy znaleziony adres drugiego wskaźnika. Obok w pole wpisujemy jego offset (zaznaczone zielonym), jak pamiętacie jednak w nawiasach [eax] nie było żadnego offsetu, więc w pole wpisujemy 0. W pierwszym poziomie wpisujemy pierwszy offset (zaznaczone na niebiesko) - czyli 18 bo było wtedy [ebx+18]

XrKa0.png

Jak widzimy wyliczył nam się pierwszy wskaźnik, a z pierwszego wskaźnika adres Health :) Jednak wciąż nie mamy adresu bazowego, więc znowu klikamy prawym na nasz dwupoziomowy wskaźnik i klikamy "Find out what accesses this pointer", wybieramy pierwszą opcje, zmieniamy wartość i otwieramy wynik klikając na niego dwukrotnie:

hV21N.png

W trzecim wskaźniku jak widzimy mamy offset 14 (u mnie, u was zawsze może być inaczej), szukamy trzeciego wskaźnika tak samo jak poprzednie, dodajemy go do listy. Klikamy na "Add Address Manually", zaznaczamy Pointer i tym razem klikamy dwa razy na Add Pointer tak aby utworzyć trzypoziomowy wskaźnik:

Pcf1V.png

Teraz w pole adresu na trzecim poziomie wpisujemy nasz adres - 01C25314, obok kolejno offset - 14, poniżej offset do drugiego poziomu czyli 0 oraz offset do pierwszego czyli 18:

Y1Xe5.png

Klikamy OK i jak widzimy nasz trzypoziomowy wskaźnik wskazuje na adres Health. Niestety nadal to nie adres bazowy, więc klikamy prawym na nasz nowy wskaźnik i wybieramy znów "Find out what accesses this address", następnie wybieramy pierwszą opcje. Zmieniamy wartość Health i otwieramy wyszukany wynik w Code Finderze:

mFvjj.png

Znów wyszukujemy adresu - 01C25308 oraz zapamiętujemy offset - 0c.

pDmRt.png

Oho! Mamy zielony adres! Jest to adres bazowy czyli nasz ostatni wskaźnik :]

Dodajemy go do listy adresów i klikamy 2x na adres, ukaże się adres w formie [Moduł+Offset]:

cc17s.png

Kopiujemy adres w tej formie, teraz zamykamy to okienko i klikamy na "Add Address Manually", zaznaczamy Pointer, ustawiamy tak aby był to 4-poziomowy wskaźnik:

mOKhz.png

W pole adresu ostatniego, czyli czwartego wskaźnika wpisujemy dany nam adres bazowy w formie [Moduł+Offset], obok jego offset - 0c oraz kolejno wszystkie offsety poniżej czyli 14,0,18:

CgwMH.png

Klikamy OK i mamy wskaźnik, który jest statyczny :) Teraz wystarczy zamrozić wskaźnik i zmienić jego wartość na 5000, a następnie kliknąć w Tutorialu przycisk "Change Pointer".

lik78.png

Jeśli wszystko dobrze zrobiłeś przycisk "Next" powinien się odblokować i będziesz mógł przejść do ostatniego kroku.

 

 

8. Multilevel pointers - Video-Tutorial

 

 

9. Injection++

 

Hasło: 31337157

W 7 kroku nauczyliśmy się jak wstrzykiwać kod do procesu za pomocą Cheat Engine - jednak ten kod musiał być w Auto-Asemblerze - skrypcie języka niższego poziomu w którym większość osób nie potrafi wykonać bardziej skomplikowanych operacji, po to zostało stworzone Injection++ które za pomocą C-Script Engine umożliwi nam wstrzyknięcie kodu napisanego w języku wyższego poziomu - C.

 

Naszym zadaniem jest wstrzyknąć kod, który zmieni wartość adresu na 1000 jeśli aktualna liczba sekund jest równa lub większa od 30 i zmieni wartość na 2000 jeśli jest ona mniejsza od 30. Kod wygląda tak:

#include <time.h>

struct tm *timep;
time_t c;
c=time(0);

timep=localtime(&c);

if (timep->tm_sec>=30)
 *(int *)AdresHealth=1000;
else
 *(int *)AdresHealth=2000;

Kodu nie musisz rozumieć (chociaż powinniście bo jest bardzo prosty), gdyż w nim musimy jedynie zmienić AdresHealth na rzeczywisty adres życia, czyli np. 01C523A2. Ale po kolei:

Zaczynamy zawsze od znalezienia adresu Health:

c02Mh.png

Teraz tak samo jak przy kroku 7 klikamy prawym i wybieramy "Find out what writes this address", bo chcemy wiedzieć gdzie znajduje się instrukcja do tego adresu. Zmieniamy wartość, klikamy na otrzymany adres w Code Finderze i klikamy na Show Disassembler.

ub2CU.png

Teraz mamy okno disassemblera, u góry w menu wybieramy Tools -> Script Engine i mamy takie o to okno:

TWnpG.png

Wpisujemy tu kod C który podałem na początku:

Igwo4.png

Teraz musimy oba pola gdzie jest wpisane AdresHealth podmienić na ten adres tego Health, ale ponieważ jest to bezpośrednio podany adres musimy go poprzedzić prefixem 0x

jLGip.png

Teraz jak już to zrobimy u góry w menu wybieramy Inject -> Inject into current process

Lo2eR.png

Widzimy teraz nowe okno z skryptem Auto-Asemblera, kopiujemy linijkę gdzie jest napisane call tupodanyadres:

Z4nVy.png

Czyli u mnie to:

call 01E800CD

Teraz zamykamy oba okna - Auto-asemblera i Script Engine. Mamy okno disassemblera, z górnego menu wybieramy Tools -> Auto Assemble, pojawia się okno:

cHOsa.png

Teraz z menu wybieramy Template -> Code Injection, program zapyta się na jakim adresie chcemy wykonać skok, nie zmieniamy go, bo mamy wybrany poprawny (na nim jest instrukcja dec - możesz to sprawdzić wracając do kroku 7). Mamy teraz okno a w nim skrypt:

WdFSo.png

alloc(newmem,2048) //2kb should be enough
label(returnhere)
label(originalcode)
label(exit)

00458EAA:
jmp newmem
nop
returnhere:

newmem: //this is allocated memory, you have read,write,execute access
//place your code here


originalcode:
dec [ebx+00000318]

exit:
jmp returnhere

Musimy jedynie usunąć linie po orginalcode czyli tą z instrukcją dec, a w miejsce newmem wstawić ten call 01E800CD który wcześniej skopiowaliśmy.

Zu2pd.png

 

Nie powinno to być trudne dla osoby, która choć trochę liznęła składni jakiegokolwiek języka programistycznego :)

Teraz klikamy na Execute. Zamykamy wszystkie okna łącznie z disassemblerem. Klikamy w oknie Tutoriala na przycisk Hit me i przycisk Next powinien się odblokować.

 

 

9. Injection++ - Video-Tutorial

 

 

Chcesz zarobić na własnym cheacie/bocie? Pisz na PM

Cracking, analiza programu/strony, boty (także web), cheaty

kwoh2cmd.png

  • Odpowiedzi 61
  • Dodano
  • Ostatniej odpowiedzi

Rekomendowane odpowiedzi

Opublikowano

w 6 pkt tak napisałeś

 

Na nasze szczęście znaleźliśmy adres bazowy (statyczny), więc on zawsze będzie wskazywał na ten adres,

 

co jeśli mam 900.000 wyników? i nie wiem który to ? jak znaleźć prawidłowy?



"Wyznacz Sobie taki cel, że gdybyś go osiągnął, to zwaliłby Cię z nóg."

The Secret



Pomogłem? Daj +

Opublikowano

Dokładnie tak samo jak pokazałem w tutorialu, bo jak już tam wyjaśniłem - Pointer to typ danych DWORD (4 bajtowy), więc nie zmieniasz nic przy szukaniu adresu pointera (nadal 4-bajtowa wartość z zaznaczoną wartością HEX) tylko jak już będziesz miał ten pointer to zmień jego typ danych z 4-bajtowego na float ;)

Chcesz zarobić na własnym cheacie/bocie? Pisz na PM

Cracking, analiza programu/strony, boty (także web), cheaty

kwoh2cmd.png

Opublikowano

Zmagam się ciągle z problemem z Code FInder, robię wszystko tak jak podałeś ale żadnych OP mi nie pokazuje. Próbowałem zainstalować inną wersję jednak jest ciągle tak samo

Skanujesz raz, zapisujesz, wylaczasz gre, (przewaznie tez kompa radzi sie wylaczac), wlaczas znowu gre, wczytujesz poprzednie wyniki code finder i dalej skanujesz i tak w kolko az zostanie pare adresow, jest to o wiele nudniejsza robota niz te inne proste sposoby, no ale nowsze gry juz wykrywaja debuggery CE.

Wszystkie poradniki w "O mnie" i na moim profilu YouTube.


51dd70965ae71.png


!!!HIT!!! -- Pełno klientów na DT nawet na najstarszym kompie bez zamuły!


!!!HIT!!! -- Nowa modyfikacja do Metina FastKill


World of Metin2


Opublikowano

Łap łapkę!Dużo fajnych i przydatnych rzeczy :'D

Ja ukończyłem tylko do poziomu 8 :(.8 i 9 nie umiem.W 8 i 9 są zaktualizowane.Bo nie mogę przejść mimo że robię to co na filmiku i to co jest napisane.W 9 jest teraz gra shared code.

Jeśli nie odpisuje w temacie napisz mi na priv
Opublikowano

Nie zawsze trzeba mnożyć...

Jeżeli nie działa to nie będzie działać lub coś źle robisz, proste.

Btw. Polecam na początek brać się za sapera a nie gierki Flash.

 

pare osob zarabia na edycji we flashu... wiec litosci nie gadaj takich bzdur, zebysmy sie za flasha brali, tez potrzebuje jakiegos malego tutka krok po kroku jak zedytowac wartosci roznych materialow na np. grach facebookowych.

Opublikowano

ja to mam problem przy wielopoziomowych pointerach, często CE pokazuje mi kilka, nieraz nawet kilkanaście wskaźników i nie wiem który wybrać

Ja na wersji 6.2 problemów nie miałem, no chyba że ty źle to robisz.

Tak na prawdę jest to prosta rzecz, niby trochę napisane skomplikowanie ale to jest prościzna, zamiast tego możesz skanować za pomocą Pointer Scan.

Wszystkie poradniki w "O mnie" i na moim profilu YouTube.


51dd70965ae71.png


!!!HIT!!! -- Pełno klientów na DT nawet na najstarszym kompie bez zamuły!


!!!HIT!!! -- Nowa modyfikacja do Metina FastKill


World of Metin2


Opublikowano

może zbytniej różnicy nie ma ale według mniej dużo łatwiej się to wszystko ogarnia gdy jest robione z gra, wtedy można robić to samo co na filmiku :)

ps. nie wiem czemu ale mam nick bartek1037 a nie bartek103 wiec czemu mi zjada ta literke?

Kocham mpcforum.pl!!!

18706.png

Opublikowano

Reup screenów (pieprzyć niemieckie hostingi)

Chcesz zarobić na własnym cheacie/bocie? Pisz na PM

Cracking, analiza programu/strony, boty (także web), cheaty

kwoh2cmd.png

Opublikowano

Oczywiście debuggerem lepiej szukać, ale większość gier umie taki wykryć, więc Pointer scanner jest alternatywą, nim możemy również znaleźć wskaźniki ;) Nawet jest lepszy w przypadku gdy mamy za dużo wyników w Code Finderze - w Ptr Scanie można zapisać na dysk i zrobić rescan po ponownym włączeniu gry, zaś w Code finderze nie.

Chcesz zarobić na własnym cheacie/bocie? Pisz na PM

Cracking, analiza programu/strony, boty (także web), cheaty

kwoh2cmd.png

Opublikowano

To nie tut, to walkthrough ;p

 

Ale dobrze, dobrze, przyda się, przyda się.

Gdyby był sens, to bym przypiął, na razie rozmyślam jak to ma wyglądać.

Ta sygnatura jest pusta.

Opublikowano

Fajny tutorial ale w każdym punkcie na początku trzeba znaleźć aderes w pamięci a w jednej gierce flash cheat engine nie znachodzi mi ilości złota mimo że pomnożyłem ją razy 8 (słyszałem że we flashu trzeba razy 8 mnożyć). Da się coś z tym problemem zrobić?

Opublikowano

aha dzienki a to mam rozumiec ze nie ma tkich hakow zeby ingerowaly w server zebym mogl zmieniac ilosc zeczy typu energia apteczki itp. czy poprostu jeszcze musze poszukac

Opublikowano

mam pytanie dotyczące Valute type

jeśli gra w tym wypadku (Age Of Empire 2) posługuje się typem float albo double to jak mam znaleźć do niej pointner

Opublikowano

Fajny tutorial ale w każdym punkcie na początku trzeba znaleźć aderes w pamięci a w jednej gierce flash cheat engine nie znachodzi mi ilości złota mimo że pomnożyłem ją razy 8 (słyszałem że we flashu trzeba razy 8 mnożyć). Da się coś z tym problemem zrobić?

Nie zawsze trzeba mnożyć...

Jeżeli nie działa to nie będzie działać lub coś źle robisz, proste.

Btw. Polecam na początek brać się za sapera a nie gierki Flash.

Wszystkie poradniki w "O mnie" i na moim profilu YouTube.


51dd70965ae71.png


!!!HIT!!! -- Pełno klientów na DT nawet na najstarszym kompie bez zamuły!


!!!HIT!!! -- Nowa modyfikacja do Metina FastKill


World of Metin2


Zarchiwizowany

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

×
×
  • Dodaj nową pozycję...