Skocz do zawartości
1 maja :: Święto Pracy / 2 maja :: Dzień Flagi / 3 maja :: Święto Konstytucji

[Flash] Oszukiwanie gierek flashowych


Nerd
# 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

Przedstawiam Wam krótki tutorial oszukiwania w grach flash. Nie jest to jakiś profesjonalny tutorial. W pierwszej części pokazane jest proste oszukiwanie przez Cheat Engine, w drugiej części troszeczkę bardziej zaawansowana sprawa, nie ukrywam,że nie przeznaczona dla każdego.

Potrzebne oprogramowanie:

Cheat Engine (scanmem na Linuksa)

Sothink SWF Decompiler

 

1. Zmienianie wartości zmiennej.

Do tej operacji potrzebny nam będzie jedynie Cheat Engine.

Odpalamy Cheat Engine. Zmiana wartości zmiennej może odbywać się na kilka sposobów, pamiętajcie,że nie zawsze uda się nam to zrobić za pierwszym razem.

 

a) prosta zmiana (4 bajty) - wartości szukane i zamieniane nie muszą być poddawane działaniom arytmetycznym.

W poniższym przykładzie postaram się mieć wynik 2147483647 (maksymalna wartość inta)

Po odpaleniu Cheat Engine naciskamy na ikonkę, której obramowanie zmienia kolor z czerwonego na zielony

Dołączona grafika

 

Wybieramy proces odpowiadający za flash-plugin

Dołączona grafika

 

Włączymy opcję "Enable speedhack" i ustawiamy jej wartość na 0, aby spauzować grę.Wyszukujemy wartości początkowej(w naszym przypadku Score wynosi 0, więc wpisujemy 0 w pole Value, resztę rzeczy pozostawiamy bez zmian)

Dołączona grafika

 

Próbujemy zmienić wartość Score w grze(w tym wypadku poprzez rozbicie diamentowych klocków, lub klocków z bonusem). Otrzymaną wartość wpisujemy w Cheat Engine i naciskamy Next scan. Spowoduje to wyszukanie jedynie wśród wcześniej znalezionych wartości.

Dołączona grafika

 

W moim wypadku pojawiło się 6 wyników. Wg mnie, to za dużo, aby już zmieniać wartość wszystkich, gdyż możemy doprowadzić do crasha pluginu flashowego. Próbujemy zmienić wartość Score w grze, przez rozbijanie kolejnych klocków, obserwując zmiany poszczególnych wyników w Cheat engine.

Dołączona grafika

 

W w/w przypadku tylko 2 adresy zmieniły wartość na tą, co ma score. Przenoszę więc obydwa adresy do niższego pola, poprzez zaznaczenie ich i naciśnięcie czerwonej strzałki. Teraz zaznaczamy obydwie wartości w najniżej położonym polu i klikamy dwukrotnie w dowolną "159" z zaznaczonych elementów. Następnie otworzy nam się okno zmiany wartości, więc wpisujemy ją. Aby moje zamiary się spełniły, wpisuję wartość 2147483647 i klikam Ok.

Dołączona grafika

 

Aby mieć pewność,że wartość w tych polach nie ulegnie zmianie(zarówno w jedną jak i w drugą stronę,bo kiedy przekroczymy zakres inta, to wartość staje się ujemna) zaznaczamy kwadraty Active. Następnie, doprowadzamy w grze do jej końca

Dołączona grafika

 

b)wartość x8 (4 bajty) - dosyć często, powyższa metoda się nie sprawdza. Można wtedy próbować robić wszystko analogicznie do wcześniejszego przykładu, z tym,że wartość mnożymy przez 8(zamiast 80 wpisujemy 640, zamiast 1000 - 8000 etc)

 

c)double, float, string - czasami może się zdarzyć,że nie odnajdziemy zmiennej, której typ ma 4 bajty. Można spróbować zmienić Value type na double, float a rzadziej string. Zalecam również zmianę Value type na "All(Byte to Double)", jednak często możemy znaleźć fałszywe wyniki, które mogą nas zmylić. Kiedy mamy do czynienia z liczbami zmiennoprzecinkowymi, to możemy być pewni,że typ danych to float, double lub string.

 

