Какие существуют инструменты, которые предлагают защиту apk для Android (от реверсирования и переупаковки)?

Похоже, что одно из успешных приложений моей компании было переупаковано как torjan и распространено на сторонних рынках (за пределами Google Play). Я ищу надежное решение, которое защитит наши приложения от таких проблем в будущем.

До сих пор я видел:

Но ни один из них не предлагает комплексного решения.

Любые идеи?


person Zvi    schedule 18.08.2012    source источник
comment
То, что вы хотите, невозможно по определению на любой ОС. Любой может взять любое приложение, перепроектировать его, добавить вредоносное ПО и распространить результат. Обфускация (например, ProGuard для приложений Android) может замедлить работу, как и различные другие приемы (например, develop-online.net/blog/349/). Но все, что они будут делать, — это замедлять работу, уменьшая вероятность того, что кто-то полностью удовлетворит свое желание взломать ваше приложение. Ничто не может остановить это сразу.   -  person CommonsWare    schedule 18.08.2012
comment
@CommonsWare - Конечно, нет решения, которое бы защищало 100% случаев. Проблема в том, что сегодня чрезвычайно просто взять приложение, изменить часть кода и переупаковать его как настоящее приложение. На ПК вы можете найти множество готовых продуктов, которые значительно усложняют процесс. Я ищу решение, которое будет хорошо работать против 80% взломщиков, пытающихся изменить мое приложение. Что-то похожее на броненосец для Android   -  person Zvi    schedule 18.08.2012
comment
Любое комплексное решение является магнитом для тех, кто может (и будет) комплексно ломать его. Было несколько кряков для различных версий Armadillo на той самой странице, на которую вы ссылались. Поиск в Интернете показывает различные взломы SoftwarePassport (очевидно, новое название Armadillo) и даже бесплатные загрузки самого SoftwarePassport — не совсем свидетельство его защитных способностей. Это одна из областей, в которой, если вы хотите, чтобы все было сделано правильно (или настолько правильно, насколько это возможно), вы должны сделать это самостоятельно, чтобы для вашего решения не существовало готового решения.   -  person CommonsWare    schedule 18.08.2012
comment
@CommonsWare - я не согласен. Не знаю, насколько хорошо вы знаете это пространство (пакеры, протекторы и реверс), но взломать последние версии броненосца было крайне сложно. Обычно можно было найти кряки для более ранних версий, но найти кряк для новейшей было непросто. В большинстве случаев люди могли создать кряк для приложения вручную, но удалить броненосец автоматически было намного сложнее. В мобильной сфере, если бы приложение стоило 0,99 доллара, взломщики могли бы не счесть его столь рентабельным.   -  person Zvi    schedule 18.08.2012
comment
Создание собственного решения обходится дорого, если вы хотите создать что-то, что трудно взломать. Если вы не готовы вкладывать большие средства и/или если у вас нет команды, вы, вероятно, создадите очень слабого защитника.   -  person Zvi    schedule 18.08.2012
comment
Наш бизнес разработал около 90 приложений, все они используют quixxi. quixxi.com   -  person Giuseppe    schedule 04.05.2016


Ответы (2)


Мне кажется, вы смотрите на это с неправильной точки зрения. Не уверен в вашем конкретном случае, но обычно переупакованные приложения не являются «обратно спроектированными». т. е. специалист по вредоносным программам мало заботится о внутренностях вашего приложения. Троян может быть добавлен просто в точку входа вашего приложения, и в этом случае троян будет выполняться, а затем продолжит выполнение вашего приложения. В этом случае обфускация ничего не даст, кроме как замедлит ваше приложение.

person sharjeel    schedule 17.12.2012
comment
Я не ищу хорошего запутывания. Я ищу протектор — программное обеспечение, которое изменяет исходные приложения и добавляет уровень защиты, который предотвращает (до определенной степени) модификации и переупаковку. - person Zvi; 18.02.2013

По сути, существует 5 способов защитить ваш APK от взлома/реверсии/переупаковки:

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

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

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

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

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

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

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

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

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

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

APK Protect (http://www.apkprotect.com/) — веб-сайт для онлайн-шифрования APK. Он обеспечивает защиту кодов Java и C++ для достижения эффекта от отладки и декомпиляции. Процесс эксплуатации прост и удобен.

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

person user2563366    schedule 09.07.2013
comment
Вы можете просто указать ссылку на источник: stackoverflow.com/a/18052078/1180898 - person Amir Uval; 26.11.2013
comment
должен указывать прямо на ссылку, не копируйте ответ и не вставляйте его как есть - person Amit Hooda; 08.09.2014