Gra na Androida ciągle się atakuje [zamknięty]

143

Więc już kilka razy przez to przechodziliśmy, wypuszczamy grę (za tanią), a ktoś ją włamuje i umieszcza na lustrze. Konfigurujemy Alerty Google dla wszystkich naszych aplikacji, więc codziennie dowiadujemy się, kto włamuje się. Do tej pory wdrożyliśmy usługę licencjonowania zgodnie z sugestią Google, nasza sól jest wytwarzana losowo za każdym razem, gdy licencja jest inicjowana z unikalnym identyfikatorem urządzenia. Usługę check uruchamiamy raz, przy pierwszym uruchomieniu aplikacji. Następnie generujemy 512-znakowy hash dla klucza i przechowywanej wartości, która jest następnie porównywana z SharedPreferences.

Teraz wiem, że sprawdzanie raz jest prawdopodobnie miejscem, w którym aplikacja jest blokowana. Nasz kod bajtowy najprawdopodobniej został przejrzany i ponownie skompilowany bez wiersza inicjującego sprawdzenie.

Stąd nie chcę zaciemniać naszego kodu, ponieważ widziałem go wcześniej zepsutego. Chcę czegoś bardziej solidnego, a także chcę się nauczyć, jak to zrobić poprawnie. W tym momencie bardziej interesuje mnie nauka niż zarabianie pieniędzy, ponieważ tylko 2% ludzi kiedykolwiek szuka wersji zhakowanej.

Do tej pory sam wymyśliłem generator liczb losowych, który jest umieszczony w kilku początkowych obszarach gry. Po zainicjowaniu (powiedzmy 1 na 50 razy) licencja jest sprawdzana. Wiem, że utrudniłoby to włamanie, ponieważ cracker musiałby wyeliminować każdy przypadek, skompilować, wyeliminować, skompilować. Ta metoda jest jednak nadal łatwa do złamania ... więc co sugerujecie? Ponownie, jestem naprawdę zainteresowany tym procesem bezpieczeństwa, więc proszę o edukację, nie zmieniaj tego w dyskusję na temat zaciemniania lub sprawdzania okresowego na podstawie sygnatury czasowej.

Dzięki

BajaBob
źródło
27
Gdybyś sam nie powiedział, że bardziej interesuje Cię nauka niż zarabianie pieniędzy, moja odpowiedź brzmiałaby po prostu „to nie jest warte bólu głowy”. Ponieważ jesteś zainteresowany samym bólem głowy, mówię: śmiało (ale nie mam dla ciebie odpowiedzi, po prostu podążę za tym pytaniem jak wszyscy inni).
Thiago Arrais
4
Jeśli hakuje się tę samą grę, czy jesteś pewien, że nie masz pracownika, który ma problem? Nie jest to najmilsza rzecz do rozważenia, ale może się zdarzyć
Phil Lello,
3
Chociaż jest to ponad 20 tys. Linijek kodu, sam zarządzam całym procesem.
BajaBob
3
@BajaBob to ty jesteś kretem: D
Sulfkain

Odpowiedzi:

117

Mój pomysł nie jest odporny na hakerów, ale może usunąć zainteresowanie hakowaniem gry.

Model Freemium

1) Uwolnij pierwsze 5-10 poziomów, aby ludzie mogli nauczyć się gry i dobrze się bawić bez płacenia. Mniej będzie chciał zhakować pierwszy poziom, a gra rozprzestrzeni się jeszcze bardziej dzięki modelowi Freemium.

Shareware / klastrowe pakiety poziomów

2) Pozwól, aby część poziomów gry lub logiki pozostała online. Na przykład. sięgając po poziom 5, 10 lub 15, pobierz małe części do gry i za każdym razem prześlij dziennik postępów z gry i sprawdź go z możliwymi wartościami + hashcodes. Może to umożliwić automatyczne zamykanie zhakowanych kont.

Ochrona przed oszustami Stealth

