Skocz do zawartości

Jak zabezpieczacie swoje gry w GMS?


Rekomendowane odpowiedzi

Siemanko,

czasami pojawia się sytuacja, gdzie grę należy w jakiś sposób zabezpieczyć - przynajmniej prowizoryczny, tak aby nikomu się nie chciało tego łamać - przed cheatami, trainerami itp..

Jak Wy to robicie? Mam na myśli produkcje single player. Szczególnie duże ma to znaczenie jeśli oferujemy jakieś mikropłatności,  a gra jest dostępna także na Windowsa. Znam sporo osób które lubią cheatować zamiast płacić na Androidzie(o ile gra to umożlwia, bo nie ma takich zabezpieczeń), ale jest ich nie wielu. Natomiast większość Polaków przynajmniej jeśli w jakiejś małej gierce oferuje się mikropłatności na Windowsa to próbuje swoich sił cheat engine'ami itp. Oczywiście za pomocą gotowych tutoriali :D

 

Jak w przynajmniej taki prowizoryczny sposób zabezpiczyć grę? Proste "szyfrowanie"(o ile to można tak nazwać) głównych zmiennych? I jeśli tak to jak to robicie? Wystarczy przemnożyć np. przez dwa, czy takie coś zostanie wyłapane i tak przez cheat engine? Trzeba bawić się w jakieś szyfrowanie XOR, czy wystarczy np przemnożenie przez 2 i dodanie 1 itp.? Bo domyślam się, że szyfrowanie XOR za każdym razem gdy używamy zmiennej może być problematyczne. Mówię oczywiście o sytuacji gdy inna cyfra np hp jest wyświetlana a inna jest prawdziwa, dzięki czemu takie najprostrze metody pokroju cheat engine(chyba) odpadają.


Chętnie posłucham jak robicie to Wy, ewentualnie jakie macie na to pomysły :)

Odnośnik do komentarza
Udostępnij na innych stronach

  • Administratorzy

Jeśli gra jest single player to szczerze... jeśli ktoś nie chce w nią normalnie grać, tylko oszukiwać, to mam to gdzieś. To jest jego wybór, że chce iść na łatwiznę, na grę innych to nie wpływa, więc psuje radość jedynie sobie (a może ją własnie zapewnia). Jeśli zapłacił za grę i oszukuje - no trudno, może kupił grę dlatego, ze może oszukiwać ? :D

 

Szczerze, to bym się tym nie przejmował.

 

Natomiast jeśli chodzi o zapisy z gier, to sobie w grze zrobiłem tak - jest jakieś tam pseudo hasełko, typu: "abc$xxx9". Wybieram sobie jakieś 4-5 rzeczy które są w sejvie i je doklejam do stringa: var checksum = md5(a+b+c+d+password); i zapisuję "sumę kontrolną" w sejvie.

Jak wczytuję grę, to wtedy sprawdzam czy wartość tych a+b+c+d (i hasła które jest tylko exe) jest taka jak ten hash. To zapobiega modyfikowaniu zmiennych tak długo, aż ktoś nie ma tego hasła - ale jak je potrafi znaleźć to już żadne zabezpieczenie nie pomoże :)

Odnośnik do komentarza
Udostępnij na innych stronach

Godzinę temu, gnysek napisał:

Jeśli gra jest single player to szczerze... jeśli ktoś nie chce w nią normalnie grać, tylko oszukiwać, to mam to gdzieś. To jest jego wybór, że chce iść na łatwiznę, na grę innych to nie wpływa, więc psuje radość jedynie sobie (a może ją własnie zapewnia). Jeśli zapłacił za grę i oszukuje - no trudno, może kupił grę dlatego, ze może oszukiwać ? :D

 

Szczerze, to bym się tym nie przejmował.

 

Natomiast jeśli chodzi o zapisy z gier, to sobie w grze zrobiłem tak - jest jakieś tam pseudo hasełko, typu: "abc$xxx9". Wybieram sobie jakieś 4-5 rzeczy które są w sejvie i je doklejam do stringa: var checksum = md5(a+b+c+d+password); i zapisuję "sumę kontrolną" w sejvie.

Jak wczytuję grę, to wtedy sprawdzam czy wartość tych a+b+c+d (i hasła które jest tylko exe) jest taka jak ten hash. To zapobiega modyfikowaniu zmiennych tak długo, aż ktoś nie ma tego hasła - ale jak je potrafi znaleźć to już żadne zabezpieczenie nie pomoże :)

