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
źródło
Odpowiedzi:
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.
źródło
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.
źródło
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
źródło
#%3ar.page.15
w 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ć.Wiem, że nie przepadasz za zaciemnianiem, ale naprawdę muszę na to zareagować:
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.
źródło
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.
źródło
Piractwo zawsze będzie problemem. W zasadzie crackerzy są lepsi w tej grze Security Though Obscurity niż programiści.
źródło
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 ...
źródło
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.
źródło
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 :)
źródło
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.
źródło
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.
źródło