d)double, float x8 - wartości mnożone przez 8

 

e)ostatnio dosyć często trudno przewidzieć jak zabezpieczona jest gra przez zmianami wartości. Spotkałem się z takimi sytuacjami gdzie najpierw mnożyłem wartości *8, a później dodawałem jakąś liczbę, albo wpisywałem wartości podniesione do kwadratu. Bardziej skuteczną metodą są wtedy zmiany w bytecode

 

2. Zmiany w Bytecode

Pierwsze co musimy zrobić to ściągnąć grę na dysk twardy(w swf) i zdekompilować programem Sothink SWF decompiler. Weźmy sobie np. tą grę

Otwieramy ją za pomocą dekompilatora. Rozwijamy listę po prawej stronie i szukamy panelu z akcjami.

Dołączona grafika

Dalsza część jest dosyć trudna i żmudna, wymagane jest myślenie. Szukamy kodu AS, który będzie odpowiadał za zdarzenia w grze... O mam - pliki dotyczące zdarzeń są w tocoGames. Teraz musimy wymyślić sobie zadanie jakie chcemy osiągnąć. Tutaj możliwości jest wiele:

- za każdym razem statystyki mają być po 100%

- odkrycie wszystkich achievmentów(badgesów)

- odkrycie wszystkich upgradów

- dodawanie większej ilości kasy za achievmenty

Ja wybrałem sobie nieco inne zadanie - kasa za achievmenty nie będzie dodawana tylko mnożona, co da nam duuużo pieniędzy, co lepsze w grze, pierwszy badge jest za obsłużenie 4 klientów. Wybrałem to, ponieważ cała idea bytecode hackingu zawiera się w tym i jest to jedna z najprostszych rzeczy. W pierwszej kolejności szukam czegoś związanego z achievmentami. Znalazłem w Challenge Manager dosyć ciekawy fragment, gdzie do zmiennej rewardMoney dopisywane są pieniądze za dany achievment. Te pieniądze muszą być doliczane jakoś, tylko nie wiemy jaki fragment kodu za to odpowiada. Szukamy więc rewardMoney we wszystkich AS(Search All AS).

Dołączona grafika

Po zakończeniu wyszukiwania pojawią się nam wyniki w tabelce Tag info. Klikamy na pierwszy z nich i przechodzimy na kolejne wyniki naciskają strzałkę w dół na klawiaturze. W kilku wynikach zauważyliśmy,że rewardMoney wykorzystywane jest do funkcji earnBadge() jako 3 parametr. Świetnie! Wyszukiwanie oraz nasza znajomość angielskiego pozwoliły nam określić jaka funkcja(albo metoda) odpowiada za dodawanie kasy za achievmenty.

Dołączona grafika

Wyszukujemy więc we wszystkich AS earnBadge. Pierwszy wynik okazał się tym czego poszukiwaliśmy - deklaracji metody earnBadge. Trzeci parametr(czyli ten odpowiadający za rewardMoney) jest nazwany jako param3. W metodzie jest użyty tylko raz.

_loc_4.totalTips = _loc_4.totalTips + param3;
Na ludzki język można to przetłumaczyć: "do łącznej wartości napiwków dodaj param3". Chcemy to przekształcić na "do łącznej wartości napiwków przyrównaj wartość pomnożoną przez param3".

Dołączona grafika

