Piractwo, piractwo, piractwo. Co mogę zrobić?

Właśnie wypuściłem aplikację, płatną aplikację, 4 dni później użytkownik powiedział mi, że w Chinach jest inna strona internetowa, która hostuje moją aplikację. Pobrałem go stamtąd i działa dobrze na moim urządzeniu!

Są tu posty mówiące, że ludzie mogą zmienić nazwę pakietu i ponownie opublikować apk. Ale to nie jest mój przypadek, pęknięta wersja nadal używa tej samej nazwy pakietu. Użyłem Android vending licencjonowania w programie, ale pęknięta wersja nie robi sprawdzenie licencji w ogóle. Używałem ProGuard do zaciemniać, ale to nie zniechęca hakerów.

Pytanie # 1: podpisałem plik apk zgodnie z instrukcjami Google. Ale mimo to zmodyfikowali kod i usunęli część kontroli licencji. Czy mylę się, że podpisywanie pliku apk ma na celu powstrzymanie ludzi przed manipulowaniem zawartością pliku?

Pytanie # 2: Dla Win32 .programy exe, używałem sumy kontrolnej, aby określić, czy plik został zmieniony. Tak to działa: kiedy .exe jest tworzony, użyłem narzędzia do Oblicz sumę zawartości bajtów pliku, a następnie wrzuć ją gdzieś w pliku, na przykład 4 bajty po wzorze tekstowym "mój podpis". Następnie w czasie wykonywania program otwiera .plik exe i oblicza sumę bajtów, porównuje ją z liczbą całkowitą po podpisie.

Czy ktoś próbował tego podejścia na plikach apk? Chcesz podzielić się swoimi doświadczeniami?

Author: wwyt, 2011-12-23

5 answers

Ostatecznie wbudowana ochrona aplikacji w Androidzie jest bardzo słaba. Oto twoje najlepsze praktyki.

1) tak rekomendacja Google do używania maskowania kodu, podpisanego kodu, a ich serwer weryfikacji licencji jest zaprojektowany, aby zapobiec kradzieży oprogramowania. Ich realizacja jest jednak wysoce błędna. Jedynym wymogiem, że APK musi uruchomić jest to, że być podpisane. Nieważne, kto to podpisał. Nie ma kontroli, czy twój podpis jest tym, którym jest podpisany. Więc pękać po prostu usuniesz sprawdzenie licencji i ponownie podpiszesz z dowolnym certyfikatem. Następnie użytkownik może załadować go na swój telefon, zaznaczając opcję "Zezwalaj na aplikacje nierynkowe".

Nie używaj licencji Google tak jak jest. Mocno zmodyfikuj kod. Dodaj kilka nowych parametrów do użycia podczas generowania kluczy. Przesuń kod wokół / Przebuduj go. Nie włączaj biblioteki licencji Google jako projektu bibliotecznego. Umieść to bezpośrednio w swoim kodzie. Stwórz kod tak wrzecionowaty i kludgy, jak to możliwe. Dodawanie funkcji, które nic nie robią, ale zmodyfikuj wartości w locie. Wykonaj później inne funkcje, które przekonwertują je z powrotem. Rozpowszechnij weryfikację licencji w całej bazie kodu.

Jeśli nie wykonasz tych kroków, kod może zostać złamany automatycznie. Wykonując te kroki, co najmniej cracker musi trochę czasu, aby ręcznie go złamać. To zajmie najwyżej kilka godzin. Ale kilka godzin to znacznie więcej czasu niż natychmiastowe pęknięcie standardowej warstwy licencjonowania Google. Są narzędzia cracker, które będą właściwie po prostu Automatycznie pobieraj nowo wydane Pakiety Androida i, jeśli używają standardowego licencjonowania Androida, crack je i prześlij pęknięte pliki APK do tego typu witryn internetowych. Czyniąc swoją implementację, a nie implementację waniliową, utrudniasz wszystko, z zaledwie kilkugodzinnym wysiłkiem.

2) jest to powszechna technika anty-crack. Możesz to zrobić na Androidzie, jeśli chcesz. Ale można go złamać w około 5 minut. Jeśli Google są tutoriale Jak to złamać specyficzna technika. Zasadniczo wystarczy poszukać wywołania CRC w kodzie i usunąć czek po powrocie CRC.

Android nie ma wrodzonego bezpieczeństwa. Możesz wykorzenić dowolny telefon i pobrać APK. Możesz łatwo włamać APK, aby włączyć debugowanie i po prostu krok kod, aby zobaczyć wszystkie klucze zapisane w kodzie. Więc w końcu nie spędziłbym nad tym zbyt wiele czasu. Nie można zabezpieczyć aplikacji na Androida. Ja bym po prostu zrobił zdroworozsądkowe rzeczy z powyższej listy i przeniósł on

3) jeśli jesteś naprawdę paranoikiem, możesz zaimplementować własne licencje na własnym serwerze licencyjnym. Jest to podejście, które wziąłem, ale nie tak dużo dla ochrony aplikacji przed kradzieżą, jak to było dać mi mechanizm do sprzedaży aplikacji bezpośrednio z mojej strony internetowej, więc użytkownicy, którzy nie mają Google Play może nadal kupować moje aplikacje.

 28
Author: w.donahue,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-12-08 01:36:21

Pasywne / Agresywne Scuttling

Zgadzam się z @metalideath, że zaciemnianie i cludging kodu licencyjnego nie jest niezawodne.