3) Możesz także policzyć „małe flagi ostrzegawcze”, które umieszczasz w grze. Nie tylko sprawdzaj "walidację" na początku, nie wbudowuj tych flag w samą logikę gry. Nie rób tego zepsuć rozgrywkę, bo wtedy nikt tego nie będzie szukał. Następnie, gdy użytkownik osiągnął koniec poziomu potwora, sprawdź, czy są jakieś zarejestrowane flagi ostrzegawcze. Nie pojawią się one w grze, więc nieświadomy użytkownik z zhakowaną wersją może grać godzinami / dniami i nagle zdać sobie sprawę, że nie może ukończyć gry lub przejść do następnego poziomu, ponieważ gra miała „błąd”. Użytkownik nie wiedział, że ten błąd występuje tylko w zhakowanych klientach.

Wniosek

Bądź mądrzejszy niż krakersy. Oszukać ich, aby myśleli, że praca została wykonana. Zrób ochronę przed kopiowaniem i wiedz, że bardziej zaawansowani crackerzy będą w stanie ją usunąć. Ale prawdopodobnie nie chcą grać na 50 poziomach, aby sprawdzić, czy crack również działa do końca.

Gdy zdadzą sobie sprawę z tego problemu, mogą też zacząć go rozwiązywać. Ale jeśli podzielisz grę na pakiety poziomów, nadal możesz sprawdzać poprawność między każdym pobraniem pakietu. Kiedy więc otrzymasz dane hash zhakowanego klienta, po prostu wykonaj polecenie i zawiesz grę na kliencie. Ups, gra się zawiesiła. Nie mów, że jest zhakowany. Może wystąpić błąd programu. :-)

Ponownie, nie jest odporny na hakerów. Ale może ich to na tyle zirytować, że mogą przejść do następnej gry. Wreszcie, możesz również publikować regularne aktualizacje gry i tylko najnowsza wersja powinna być w stanie „publikować rekordy” itp., Więc aktywni użytkownicy będą musieli aktualizować, aby być na bieżąco.

BerggreenDK
źródło
5
Wow, świetne pomysły. Naprawdę doceniam to wszystko, nigdy nawet nie rozważałem tworzenia poziomów, wysyłania ich na serwer i sprawdzania ich zgodności. Versoning ... świetny pomysł. Dbaj o aktualizację wszystkich, spraw, aby łamanie było nierozsądne. Wielkie dzięki, to zajmie mi trochę czasu!
BajaBob
12
Ech, szkoda, że ​​nie możesz dać +2 odpowiedzi :) Jeden komentarz: Jak możesz pokazać, że problem leży w piractwie gry? Jeśli gra na pirackiej kopii robi się błędna / dziwna, ludzie mogą pomyśleć, że jest to błąd i krytykować grę na forach. Nie sądzę, żeby to był tak duży problem na Androidzie, ponieważ nie ma tak wielu forów z dużą publicznością, ale zastanawiam się, czy sensowne jest z góry zastrzeżenie, że „pirackie kopie mogą nie działać poprawnie”.
EboMike
3
Pamiętam grę z 1978 roku na TRS80, która działałaby losowo, gdyby ochrona przed kopiowaniem została usunięta. Odbył się tylko 1 test poprawności, a usunięcie go oznaczało, że można było swobodnie kopiować grę, ale dziwne błędy w grze nie pojawiały się na legalnych kopiach, tylko na kopiach zhakowanych. Nikt nie pomyślał, że to wina dewelopera ... wiedzieliśmy o co chodzi.
Fixee
1
@EboMike Myślę, że mocną stroną mojego pomysłu na ochronę przed kopiowaniem jest „działanie tak normalne, jak to tylko możliwe”, by nie dawać włamywaczom nawet pojęcia, jakie okropne schematy ochrony czekają. To tylko sprawiłoby, że bardziej ciekawi z nich polowaliby na ochronę. Tylko dla zabawy. Pamiętaj, wielu z nich nie robi tego dla pieniędzy, ale tylko dlatego, że mogą się tym pochwalić. Więc nie kusz ich. Po prostu działaj swobodnie. : o) Bądź mądrzejszy od nich.
BerggreenDK
2
@Fixee i inni Niedawna gra Batman Arkham Asylum miała coś podobnego: na pirackich kopiach kluczowy ruch zakończyłby się niepowodzeniem i utknąłby na dość wczesnym etapie gry. Następnie, gdy ktoś narzekał na „błąd” na forach, programista mógł się uśmiechnąć i powiedzieć „to nie jest błąd w grze, to błąd w Twoim kodzie moralnym”.
Nzall
20

