Действительно ли невозможно защитить приложения Android от обратного инжиниринга? - PullRequest
58 голосов
/ 02 декабря 2010

Как мы знаем, приложения для Android написаны на Java.В Java, независимо от того, что вы делаете , невозможно защитить скомпилированный код от декомпиляции или обратного инжиниринга, как вопрос переполнения стека Как заблокировать скомпилированные классы Java для предотвращения декомпиляции? предлагает.

Как можно защитить приложение, содержащее алгоритмические торговые секреты, от обратного инжиниринга?

Под словом «как» я подразумеваю не только программные методы, но ии другие подходящие подходы.

Ответы [ 10 ]

72 голосов
/ 02 декабря 2010

Первая остановка для меня - оптимизировать и запутать код с помощью ProGuard , который, как известно, работает с байтовым кодом, предназначенным для виртуальной машины Android Dalvik (через Dex). Это действительно отличный инструмент, и он может увеличить сложность «перевернуть» ваш код, уменьшая при этом его площадь (в некоторых случаях резко: мой недавний апплет уменьшился с примерно 600 КБ до примерно 50 КБ).

Как говорят другие, вы никогда не получите 100% -ную безопасность деталей вашего алгоритма, пока его реализация распространяется среди клиентов. Для этого вам нужно хранить код только на своих серверах. Попытки обеспечить почти 100% -ную защиту клиентского кода фактически составляют DRM и могут сделать ваш клиентский код хрупким перед лицом перебоев в работе сети и просто в целом расстроить (законных) пользователей.

В блоге разработчиков Android есть полезных статей по вопросу о «защищенных от несанкционированного доступа» приложениях Android (и они рекомендуют использовать ProGuard как часть общего подхода).

Что касается «креативных» подходов: некоторые разработчики используют методы обнаружения отладчика , чтобы предотвратить анализ во время выполнения и объединить это с шифрованием частей двоичного кода (для предотвращения статического анализа), но, честно говоря, достаточно решительный злоумышленник может обойти , в то время как это может вызвать законное недовольство пользователя, как показано в статье Windows KB Игры: сообщение об ошибке: Обнаружен отладчик: выгрузите отладчик и Попробуйте еще раз . По этой причине DVD-диск моей подруги «Учись водить» не будет работать под VirtualBox , но она, конечно, винит Linux!

OpenRCE и Статья Википедии о запутанном коде может быть хорошей отправной точкой, если вы захотите разобраться в этом подробнее. Но будьте осторожны, вы можете потерять больше из-за усердного использования этих методов, расстраивающих ваших пользователей, чем вы потеряли бы коммерческие секреты из-за обратного инжиниринга. Как Антон С. говорит , возможно, самый «творческий» подход заключается в настройке бизнес-модели, а не технологии.

Последнее обновление Android SDK от 6 декабря 2010 г. (совпадает с выпуском Android 2.3 Gingerbread):

Интегрированная поддержка ProGuard: ProGuard теперь поставляется с SDK Tools. Разработчики теперь могут запутывать свой код как интегрированную часть сборки релиза.

14 голосов
/ 02 декабря 2010

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

7 голосов
/ 02 декабря 2010

Сделайте это настолько дешевым, чтобы не беспокоиться и не строить свою бизнес-модель на основе секретов, которые выполняются на стороне клиента.Другими словами, не делитесь своими секретами.

5 голосов
/ 02 декабря 2010

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

Так что, если у вас есть алгоритмические секреты, разместите их на стороне сервера.

3 голосов
/ 02 декабря 2010

Как заблокировать скомпилированные Java-классы для предотвращения декомпиляции

Ты не можешь. Любая схема может быть побеждена человеком с достаточными навыками, временем и мотивацией.

(Между прочим, это также относится к программному обеспечению, скомпилированному в двоичный файл. Единственная разница заключается в объеме усилий, связанных с декомпиляцией.)

У меня вопрос: как защитить приложение, содержащее алгоритмические торговые секреты, от обратного инжиниринга?

Просто не устанавливайте приложение на телефон пользователя. Или (что более полезно), запустите код, содержащий торговые секреты, на удаленном (должным образом защищенном) сервере.

2 голосов
/ 02 декабря 2010

Вы не можете полностью защитить свое приложение, так как всегда найдется кто-то, кто взломает его ...

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

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

1 голос
/ 02 декабря 2010

Независимо от того, что вы делаете, может быть, по крайней мере, вы можете усложнить декомпиляцию, но: если что-то выполняется / вычисляется в программе, информация об алгоритме должна быть там, и всегда будет возможность чтобы выяснить, как это получить (достаточно навыков и мотивации на стороне противника). Всегда.

0 голосов
/ 05 сентября 2016

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

0 голосов
/ 27 апреля 2014

Вы хотите креативный подход, вот один.

Какая основная программа на телефонах, которые не были декомпилированы сегодня?Радио прошивки.Зачем?Он работает не на ARM-чипсете телефона, а на отдельном Qualcomm Hexagon , который все больше присутствует в смартфонах.Это не x86, это не ARM, он использует собственную архитектуру и инструкции Qualcomm.

  • Декомпиляция Java проста.

  • ARM декомпиляция - это большесложно (лицензии на декомпиляцию Hex-Rays начинаются от 1129 долларов США ... и сочетание между большим пальцем и стандартным кодом ARM в двоичных файлах - это трудная задача) => вы можете попробовать скомпилировать с помощью Android NDK.

  • В настоящее время нет декомпиляторов Hexagon!И спецификации QDSP не являются общедоступными, даже пиратские версии.

Вопрос в том, может ли независимый поставщик программного обеспечения использовать прошивку Hexagon, включенную в телефоны массового рынка?Кажется, это направление, которое выбирает Qualcomm.Посетите их сайт и продукты SnapDragon.

Примечание: я не сторонник Qualcomm и не сторонник закрытых источников.Но эта ветка обращается к такому решению.

0 голосов
/ 07 октября 2011

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

...