Предотвращение декомпиляции android apk

Я создаю приложение для android и ios, и я уже знаю, что теоретически можно декомпилировать приложение для Android. Приложение содержит конфиденциальную информацию, которую я не хочу, чтобы пользователи имели доступ к интерфейсу приложения с веб-сервером. Если пользователь получил доступ к некоторой информации, доступной в исходном коде, они могут потенциально спамить мой веб-сервер с запросами.

Есть ли способ аутентифицировать соединение между приложением и сервером, предполагая, что исходный код доступен, или есть какой-либо способ обфускации моего кода, чтобы злоумышленник не мог спамить мой веб-сервер.

Thankss

Ответы

Ответ 1

[ОБНОВЛЕНИЕ]

**

Когда вы создаете свое приложение, используя версию плагина Android gradle> 3.4.0, плагин выбирает R8 для оптимизации и обфускации кода. Теперь правила можно настроить в файлах proguard-rules.pro или proguard-app.conf. правила, указывающие, что исключить из запутывания, аналогичны тем, которые использовались ранее в proguard.cfg.

Вы можете импортировать ваши файлы proguard в ваш build.gradle, например,

buildTypes{
  ...
  release{
      proguardFiles getDefaultProguardFile(
                'proguard-android-optimize.txt'),
                'proguard-rules.pro'
  }
}

R8 подхватывает все существующие файлы правил proguard, если они включены в build.gradle. Вы также можете настроить, какие кусочки нужно скрыть для разных вкусов продукта, которые у вас могут быть.

**

[СТАРЫЙ, НО СООТВЕТСТВУЮЩИЙ ИНФОРМАЦИИ]

Proguard - это инструмент, который поможет вам запутать ваш код. Это входит в ваши инструменты Android, и вам просто нужно активировать его. Эта ссылка и эта помогут в дальнейшем.

Конфигурации Proguard по умолчанию (в proguard.cfg) будет достаточно, чтобы достаточно запутать ваш код. Однако, возможно, вы захотите настроить конфигурацию Proguard, когда у вас есть методы/классы, к которым осуществляется динамический доступ.

  1. Например, для доступа к классам/методам с помощью Reflection вам потребуется код, который должен быть целым. Иногда вы можете столкнуться с ClassNotFoundException, если proguard его запутывает.

  2. Если у вас есть классы, к которым обращаются в файлах AndroidManifest/Layout, вы должны помешать proguard их запутать.

Это можно сделать, добавив

-keep public class <MyPackage.MyClass> 

на ваш proguard.cfg.

**

В то время как Proguard затрудняет статический анализ, DexGuard защищает как от статического, так и от динамического анализа. DexGuard специально для приложений для Android и доступен только для коммерческого использования, в то время как Proguard имеет открытый исходный код и предназначен для любой обфускации/оптимизации java-байт-кода.

Ответ 2

Вы не можете предотвратить декомпиляцию android apk, вы можете просто увеличить сложность декомпиляции, proguard - лучший вариант.

Ответ 3

DexGuard обеспечивает еще большую безопасность, чем ProGuard, но он НЕ является бесплатным: https://www.saikoa.com/dexguard

DexGuard может даже запутывать строковые константы.