Czy naprawdę nie można chronić aplikacji na Androida przed inżynierią odwrotną?

Jak wiemy, aplikacje na Androida są napisane w Javie. W Javie, bez względu na to, co robisz , nie jest możliwe zabezpieczenie skompilowanego kodu przed dekompilacją lub inżynierią wsteczną, ponieważ Pytanie o przepełnienie stosuJak zablokować skompilowane klasy Javy, aby zapobiec dekompilacji? sugeruje.

Jak można chronić aplikację, która zawiera algorytmiczne tajemnice handlowe przed odwrotną inżynierią?

Przez "Jak" mam na myśli nie tylko techniki programistyczne, ale także inne kreatywne podejścia.

Author: Community, 2010-12-02

10 answers

Pierwszym przystankiem dla mnie byłoby zoptymalizowanie i zaciemnienie kodu za pomocą ProGuard , który jest znany z pracy z kodem bajtowym skierowanym do maszyny wirtualnej Androida Dalvik (poprzez Dex). Jest to naprawdę świetne narzędzie i może zwiększyć trudność "odwrócenia" kodu podczas zmniejszania jego śladu (w niektórych przypadkach dramatycznie: mój ostatni aplet spadł z około 600 KB do około 50 KB).

Jak mówią inni, nigdy nie uzyskasz 100% bezpieczeństwa swojego algorytmu szczegóły podczas jego realizacji są przekazywane do klientów. W tym celu musisz zachować kod na swoich serwerach. Próby zbliżenia 100% bezpieczeństwa kodu klienta skutecznie wynoszą DRM i mogą sprawić, że kod klienta stanie się delikatny w obliczu awarii sieci i po prostu ogólnie frustrują (legalnych) użytkowników.

Blog programistów Androida ma kilka przydatnych Artykuły na temat "odpornych na manipulacje" aplikacji na Androida (i zalecają użycie ProGuard jako część podejścia ogólnego).

W odniesieniu do podejść "kreatywnych": niektórzy programiści stosują techniki wykrywania debugerów, aby zapobiec analizie czasu wykonywania i połączyć to z szyfrowaniem części kodu binarnego (aby powstrzymać analizę statyczną), ale szczerze mówiąc, wystarczająco zdeterminowany atakujący może obejść to, podczas gdy może powodować uzasadnioną frustrację użytkowników, jak pokazano w artykule Windows KB Gry: Komunikat o błędzie: Debugger został Wykryte: rozładuj Debugger i spróbuj ponownie. Z tego powodu program DVD mojej dziewczyny "Naucz się jeździć" nie będzie działał pod VirtualBox, ale oczywiście wini Linuksa!

Openrce i artykuł Wikipedii na temat zaciemnionego kodu może być dobrym punktem wyjścia, jeśli chcesz przyjrzeć się temu dalej. Ale ostrzegamy, możesz stracić więcej przez nadgorliwe stosowanie tych technik frustrujących użytkowników niż przez utratę tajemnic handlowych przez inżynieria odwrotna. Jak mówi Anton s[2], Być może najbardziej "kreatywne" podejście polega na ulepszaniu modelu biznesowego, a nie technologii.

Najnowsza aktualizacja SDK Androida 6 grudnia 2010 (zbiegająca się z wydaniem Androida 2.3 Gingerbread):

zintegrowana obsługa programu ProGuard: program ProGuard jest teraz pakowany z narzędziami SDK. Deweloperzy mogą teraz zaciemniać swój kod jako zintegrowaną część kompilacji wydania.

 70
Author: willjcroz,
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-05-23 12:09:20

Jeśli jest taka możliwość: zdalne wywołanie procedury do dobrze chronionego serwera(serwer ma kod, który chcesz chronić).

 13
Author: jcomeau_ictx,
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-02-18 21:39:59

Zrób to tak tanio i nie buduj swojego modelu biznesowego na podstawie tajemnic, które są wykonywane po stronie klienta. Innymi słowy, nie dziel się swoimi sekretami.

 6
Author: Anton S,
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-02-18 21:39:16

Nie jest możliwe zabezpieczenie kodu po stronie klienta przed odwrotną inżynierią. Możesz po prostu użyć mniej lub bardziej efektywnych sposobów zaciemniania kodu. A zoptymalizowany asembler x86 jest całkiem dobrym zaciemnieniem.