Od jakiegoś czasu zajmuję się dekompilacją i hakowaniem apk (nie warez, ale modyfikacje i hacki głównie do aplikacji Google i frameworka Androida, zawsze przestrzegając zasad xda-developerów).

Kiedy nauczysz się czytać smali, będzie to prawie tak samo, jak czytanie oryginalnego kodu java (ale z dużo większą liczbą LOC). Tak więc każdy kod dodany w celu sprawdzenia kluczy można znaleźć i usunąć lub zastąpić. Nie musisz nawet rekompilować za każdym razem, aby wyeliminować więcej niż jeden (niektóre wyszukiwania robią cuda, aby znaleźć podobne fragmenty kodu), a nawet jeśli potrzebne są cykle kompilacji / ponownej kompilacji, aby je znaleźć, to tylko kwestia jednej lub dwóch minut dekompilować: wszystko jest zautomatyzowane przez apktool, a jeszcze bardziej przez apkmanager.

Powiedziawszy to, proponuję ci zaimplementowanie jakiejś tabeli punktacji online lub podobnej, a kiedy użytkownik patrzy na tabelę wyników online, możesz sprawdzić zaimplementowany kod skrótu i ​​porównać go z powiązanym kontem Gmail. W ten sposób możesz zgłosić włamanie do Google i wysłać nieprzyjemną wiadomość do użytkownika warez, wyjaśniającą, dlaczego jest to nielegalne.

Oczywiście można by zaimplementować nowy hack, aby wyeliminować tabelę punktacji, ale to zmniejszyłoby zainteresowanie warezem.

Powodzenia.


Aktualizacja

Po zbadaniu odpowiedzi na to pytanie: Wstrzyknięcie kodu do APK (tak naprawdę o mechanizmie Amazon DRM), mogę trochę opowiedzieć o tym, jak Amazon chroni aplikacje: zawiera metody sprawdzania poprawności instalacji wszędzie (możesz zobaczyć przykład o tym, jak to robią w mojej odpowiedzi na to pytanie). Spowoduje to, że każda próba włamania się do aplikacji będzie niezbyt trudna, ale bardzo żmudna. Uważam, że to mocna strona: hakerzy nie będą chcieli spędzać tyle czasu na wykonywaniu tylu powtarzalnych zadań: nie jest to trudne i nudne. Główną wadą, jaką widzę w tym podejściu, jest oczywiście możliwość zhakowania samej aplikacji Amazon, aby zawsze zwracać prawidłową odpowiedź. Ale jeśli połączysz swoje obecne kontrole hash z jakimś rodzajem czeku online rozproszonego wśród twoich metod, uważam, że szanse na to, że zostanie on zhakowany, mogą zostać drastycznie zmniejszone.

Aleadam
źródło
3
Powinienem wspomnieć, że wiele osób ma problem z aplikacjami „dzwoniąc do domu”. Osobiście to głupie - telefon z Androidem „dzwoni do domu” na tak wiele sposobów, tak często, że to nie ma znaczenia, a jaki jest problem z anonimową weryfikacją licencji? Nadal chciałem to wyrzucić - niektórzy ludzie buchają na temat „dzwonienia do domu”, zwłaszcza gdy nie jest to ujawniane.
EboMike
3
Cóż, zrozumiałe jest, że ludzie mogą mieć problem, jeśli aplikacja „dzwoni do domu” i nie informuje użytkownika. Ale internetowa tabela wyników rozwiązuje ten problem, ponieważ to użytkownik, który chętnie się łączy
Aleadam
To prawda, ale gdy użyjesz połączenia, które miało „anonimowo” przesłać wyniki i wysłać hash konta Gmail, to już inna sprawa. Znowu: nie dla mnie. Myślę, że jest to całkowicie rozsądne i osobiście miałbym pokusę zaimplementowania tego schematu we własnej aplikacji. Osoby, które narzekają, będą w mniejszości (i najprawdopodobniej kupią aplikację mimo wszystko).
EboMike
Dlaczego miałbyś dekompilować framework, zamiast pobierać kod źródłowy?
Phil Lello,
1
@Phil nie masz dostępu do kodu źródłowego Touchwiz lub wyczuwalnych FW, więc jeśli chcesz zmodyfikować konkretny telefon, czasami najłatwiej jest go zdekompilować i zmienić smalis.
Aleadam,
20

