Як захистити свій додаток для android від реверсу і дебага
- Як вкрасти додаток для Android?
- Береш і крадеш.
Отже, відмовляємося від Pro-версії і починаємо боротьбу.
Приховуємо і заплутуємо код
Кращий спосіб захисту коду програми від реверсу - це обфускація. іншими словами - заплутування байт-коду так, щоб реверсеру було нестерпно важко в ньому розібратися. Існує кілька інструментів, здатних це зробити. Найбільш простий, але все ж ефективний є в складі Android Studio. Це ProGuard.
Для його активації достатньо додати в розділ android → buildTypes → release файлу build.gradle рядок minifyEnabled true:
Після цього Android Studio почне пропускати всі «релізний» збірки через ProGuard. В результаті додаток стане компактніше (завдяки видаленню невикористаного коду), а також отримає певний рівень захисту від реверсу. «Деякий» в тому сенсі, що ProGuard замінить імена всіх внутрішніх класів, методів і полів на одне-дволітерні поєднання. Це дійсно істотно ускладнить розуміння декомпілювати / дизасемблювати коду.

Наступний крок - шифрування рядків. Це особливо корисно в тому випадку, якщо всередині програми ти зберігаєш якісь сенситивні дані: ідентифікатори, ключі, REST API endpoints. Все це допоможе зломщику зорієнтуватися в твоєму коді або виокремити з нього важливу інформацію.
Зашифрувати рядки можна різними способами, наприклад використовуючи інструменти Stringer або DexGuard. Перевага: повністю автоматизована модифікація вже наявного коду з метою впровадження шифрування рядків. Недолік: ціна, яка доступна компаніям, але занадто висока для стороннього виробника.
Тому ми спробуємо обійтися своїми силами. У найпростішому випадку шифрування рядків засобами Java виконується так:
А розшифровка - так:
Для генерації ключа досить одного рядка:
В результаті зломщик просто не зможе побачити зашифровані рядки, декомпілювати додаток. Але, звичайно ж, зможе написати найпростіший дешифратор, заснований на декомпільовану коді твого шифратора. Іншими словами, це не панацея, але ще один рівень складності шифрування рядків додасть.
Можна піти ще далі і скористатися одним з інструментів комплексного захисту Android-додатків, наприклад AppSolid. Коштує воно знову ж дорого, але дозволяє зашифрувати всі додаток цілком. Це дійсно здатне відлякати багатьох реверсеров, однак є ряд інструментів, в тому числі платний Java-декомпілятор JEB. який вміє знімати такий захист в автоматичному режимі.
Також ти можеш спробувати розбити свій додаток на безліч невеликих модулів, як я вже писав в статті Пишемо модульні додатки для Android. Сам по собі це не метод захисту, і він майже не ускладнить роботу реверсера. Але зате обламає різні автоматизовані системи кракінга додатків. Вони просто не зможуть зрозуміти, де шукати знаходиться в модулі код.