Oto łatwo ukryta technika, którą nazywam "scuttling", która działa w aplikacjach wdrożonych w Google i Amazon. Scuttling to wykrywanie piractwa przez aplikację. Co zrobić po wykryciu jest w dostawie twórcy aplikacji.

  • Agresywne Scuttling: Np. Zakończenie i / lub alarmy w pirackiej aplikacji. Komunikacja sieciowa niekoniecznie wymagane.
  • pasywne Scuttling: brak modyfikacji aplikacji. Np. Włącz śledzenie.
  • pasywne / agresywne Scuttling: subtelna modyfikacja aplikacji. Np. wyłącz po cichu kluczowe funkcje. Poprowadź Pirata do myślenia, że spaprał i do niepublikowania pirackiej aplikacji.

Jeśli Twoja aplikacja została zmieniona i/lub zainstalowana z dowolnego źródła innego niż Google lub Amazon, scuttle () zwraca true.

// Dont just copy/paste this code - that is what automated crackers look for - cludge it!
// No network communication is required at runtime.
// myPackageName should decode at runtime to "com.yourpackagename"
// google        should decode at runtime to "com.android.vending";
// amazon        should decode at runtime to "com.amazon.venezia"; 

public boolean scuttle(Context context, String myPackageName, String google, String amazon)
{
  //Scallywags renamed your app?

  if (context.getPackageName().compareTo(myPackageName != 0)
    return true; // BOOM!

  //Rogues relocated your app?

  String installer = context.getPackageManager().getInstallerPackageName(myPackageName);

  if (installer == null)
    return true; // BOOM!

  if (installer.compareTo(google) != 0 && installer.compareTo(amazon) != 0)
    return true; // BOOM!

  return false; 
}

Wyniki

Poniższy zrzut ekranu został zaczerpnięty z google analytics pokazujący piracką darmowa aplikacja Od playstore (com.android.vending), który został przeprojektowany z agresywnym scuttlem (wykryto i przerwano instalację w sklepie). Dropy śledzenia nie-playstore (nie-set). Śledzenie nie było wymagane, ale włączone dla tych pomiarów.

Tutaj wpisz opis obrazka

Dyskusja

Uwaga podpisywanie usług odgrywa rolę w scuttingu: menedżer pakietów wymusza unikalne nazwy pakietów z unikalnymi podpisami.

Przedstawia pytanie, co zrobić, gdy aplikacja jest scuttled (pirat wykryty przez aplikację). Piractwo jest formą wiralizacji (niekontrolowanej dystrybucji) Twojej aplikacji. Jest już wykrywalny, umożliwiając back-end śledzenia analityki. Scuttling pozwala twórcy aplikacji dostosować odpowiedź front-end z lub bez śledzenia.

Agresywne scuttling jest oczywiście wykrywalne przez piratów (BOOM!). Zachęca to do dalszego pękania. Pasywne scuttling jest znacznie mniej oczywiste, ale może obejmować śledzenie.

Piractwa nie da się uniknąć, ale jest przewidywalny, wykrywalny i możliwy do śledzenia. [3]}śledzenie może stwarzać piratom problemy nie do pokonania, ale także przedstawia własne problemy etyczne.

Pasywne / agresywne scuttling nie wymagające komunikacji sieciowej, jak opisano powyżej, jest prawdopodobnie najlepszym rozwiązaniem. Jest łatwo ukryty (w przeciwieństwie do licencjonowania) i może być dostosowany do tego, aby był jak najbardziej nieoczywisty.

 10
Author: Dominic Cerisano,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-07-08 22:07:49

Skontaktowałem się z Google i zostałem skierowany na bardzo przydatną rozmowę o tym, jak zmienić podstawową licencję LVL. Sprawdź ten wykład z Google I/O 2011.

 1
Author: user2386616,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-06-03 21:19:57

Najlepszą rzeczą do zrobienia jest nie martwić się o to. Ludzie piraci w Chinach nie są Twoimi klientami i nigdy nie będą. Gdyby nie była dostępna piracka wersja, nadal nie zapłaciliby ci za kopię, z dużym prawdopodobieństwem. Poza tym, jeśli Twoja aplikacja stanie się popularna, i tak zostanie sklonowana, tak jak aplikacje na iOS. Wdrożone już systemy zabezpieczeń są wszystkim, czego potrzebujesz, ponieważ uniemożliwiają większości użytkowników piractwo aplikacji.

Próba udowodnienia piractwa aplikacji będzie tylko zaszkodzić bazie kodu i utrudnić jej utrzymanie, a także potencjalnie wprowadzić problemy dla prawdziwych klientów płacących. Zamiast tego skoncentruj się na promowaniu aplikacji i ułatwianiu klientom płacenia za nią i korzystania z niej. Reagując na prośby o funkcje i raporty o błędach, dodajesz wartość, za którą ludzie są gotowi zapłacić, zamiast szukać jakiejś podejrzanej pękniętej kopii z Chińskiej strony internetowej, która prawdopodobnie i tak jest trojanem.

Na koniec zgłoś pirackie kopie sprzedawcom antywirusów. Dostarczyć kopie APK. Dodają podpisy do swoich baz danych, aby zostały oznaczone jako potencjalnie niebezpieczne.

 1
Author: ,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-02-11 13:26:06

Z analizy warunków Google market wynika, że nie można sprzedawać aplikacji bezpośrednio z własnej witryny, ponieważ narusza ona Warunki Google app market. Myślę, że wdrożenie niestandardowych zabezpieczeń w kodzie jest najlepszym sposobem. Standardowe metody po prostu nie są skuteczne, ponieważ kod można łatwo zdemontować

 0
Author: user1157108,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-02-04 00:37:53