Zaczerpnięte z mojego rozwiązania z tego postu Unikaj pęknięcia apk

Zaimplementuj własną bibliotekę licencyjną

Poleciłbym również sprawdzić to z nagrania Google I / O 2011 w YouTube:

Unikanie piratów i powstrzymywanie wampirów

EDYTOWAĆ:

Notatki prezentacyjne od unikania piratów i zatrzymywania wampirów

Kilka podstawowych punktów kluczowych

TryTryAgain
źródło
Wydaje się, że powyższe linki nie zawsze prowadzą do połączonej strony ... wydaje się, że działa tylko czasami i w pewnym stopniu zależy od systemu operacyjnego i przeglądarki. Zwróć więc uwagę na zakończenie #%3ar.page.15w adresach URL. Jeśli nie nastąpi automatyczne przekierowanie na tę stronę, spójrz na link, aby zobaczyć, gdzie / którą stronę powinieneś przeglądać.
TryTryAgain
1
Miły! Widzę, że również wierzą w Freemium i ukrywają pewne „błędy” w grze (używając tylko techniki licencyjnej). Chciałbym rozwiązanie wieloplatformowe zamiast serwera licencji tylko na Androida. Ale też interesujące.
BerggreenDK
przy okazji. to zabawne, ta odpowiedź ma 15 kciuków w górę, moja przekroczyła już 90 i nie jest uważana za właściwą odpowiedź :-)
BerggreenDK
8

Wiem, że nie przepadasz za zaciemnianiem, ale naprawdę muszę na to zareagować:

Stąd nie chcę zaciemniać naszego kodu, ponieważ widziałem go wcześniej zepsutego. Chcę czegoś bardziej solidnego, a także chcę się nauczyć, jak to zrobić poprawnie.

Z mojego doświadczenia wynika, że ​​ProGuard jest bardzo niezawodny, i chociaż używam kilku zaawansowanych funkcji, takich jak AIDL i trochę natywnego kodu, który wywołuje metodę Java. Przeczytanie dokumentacji i wykonanie pewnych czynności wymaga trochę pracy. tam ProGuard jest wyjątkowo niezawodny, a także optymalizuje Twoją aplikację.

Niestandardowe sztuczki bezpieczeństwa / kryptograficzne są dobre, ale bez zaciemniania to moim skromnym zdaniem jak wrzucenie kamienia do wody.

Używam ProGuard w produkcji od wielu miesięcy i działa bezbłędnie.

Jeśli lubisz się uczyć, przeczytaj uważnie instrukcję ProGuard, eksperymentuj z nią i przejrzyj dzienniki wyjściowe.

olivierg
źródło
wszystko, co można odczytać, można również zdekompilować, to tylko kwestia mocy procesora i uporu. Maskowanie nadal umożliwia działanie kodu, więc podczas dekompilacji / deobfuskacji kodu cracker może nadal porównywać działającą wersję z oryginałem. Może to opóźnić działanie crackera lub zatrzymać mniej doświadczonego crackera, ale wcale nie jest bezpieczne.
BerggreenDK
4

Szansa, że ​​są bardziej utalentowani programiści niż TY (dotyczy wszystkich programistów) wynosi 100%. A jeśli to prawda, nie możesz naprawić hakowania. Ale możesz poświęcić na to tyle czasu i wysiłku, aby zbankrutować.

Jeśli chcesz zarobić poważne pieniądze, musisz przeprowadzić badania na temat swojej docelowej grupy użytkowników i nauk behawioralnych. Musisz zmusić użytkowników do gry, która przyniesie nowe pieniądze i to wszystko.

Poza tym wszystko źle zrozumiałeś. Hakerzy są najbardziej aktywnymi członkami Twojej bazy użytkowników, po prostu zachowują się w sposób, którego nie zamierzałeś.