Gra będzie darmowa tylko będą mikropłatności. Dlatego muszę to chociaż prowizorycznie. Nie sprzedam niczego co można sobie dodać cheaty enginem :D 

Odnośnik do komentarza
Udostępnij na innych stronach

Też raczej bym się tym nie przejmował, jak zrobisz interesującą grę, to więcej osób po prostu ją pobierze (co jest chyba ważniejsze). Zamiast tracić czas na implementację *byle* zabezpieczeń (które i tak można złamać) to poświęć ten czas na jakiś fajny feature w grze :)

 

Ale żeby nie odchodzić od tematu kompletnie bez rozwiązania żadnego, to można zastosować jakieś proste triki jak np. oszukiwać gracza "hakera" o wartościach zmiennych, np. złoto w grze byłoby przesunięte o 3 bity, co dawałoby kompletnie inne wartości w Cheat Engine (potem trzeba tego pilnować przy odczycie/zapisie ilości złota!), albo użyć coś na wzór XOR-owania zmiennych przed i po zapisie w pamięci RAM. Albo jak gnysek wspomniał, użyj hashowania zmiennych kluczowych, ale też w pamięci gry, a jak ktoś Cheat Enginem spróbuje je zmienić, to hash się nie będzie zgadzał przed np. odczytem ilości złota albo dodatków. Wtedy będziesz mógł obsłużyć próbę "zhakowania" gry i odczytać te zmienne np. z zaszyfrowanego save-a.

Odnośnik do komentarza
Udostępnij na innych stronach

  • Administratorzy

DLC powinno być pobieralnym plikiem, wtedy sobie tak od nie odblokują. I najlepiej wtedy w pełnej grze mieć sekretny klucz, oraz wynik hashowania pliku DLC, ale nigdy zawartości DLC - wtedy znalezienie treści tego pliku jest niemal niemożliwe (no, może z tęczowej tablicy przypadkiem by trafili, ale to jest 0,0001% szansy).

Oczywiście wtedy jest szansa, że DLC będzie piracone... no i tak to wygląda zawsze.

Odnośnik do komentarza
Udostępnij na innych stronach

8 minut temu, gnysek napisał:

DLC powinno być pobieralnym plikiem, wtedy sobie tak od nie odblokują. I najlepiej wtedy w pełnej grze mieć sekretny klucz, oraz wynik hashowania pliku DLC, ale nigdy zawartości DLC - wtedy znalezienie treści tego pliku jest niemal niemożliwe (no, może z tęczowej tablicy przypadkiem by trafili, ale to jest 0,0001% szansy).

Oczywiście wtedy jest szansa, że DLC będzie piracone... no i tak to wygląda zawsze.

DLC jako osobny plik jest najprostszą opcją do spiracenia. 

Poza tym chodzi też o mikropłatności które dodają np hajsik albo podobne sprawy. No ogólnie po prostu potrzebuję jakiegoś sprawnego i sprytnego sposobu żeby uchronić się chociażby przed najprostrzym hackingiem, bo nie przewiduję żeby ktoś próbował jakiś mega metod na złamanie moich zabezpieczeń. Tylko korzystać z Cheat Engine umie zbyt wiele osób więc chociaż takie prowizoryczne metody są mi potrzebne

Odnośnik do komentarza
Udostępnij na innych stronach

3 godziny temu, MaxGaming napisał:

DLC jako osobny plik jest najprostszą opcją do spiracenia.

A jest jakieś inne rozwiązanie niż DLC jako osobny plik? ;)

 

To ja mam ciekawy pomysł, możesz przechowywać dane w bloku pamięci (który nie musi [a nawet nie powinien] być wykorzystany w całości), a pozycje gdzie będą znajdowały się wartości zmiennych (które będą tutaj indeksowane) będą określane pseudolosowością/algorytmem/kluczem/whatever, którego wynik będzie ograniczony początkiem i końcem tablicy. W ten sposób dana liczba będzie mogła być odczytana, przetworzona, następnie nowa wartość zwrócona do nowego adresu w pamięci. Reszta bajtów tablicy wypełniona wartościami losowymi. Dane można jeszcze dodatkowo "doszyfrować" XORem co jest banalnie proste i jeszcze jakimś algorytmem dla pewności. Myślę, że ciężko coś takiego złamać. :P

