Ответ 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-кодов и защиту кода С++ для достижения эффектов отладки и декомпиляции.
Я изначально предложил вам использовать этот последний метод, чтобы он мог сэкономить вам больше времени. Основываясь на моем опыте, было очень просто работать, и это не займет много времени.