Przechodzimy w zakładkę Raw data. Już tłumaczę co to zrobi. Jak możecie zauważyć mamy 3 typy wyświetlania kodu AS. Pierwszy z nich(ten z którego korzystaliśmy przedtem) to jest kod pisany przez użytkownika przed kompilacją, drugi z nich to jest P-code większości z Was pewnie znany, są to bezpośrednie instrukcje dla kompilatora, Raw data, są to już informacje przekompilowane, odczytywane przez maszynę. W reczystistości Raw data są to tylko bajty, zaś w Sothinku bajty zostały skomentowane, a wyświetlane są rzeczywiste instrukcje. Łatwo możemy się zorientować,że jest to ActionScript3. Wyszukujemy znowu earnBadge(tym razem przez Search Current AS) i staramy się odnaleźć miejsce, gdzie dodawane są nasze wartości. Kopiujemy teraz parę linijek wstecz i parę linijek za docelowym kodem. Dlaczego? Będziemy teraz zamieniać dodawanie na mnożenie przez Cheat engine. Sąsiednie bajty posłużą nam tylko po to, aby znaleźć odpowiedni fragment do zmiany w Cheat engine.

Dołączona grafika

Skopiowany fragment wklejamy do edytora tekstu, usuwamy slashe, tekst oraz EOL, zostawiamy jedynie bajty oraz spacje je oddzielające.

W tym wypadku powinno pozostać coś podobnego do:

66 ed 03 d3 a0 61 ed 03 62 04 (albo coś dłuższego, bądź krótszego, taki ciąg powinien mieć odpowiednią długość, zbyt krótki po wyszukaniu da zbyt wiele wyników, zbyt długi będzie trudniej edytować).

Pozwoliłem sobie pogrubić bajt(odpowiadający za dodawanie), który będzie zmieniany. Niżej podaję spis bajtów, które odpowiadają za działania arytmetyczne:

Dodawanie

AS2 47;AS3 a0

Odejmowanie

AS2 0b;AS3 a1

Mnożenie

AS2 0C; AS3 a2

Dzielenie

AS2 0D; AS3 a3

Dołączona grafika

 

Mamy do czynienia z AS3, chcemy zmienić dodawanie(a0) na mnożenie (a2), czyli cała transformacja będzie wyglądać tak:

66 ed 03 d3 a0 61 ed 03 62 04 -> 66 ed 03 d3 a2 61 ed 03 62 04.

Odpalamy teraz cheat engine, wybieramy proces, który odpowiada za grę. Value type zmieniamy na Array of Bytes, wklejamy pierwszy ciąg, wyszukujemy, jeśli ilość ciągów jest większa niż 1, to należy dodać jeszcze parę kolejnych bitów z kodu(w naszym przypadku powinien być 1 wynik, ale gdyby zdarzyło się,że będzie więcej, to dodajemy na koniec 66 4b , jak to nie pomoże, to kolejne bity itd...). Przenosimy adres za pomocą czerwonej strzałki, następnie podwójnie klikamy na wartość w dolnej tabelce i zmieniamy a0 na a2.

PAMIĘTAJ!!! Musisz zaznaczyć pole Active, w przeciwnym wypadku kod nie zadziała. Przechodzimy do gry, obsługujemy 4 klientów i mamy sporo kasy...

 

To był najprostszy przypadek, trening czyni mistrza...

 

To sum up, poradnik był pisany dosyć szybko, wiele rzeczy może być nie zrozumiałych, gdyż nie mam zdolności nauczycielskich. Nie jestem super ekspertem w tych sprawach, ale zawsze możecie pytać o niezrozumiałe rzeczy. Można tworzyć również wersje hacked gier flash, przez trwałą zamianę bajtów HEX editorem.

Odnośnik do komentarza

Dołącz do dyskusji

Możesz dodać zawartość już teraz a zarejestrować się później. Jeśli posiadasz już konto, zaloguj się aby dodać zawartość za jego pomocą.

Gość
Dodaj odpowiedź do tematu...

×   Wklejono zawartość z formatowaniem.   Usuń formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Odnośnik został automatycznie osadzony.   Przywróć wyświetlanie jako odnośnik

×   Przywrócono poprzednią zawartość.   Wyczyść edytor

×   Nie możesz bezpośrednio wkleić grafiki. Dodaj lub załącz grafiki z adresu URL.

  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • 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