Подтвердить что ты не робот

Как сделать apk Secure. Защита от декомпиляции

Привет Я разрабатываю приложение для компании, и наше приложение содержит базу данных sqlite, которая содержит личную информацию, и мы хотим ее защитить. Как мы можем защитить его. Потому что apk легко декомпилируется полностью, потому что я сделал это сам. Итак, теперь вопрос заключается в том, как защитить apk? а также как защитить мою базу данных, находящуюся в телефоне после установки приложения на телефоне.

4b9b3361

Ответ 1

В принципе, существует 5 способов защитить APK от взлома/реверсирования/переупаковки:

1. Изолировать программу Java

Самый простой способ - сделать пользователей неспособными получить доступ к программе Java Class. Это самый фундаментальный способ, и он имеет множество конкретных способов достижения этого. Например, разработчики могут размещать ключевой Java-класс на сервере, клиенты приобретают сервисы путем доступа к соответствующим интерфейсам сервера, а не напрямую к файлу класса. Таким образом, хакеры не могут декомпилировать файлы Class. В настоящее время все больше и больше стандартов и протоколов предоставляются через интерфейсы, такие как HTTP, веб-сервис, RPC и т.д. Но для этой защиты не подходит множество приложений. Например, Java-программы в автономных программах не могут изолировать.

2. Шифровать файлы классов

Для предотвращения декомпиляции файлов классов многие разработчики будут шифровать некоторые ключевые файлы классов, такие как регистрационный номер, управление серийными номерами и другие связанные классы. Прежде чем использовать эти зашифрованные классы, программе необходимо сначала дешифровать эти классы, а затем загрузить эти классы в JVM. Эти классы могут быть дешифрованы с помощью аппаратного обеспечения или программного обеспечения.

Разработчики часто загружают криптографические классы через собственный класс ClassLoader (апплет не поддерживает настраиваемый ClassLoader из-за безопасности). Пользовательский ClassLoader сначала найдет криптографические классы, а затем расшифрует их. И, наконец, загрузка расшифрованных классов в JVM. Customed ClassLoader - очень важный класс в этом методе защиты. Поскольку он сам не зашифрован, он может быть первой целью хакера. Если соответствующий ключ и алгоритм дешифрования были преодолены, то зашифрованные классы могут быть легко дешифрованы.

3. Преобразование в исходные коды

Преобразование программы в собственные коды также является эффективным способом предотвращения декомпиляции. Поскольку нативные коды часто трудно декомпилировать. Разработчики могут конвертировать все приложение в собственные коды или могут также конвертировать только ключевые модули. Если вы просто конвертируете ключевую часть модулей, ей потребуется технология JNI для вызова, когда Java-программы используют эти модули. Он отказался от межплатформенной функции Java при использовании этого mothod для защиты программ Java. Для разных платформ нам необходимо поддерживать разные версии собственных кодов, что увеличит объем поддержки программного обеспечения и обслуживания. Но для некоторых ключевых модулей иногда это решение часто необходимо. Чтобы гарантировать, что эти внутренние коды не будут изменены или заменены, разработчикам часто необходимо подписать эти коды в цифровой форме. Прежде чем использовать эти собственные коды, разработчикам часто требуется аутентифицировать эти локальные коды, чтобы гарантировать, что эти коды не были изменены хакерами. Если проверка подписи передается, разработчики могут вызывать соответствующие методы JNI.

4. Обфускация кода

Обфускация кода заключается в реорганизации и обработке файла класса, заставляя обработанные коды выполнять ту же функцию (семантику) с необработанными кодами. Но сфабрикованные коды трудно декомпилировать, т.е. Декомпилированные коды очень трудно понять, поэтому декомпилировать сотрудников сложно понять истинную семантику. Теоретически, если хакеры имеют достаточно времени, запутанные коды все еще могут быть взломаны. Даже некоторые люди развивают де-обфускационный инструмент. Но из реальной ситуации, поскольку диверсифицированное развитие обфускации, зрелая теория обфускации, запутанные коды Java, вполне могут предотвратить декомпиляцию.

5. Онлайн-шифрование

APK Protect был онлайн-сайтом шифрования для APK, но активность, по-видимому, была прекращена с 2013 года или около того. Он обеспечивал защиту Java-кодов и защиту кода С++ для достижения эффектов отладки и декомпиляции.

Я изначально предложил вам использовать этот последний метод, чтобы он мог сэкономить вам больше времени. Основываясь на моем опыте, было очень просто работать, и это не займет много времени.

Ответ 2

С Jellybean это стало теперь возможностью.

$ openssl enc -aes-128-cbc -K 000102030405060708090A0B0C0D0E0F 
-iv 000102030405060708090A0B0C0D0E0F -in my-app.apk -out my-app-enc.apk

$ adb install --algo 'AES/CBC/PKCS5Padding' --key 000102030405060708090A0B0C0D0E0F 
--iv 000102030405060708090A0B0C0D0E0F my-app-enc.apk
        pkg: /data/local/tmp/my-app-enc.apk
Success

Пожалуйста, прочитайте следующее сообщение в блоге для дальнейшего подробнее

Ответ 3

Если это секретная информация, которая не должна попадать в руки ваших пользователей, вы не можете ее защитить. В принципе невозможно помещать информацию на устройство (код или данные) и иметь доступ к нему для вашего приложения, но не позволять кому-то с устройством иметь доступ к этой информации.

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

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

Ответ 5

Вы можете прочитать мой пост по адресу: http://www.androidpit.com/en/android/forum/thread/567093/An-Analysis-of-Android-APK-Protect-Shell-APKProtect. APK, добавленный с защитой оболочки APK Protect, кажется, не декомпилируется. Я имею в виду, что метод шифрования очень продвинут. Даже мастер-хакеру требуется долгое время, чтобы взломать его.

Ответ 6

Вы можете попробовать "Анти декомпилятор (Android)"

https://play.google.com/store/apps/details?id=com.tth.AntilDecompilerTrial

Он делает что-то, чего нет у Proguard:

  • Скрыть все значения const (string, character), вы никогда не увидите четкий текст, например "мой ключ", "мой val"... в вашем файле apk.
  • Обнулить имя файла, на которое ссылается в AndroidManifest.xml
  • Добавить поддельный код в исходный код. Событие, которое нравится мощным декомпиляторам: dex2jar, jd-gui,... не может точно отменить ваш файл apk. Большинство функций будут отображаться с комментарием "Ошибка".

=====

  • После преобразования, если вы дадите кому-то свой исходный проект, читать и понимать почти невозможно.
  • Это решение не исключает Proguard, вы можете объединить их. (функция, поле Obfuscation Proguard лучше, чем функции Obfuscation этого решения)

Ответ 7

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

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