Weźmy na przykład gry Zynga na Facebooku, myślisz, że zostałeś zhakowany? - Jasne, a około +100000 graczy gra tylko, ponieważ mogą używać botów, które automatyzują wszystko.

Posiadanie ogromnej bazy aktywnych użytkowników botnetu rzeczywistych ludzi sprawia, że ​​gracze typu archiwizujący chcą grać w tę grę - a jeśli grasz i wygląda fajnie, to Avarage Joe również będzie chciał grać. Jeśli Avarage Joe gra, to jego przyjaciele mogą chcieć zagrać, a ciebie prawdopodobnie nie będzie obchodzić nic innego, niż bycie lepszym od swojego przyjaciela, zabijanie czasu lub rozmawianie o czym. Średni znajomi Joe najprawdopodobniej będą skłonni zapłacić, aby być lepszym od Joe, ale raczej chcieliby zainwestować w coś, co sprawi, że będą lepsi.

Poza tym, jeśli prawdziwą wartością jest granie w tę grę za darmo, to użytkownicy, którzy używają darmowej zhakowanej wersji, najprawdopodobniej nigdy by za nią nie zapłacili. Ale twoi są Avarage Joes i ich przyjaciele po prostu mogą. Więc to jest najtańsza reklama, jaką możesz mieć. Jeśli chcesz zarabiać na dużej bazie użytkowników, po prostu twórz nowe wersje gry z niewielkimi zmianami poziomów i grafiki.

Margus
źródło
3

Piractwo zawsze będzie problemem. W zasadzie crackerzy są lepsi w tej grze Security Though Obscurity niż programiści.

wieża
źródło
2

Co za interesujące i niepokojące pytanie. :-) W ramach ćwiczenia możesz spróbować wypuścić aplikację przez Amazon; mają własny mechanizm DRM; Ciekawe, czy działa lepiej niż ProGuard ...

George Freeman
źródło
1
Od dzisiaj aplikacja Lucky Patcher złamała również Amazon DRM! Oprócz ProGuard innym rozwiązaniem może być DexGuard. Ale DexGuard kosztuje kilkaset euro, ale nie można być pewnym, że nawet on może chronić twoje kody przed piractwem ...
ChuongPham
2

Moim zdaniem jednym z kluczowych elementów jest rozproszenie kodu, aby nie był on w jednym miejscu. Jeśli masz funkcję o nazwie LicenseChecker.checkLicense (), która pobiera licencję i sprawdza ją, możesz być pewien, że zostanie ona natychmiast wyłączona.

Jedyną zaletą, jaką masz, jest to, że crackerzy nie widzą komentarzy twojego kodu (i, jeśli zaciemnisz nazwy metod / zmiennych), więc wymyśl coś dziwnego. W onCreate () jednego działania otrzymasz identyfikator licencji. W onResume () otrzymujesz inną wartość, z którą możesz to porównać. Może stwórz wątek i sprawdź tam. A potem jakiś inny nieistotny fragment kodu (może kontrolka odtwarzacza) może odebrać wartość, porównać ją i gdzieś zapisać wynik. Następnie trzy inne nieistotne fragmenty kodu niezależnie sprawdzą tę wartość i wyłączy aplikację, jeśli się nie zgadza.

Teraz powinienem powiedzieć z góry, że może to powodować ból głowy - oczywiście zagracony, nieprzyjemny kod jest trudniejszy do debugowania i podatny na błędy. W najgorszym przypadku tworzysz fałszywe alarmy w legalnie zakupionych aplikacjach.

I oczywiście wszystko można poddać inżynierii wstecznej - gdy crackerzy znajdą miejsce, w którym aplikacja jest wyłączona, śledzą odczytaną wartość. Mogą wtedy prześledzić wstecz, gdzie jest przechowywany, i prześledzić to wstecz ..... lub, o wiele łatwiej, mogą po prostu wyłączyć ostateczną kontrolę (dlatego poleciłem 3 różne miejsca, wszystkie wyzwalanie opóźnione). Bezpieczeństwo jest tak dobre, jak najsłabsze ogniwo.