Odnośnik do komentarza
Udostępnij na innych stronach

  • Administratorzy

Można zawsze odczytywać DLC online, też za pomoca klucza, ale prędzej czy później ktoś go odczyta z EXE. Nie da się w 100% zabezpieczyć, więc nie warto czasem tracić na to czasu i po prostu zrobić jakieś proste zabezpieczenie, które odrzuca "noobów" komputerowych, bo prawdziwych hakerów i tak nie przechytrzysz. Pytanie, czy oni w ogóle kupią grę czy już od początku spiracą. Niestety, w tym biznesie musisz założyć, że 50% graczy to będą tacy, co mają grę z "lewego" źródła. I wtedy właśnie zaczyna sie dyskusja, czy piracąc okradasz dewelopera. Gracze twierdzą, że nie, bo wtedy gry by nie kupili, ale deweloper powie, że tak, bo widzi, że połowa graczy przyniosła 0$ dochodu (a prawda jest taka, że nawet jak 1% z tych piracących jednak by kupiła grę gdyby nie było pirata, to zarobisz 1% wiecej, czyli jednak straciłeś kasę na nich).


Rynek muzyczny ma jeszcze gorzej :)

Odnośnik do komentarza
Udostępnij na innych stronach

23 godziny temu, gnysek napisał:

Można zawsze odczytywać DLC online

Generalnie rozwiązanie online wydawałoby się najlepsze (najłatwiej zabezpieczyć grę jak część obliczeń jest po stronie serwera) - o ile gra nie jest singleplayer to dobry pomysł

 

23 godziny temu, gnysek napisał:

ale prędzej czy później ktoś go odczyta z EXE. Nie da się w 100% zabezpieczyć, więc nie warto czasem tracić na to czasu i po prostu zrobić jakieś proste zabezpieczenie, które odrzuca "noobów" komputerowych, bo prawdziwych hakerów i tak nie przechytrzysz.

100% prawdy, haker i tak złamie, a dla tego "nooba" nie ma co się tak wysilać

 

Cytuj

Gracze twierdzą, że nie, bo wtedy gry by nie kupili, ale deweloper powie, że tak, bo widzi, że połowa graczy przyniosła 0$ dochodu (a prawda jest taka, że nawet jak 1% z tych piracących jednak by kupiła grę gdyby nie było pirata, to zarobisz 1% wiecej, czyli jednak straciłeś kasę na nich)

Ponoć często piracone gry są popularniejsze ;)

Odnośnik do komentarza
Udostępnij na innych stronach

Ale mi chodzi o noobów nie o prawdziwych hakerów, bo to mała produkcja.

Myślałem nad rozwiazaniem typu zmienne świadczące o gotówce, ekwipunku i tym jakie DLC dany gracz ma wykupione byłby przechowywane na serwerze. W ten sposób ciężko byłoby to oszukać. DLC byłoby przypisane zawsze do konkretnego konta. Ale gra jest single player i muszę zadbać też o to żeby byle noob tego nie obszedł. Prawdziwych hakerów nie przewiduję i zdaję sobie sprawę, że walka z takimi osobami jest nie opłacalna. Ale też raczej nie opłacalne jest to dla nich.

@e i proszę nie mówmy ile procent będzie piracić itp bo nie bez powodu mam wymyśloną konkretną koncepcję odnośnie sposobu monetyzacji tego projektu. Mam pomysł jak maksymalnie zmniejszyć piractwo, ale to będzie bez sensu jeśli dwa kliki w cheat engine i będzie ktoś miał dostęp do wszystkiego. To nie jest pytanie odnośnie sposobu zarabiania na grach i piractwie tylko zabezpieczeniu zmiennych, chociaż prowizorycznie, chociaż te najważniejsze zmienne.

Odnośnik do komentarza
Udostępnij na innych stronach

  • Administratorzy

No to na noobów md5 z paru zmiennych zapisane jako jedna z wartości w save wystarczy. Zwłaszcza, że klucz doklejany do stringa będzie ukryty w grze (najlepiej z paru zmiennych go zmontować).

Odnośnik do komentarza
Udostępnij na innych stronach

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

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

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...