Android - zabezpieczenie aplikacji sprzedawanej poza Google Play

0

Siema wszystkim,
Zastanawiam się w jaki sposób można zabezpieczyć aplikację pisaną w Javie. Najbardziej zależałoby mi, aby dana aplikacja działała jedynie na danym urządzeniu. Użytkownik musiałby po instalacji wpisać jakiś kod, albo program zacząłby działać dopiero po weryfikacji przez internet.
Nie mam doświadczenia w zabezpieczaniu aplikacji. Java dodatkowo to utrudnia. Nie chcę tworzyć nic zbyt skomplikowanego, bo jeśli ktoś zechce, to i tak jest to kwestia czasu zanim obejdzie to zabezpieczenie. Może znacie jakiś w miarę łatwy sposób weryfikacji?

1

Z Javą jest ten problem, że jest kompilowana domyślnie do formatu pseudokodu dla JVM.

Jak większość takich rozwiązań (np. .NET, VB, ReFox) - doczekała wielu narzędzi do dekompilacji i odbezpieczania.

AndroChef
http://www.neshkov.com/ac_decompiler.html

JEB
http://www.android-decompiler.com/

JD-GUI (musisz najpierw skonwertować projekt do JAR np. https://code.google.com/p/dex2jar/)
http://jd.benow.ca/

Ostatnio widziałem na jakimś forum crackerskim unpakery do wszystkich popularnch Androidowych zabezpieczeń dla aplikacji opartych o Java.

Mówiąc krótko, musiałbyś przetestować te narzędzia pod kątem narzędzi odbezpieczających i dopiero z tego co "przetrwa" wybrać jakiś interesujący tool. Więc jak już znajdziesz jakiś tool to poszukaj jednocześnie w google np. "xxx unpacker" lub "xxx deobfuscator".

Jednak to tylko Java i mimo obfuscatorów, szyfrowania/deszyfrowania klas runtime przez customowe wersje JVM, przez jakieś drivery, ciężko jest coś solidnego znaleźć.

0

Dzięki wielkie za odpowiedź,
Chodzi mi tutaj także o zabezpieczenie aplikacji spoza google play, czyli coś w rodzaju licencji bez której nie zadziała. Oczywiście sprawdzenie musiałoby odbywać się troszkę inaczej niż za pomocą jednej instrukcji warunkowej, bo przy javie jest to zbyt proste to usunięcia. Spotkał się ktoś z takim rozwiązaniem?

0

Podałeś mało szczegółów, ale nie widzę problemu, żeby coś takiego zrobić. Jeżeli aplikacja ma mieć aktywne funkcje po podaniu jakiegoś kodu, to najlepiej stworzyć back-end, który zajmie się autoryzacją i po autoryzacji pozwoli na korzystanie z aplikacji lub pobranie odpowiednich danych. Żeby to osiągnąć aplikacja przynajmniej raz będzie musiała się połączyć z internetem. Oczywiście należy pamiętać o tym, żeby aplikacja nie miała hardkodowanych żadnych haseł, kluczy, etc. Wtedy nawet, jak ktoś ją zdekompiluje i znajdzie adres serwera oraz end-point, to i tak bez znajomości wspomnianego kodu nie będzie mógł się autoryzować. Jest wiele metod autoryzacji. W przypadku aplikacji mobilnych, popularna jest metoda autoryzacji poprzez token, ale trzeba wtedy pamiętać o tym, żeby szyfrować połączenie.

0
wiciu napisał(a):

Podałeś mało szczegółów, ale nie widzę problemu, żeby coś takiego zrobić. Jeżeli aplikacja ma mieć aktywne funkcje po podaniu jakiegoś kodu, to najlepiej stworzyć back-end, który zajmie się autoryzacją i po autoryzacji pozwoli na korzystanie z aplikacji lub pobranie odpowiednich danych. Żeby to osiągnąć aplikacja przynajmniej raz będzie musiała się połączyć z internetem. Oczywiście należy pamiętać o tym, żeby aplikacja nie miała hardkodowanych żadnych haseł, kluczy, etc. Wtedy nawet, jak ktoś ją zdekompiluje i znajdzie adres serwera oraz end-point, to i tak bez znajomości wspomnianego kodu nie będzie mógł się autoryzować. Jest wiele metod autoryzacji. W przypadku aplikacji mobilnych, popularna jest metoda autoryzacji poprzez token, ale trzeba wtedy pamiętać o tym, żeby szyfrować połączenie.

Bardzo się cieszymy, że znasz dużo mądrych słów. Z pewnością jesteś szczęśliwym człowiekiem. Pomocy w tym zero. Dziękuję.

1 użytkowników online, w tym zalogowanych: 0, gości: 1