Nie będziesz w stanie powstrzymać piractwa. Najlepszym rozwiązaniem jest opóźnienie rozpowszechniania pirackiej kopii do czasu, gdy początkowy szum na temat Twojej aplikacji ucichnie.

EboMike
źródło
1

Po pierwsze, NIE uważam się za profesjonalistę w dziedzinie bezpieczeństwa oprogramowania SW, ale:

Myślę, że ważne jest, aby aplikacja była zależna w jakiejś części od kontroli podpisu. Nie pozwól, aby wpłynęło to natychmiast, ale pozwól mu ustawić niektóre flagi lub zmienić niektóre wartości. później użyj tych flag, sprawdź je, niech ich brak / niepoprawność spowoduje jakiś wyjątek, który może zakończyć działanie aplikacji. Dopóki sprawdzanie podpisu jest istotne tylko w danym momencie, łatwo jest go ominąć, usunąć linię, gdy dotknie większej liczby obszarów w kodzie, twoja aplikacja stanie się trudniejsza (lub mniej ...) do zhakowania. Uważam również, że nie wszystkie kontrole powinny wywoływać tę samą procedurę w przypadku sankcji, ponieważ ułatwi to również znalezienie mechanizmu ochronnego i zakończenie go.

Oczywiście sankcje nałożone w przypadku nielegalnego oprogramowania mogą się różnić, możesz chcieć zawiesić aplikację, gdy jest używana nielegalnie, ale równie dobrze możesz chcieć ją utrzymać i wysłać tylko wiadomość z prośbą o zakup legalnej kopii wniosku.

Jeśli właśnie tego nie chciałeś usłyszeć, to przepraszam za poświęcony czas :)

MByD
źródło
7
Awaria aplikacji po wykryciu, że była piracka, może przynieść odwrotny skutek, chyba że wyraźnie powiesz, że właśnie dlatego się zawiesiła. Pamiętam, jak czytałem o niektórych twórcach gier, którzy spowodowali awarię gry po przypadkowym okresie, jeśli nie przeszła testu antypirackiego. Oczywiście mnóstwo ludzi go piraciło, ale nie zdawali sobie sprawy, że awarie były spowodowane tym, że używali pirackiej wersji. Spowodowało to wiele złej prasy dla programistów i mogło zaszkodzić ich sprzedaży.
Mitch Lindgren
3
@Mitch - Zgadzam się. Podałem to jako jedną możliwość, ale „najlepsza” strategia techniczna prawdopodobnie nie jest najlepszą strategią „biznesową”.
MByD
0

Użytkownicy Androida będą musieli pogodzić się z bólem ciągłych telefonów komórkowych. Jedyną bezpieczną aplikacją na Androida jest zawsze połączona aplikacja na Androida.

Jest to w dużej mierze spowodowane odmową Google zablokowania instalacji, podobnie jak Apple. Na iOS musisz jailbreakować telefon. W systemie Android możesz załadować dowolny plik APK na magazynie, zainstalować fabrycznie.

Zachowaj część / większość / całą zawartość na serwerze; dostarczać go w kawałkach; weryfikuj licencję / sesję przy każdym połączeniu.

yetimoner
źródło
Wyjaśnienie: chociaż możesz zrootować dowolną platformę, tylko niewielki procent użytkowników IOS faktycznie będzie się obawiał przed przerwaniem instalacji. Również w wielu częściach świata zapłacenie za aplikację na Androida jest trudne lub niemożliwe, co podsyca piractwo.
yetimoner,
To był właściwie jeden z pomysłów z mojej odpowiedzi z 2011 roku… po co publikować go ponownie?
BerggreenDK
0

Zahamowanie tego rodzaju zachowań będzie niezwykle trudne. Wszystko, co jest obsługiwane po stronie klienta, można zhakować za pomocą dekompilacji i modowania APK, edycji pamięci za pomocą oprogramowania takiego jak Game Guardian ect.

Jedynym sposobem, w jaki mogę zobaczyć, jak częściowo to obejść, byłoby stworzenie gry online. Lub zlecić obsługę niektórych funkcji online. Lub jeśli szyfrowanie antysabotażowe, takie jak denuvo, jest kiedykolwiek dostępne dla Androida / iOS.

Techinator
źródło