Więc jeśli masz algorytmiczne tajemnice umieść je po stronie serwera.

 5
Author: CodesInChaos,
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
2010-12-02 15:35:54

Jak zablokować skompilowane klasy Javy, aby zapobiec dekompilacji

Każdy plan może zostać pokonany przez kogoś z odpowiednimi umiejętnościami, czasem i motywacją.

(nawiasem mówiąc, dotyczy to również oprogramowania skompilowanego do wersji binarnej. Jedyną różnicą jest ilość wysiłku związanego z dekompilacją.)

Moje pytanie brzmi, jak można przejść o ochronę aplikacji, która zawiera algorytmiczne tajemnice handlowe z inżynieria odwrotna?

Po prostu nie instaluj aplikacji na telefonie użytkownika. Lub (bardziej użytecznie) Uruchom kod zawierający tajemnice handlowe na zdalnym (odpowiednio zabezpieczonym) serwerze.

 3
Author: Stephen C,
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
2010-12-02 15:36:15

Nie możesz całkowicie chronić swojej aplikacji, ponieważ zawsze znajdzie się ktoś, kto ją złamie...

Jednak możesz im to utrudnić, czyniąc swoją aplikację darmową, a przynajmniej tanią, aby ludzie nie byli zmartwieni.

Alternatywa, staraj się zachować aplikację na Androida "głupią", jak zachować całą tajemniczą logikę biznesową na serwerze zaplecza, i po prostu Wyświetlaj dane aplikacji za pomocą jakiejś formy ujawnionej usługi.

 2
Author: Jimmy,
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
2010-12-02 15:39:39

Bez względu na to, co robisz, może przynajmniej sprawisz, że dekompilacja będzie bardzo trudna, ale: jeśli coś zostanie wykonane/obliczone w programie, informacja o algorytmie musi tam być i zawsze będzie możliwość dowiedzieć się, jak to uzyskać (wystarczająca umiejętność i motywacja po stronie przeciwników zakłada). Zawsze.

 1
Author: oezi,
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-02-18 21:41:26

Mam swój algorytm na serwerze i wywołuję tę usługę z aplikacji na smartfona. Sprawca może odtworzyć moją aplikację na smartfona, aby zobaczyć mój protokół z moim serwerem. Mogę chronić mój algorytm, ale nie mogę chronić przed nieautoryzowanym użyciem mojej usługi. Muszę zaakceptować tę rzeczywistość bez rozwiązania. Muszę być zadowolony, że dopóki zarabiam pieniądze z własnej usługi, to muszę żyć z potencjałem innych wysysających mój serwis.

 0
Author: David,
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
2011-10-06 21:02:18

Chcesz kreatywnego podejścia, oto jeden.

Jaki jest główny program na telefonach, które nie zostały dzisiaj dekompilowane? Radio firmwares. Dlaczego? Nie działa na chipsecie ARM telefonu, ale na oddzielnym Qualcomm Hexagon, który jest coraz bardziej obecny w smartfonach. To nie x86, to nie ARM, używa zastrzeżonej Architektury i instrukcji Qualcomm.

  • Dekompilacja Javy jest łatwa.

  • Dekompilacja ramion jest trudniejsza (Hex-Rays Decompiler zacznij od 1129 USD... a mieszanie kodu kciuka i standardowego kodu ARM w binariach to ból) = > możesz spróbować skompilować z Androidem NDK.

  • Obecnie nie ma Dekompilatorów Hexagon! A specyfikacje QDSP nie są publicznie dostępne, nawet pirackie wersje.

Pytanie brzmi, czy niezależny dostawca oprogramowania może używać firmware Hexagon zawartego w telefonach z rynku masowego? Wydaje się, że jest to kierunek Qualcomm bierze. Sprawdź ich stronę internetową i produkty SnapDragon.

NB: Nie jestem zwolennikiem Qualcommu ani zwolennikiem zamkniętego źródła. Ale ten wątek przemawia do tego rodzaju rozwiązania.

 0
Author: KrisWebDev,
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-04-27 18:54:09

Nie da się w 100% zabezpieczyć kodu Androida przed odwrotną inżynierią. Jeśli chcesz zabezpieczyć jakiś klucz, możesz skorzystać z pomocy serwera, który daje zaszyfrowany klucz podczas połączenia z serwisem internetowym i użyć tego klucza w kodzie.

 0
Author: M.Noman,
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-09-05 12:24:24