Как защитить мое приложение от пиратства

Я разрабатываю приложение для Android и планирую опубликовать его (платное приложение). Я слышал, что приложения для Android очень легко пиратить (гораздо проще, чем для iphone). Из вашего опыта или того, что вы знаете, мне было интересно, как можно повысить безопасность моего приложения? Я знаю, что никогда не смогу получить его на 100% безопасным, но я хочу, чтобы людям было труднее его пиратствовать или распространять нелегально. Есть идеи, опыт, комментарии, которыми вы можете поделиться?


person Snake    schedule 26.03.2012    source источник
comment
вам придется использовать кучу методов, и вы все равно не сможете полностью предотвратить это. используйте google play licensing и code obfuscation для начала. Я бы предложил проверить популярные пиратские веб-сайты и попросить хостеров удалить файлы, но я не уверен, как они справятся с этим. И он скоро вернется где-нибудь еще, это в значительной степени безнадежно.   -  person stefan    schedule 26.03.2012
comment
Я бы посоветовал создать основную часть вашего приложения с помощью C ++ и использовать Android NDK, вы будете использовать сеть для аутентификации действительных покупателей.   -  person duckduckgo    schedule 18.06.2013


Ответы (3)


Я выпустил бесплатное приложение для защиты от вредоносных программ для Android, и убедиться, что никто не взломал его, было необходимо для его успеха. Самые большие угрозы для приложения на Android Market включают утечку исходного кода, копирование/распространение платных приложений и изменение ключей. Я объясню каждый ниже и способ их решения.

Во-первых, в этой статье описывается, как реконструировать приложение Android путем распаковки скомпилированный код и просмотр исходного кода. Вы не сможете заблокировать это от вашего приложения. Период. Кто-то с желанием всегда может просмотреть ваш исходный код, если он получит копию вашего apk (легко доступную на рутированном телефоне). Хорошей новостью является то, что вы можете запутать важные части вашего кода, что усложнит обратный инжиниринг. Proguard – это инструмент, предоставляемый Android, который позволяет запутывать (усложнять чтение) код во время упаковка. Однако, чтобы предотвратить чтение вашего важного кода, вам необходимо переместить все уязвимые методы или переменные в файл, который не является Activity, Service или BroadcastReceiver. Для получения полной информации прочитайте документацию.

Для защиты от незаконного копирования и распространения вашего приложения Google Play предоставляет несколько вариантов лицензирования. К сожалению, LVL тоже не совсем безопасен. Подробное HOW-TO, как взломать его (до Google Play), доступно здесь< /а>.

Наконец, документ, указанный выше, а также многочисленные научные статьи и онлайн-блоги описывают, как после утечки исходного кода (или даже запутанного исходного кода) можно просто добавить немного своего собственного вредоносного кода, отказаться от приложения и опубликовать его на Android Market. Хорошей новостью здесь является то, что, если ваш пароль лицензионного ключа Android не может быть легко угадан, или если вы передадите его кому-то другому, злоумышленник не сможет опубликовать приложение с тем же лицензионным ключом. Это не только защитит вас от вины, но и сделает так, что вредоносное приложение не сможет получить доступ к данным, доступным через ваше исходное приложение (например, SharedPreferences).

В общем, лучший способ по-настоящему обезопасить свое приложение от пиратства — это правильно настроить и использовать Proguard, лицензию Google Play, а также подписать окончательный APK очень безопасным лицензионный ключ.

person Phil    schedule 26.03.2012
comment
Вау .. Отличная информация и очень подробный ответ. Мне нравится тот факт, что это подтверждается бумагой. Я буду следовать тому, что вы предложили. Я по-прежнему призываю людей делиться своим опытом - person Snake; 26.03.2012
comment
Я хотел бы отметить, что вам не нужно рутированное устройство, чтобы получить копию APK. ADB pull com.example.coolappdude. Кроме того, Proguard — это обфускатор байт-кода Java. У создателей ProGuard есть несвободная программа DexGuard, которая представляет собой обфускатор байт-кода Dalvik. Можно подумать о том или ином, в зависимости от уровня вашей паранойи. - person CatShoes; 07.02.2013
comment
Обратите внимание, что ответ противоречит мудрости разработчиков коммерческого программного обеспечения. Я видел, как многие крупные компании заявляют, что обеспечение безопасности приложения для Android вызовет серьезные проблемы у законных пользователей, что является компромиссом, который немногие из них считают целесообразным, поэтому большинство коммерческих программ для Android не «защищены», как описано выше. На самом деле немного глупо думать, что несколько абзацев о SO могут решить все проблемы, которые не удалось решить крупной отрасли. - person Carl Smith; 28.03.2014
comment
@CarlSmith, о каких серьезных проблемах ты говоришь? Кроме того, можете ли вы указать свои источники для этих крупных компаний, которые, как вы говорите, видели такие заявления? Ваш комментарий крайне расплывчатый. - person Phil; 28.03.2014
comment
@Phil - Извините за отсутствие подробностей, но нет конца историям о том, как DRM наносит вред законным пользователям, особенно на Android. Если честно, я просто разозлился, когда опубликовал сообщение, потому что моя невестка не могла использовать Sky Player на днях из-за DRM, и она платит им по контракту, который включает в себя эту услугу. DRM отстой, чувак. - person Carl Smith; 29.03.2014
comment
@CarlSmith в этом ответе не обсуждается DRM, хотя для некоторых приложений может быть полезно изучить (Android предоставляет Widevine DRM для API 3.0+). Почему отрицательный голос? - person Phil; 29.03.2014
comment
Голосование против было излишним, извините. Я пытался отменить его еще до того, как вы упомянули об этом, но он говорит, что не могу, если вопрос не отредактирован. Опять извините. Этого не требовалось. Если вы отредактируете вопрос, я изменю его. - person Carl Smith; 29.03.2014

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

Проверка на несанкционированный доступ

  • Приложение-установщик — используйте диспетчер пакетов, чтобы убедиться, что устанавливаемое приложение — это магазин приложений play/amazon.
  • Проверка эмулятора — проверьте системные свойства на наличие явных признаков того, что приложение запускается на эмуляторе, что вне разработчика может указывать на атаку/вмешательство.
  • Отладочная проверка — используйте диспетчер пакетов для проверки флага отладки, это должно быть отключено в продукте, что может указывать на атаку/вмешательство.
  • Проверка сертификата подписи — используйте диспетчер пакетов, чтобы убедиться, что приложение подписано вашим сертификатом разработчика (это будет нарушено, если кто-то распаковал и переупаковал/переподписал приложение)

обновление: после ответа на этот вопрос я написал более подробная статья об обнаружении несанкционированного доступа.

person scottyab    schedule 19.03.2014
comment
Спасибо, есть примеры кода? Я использую proguard для обфускации - person Snake; 20.03.2014
comment
В этой книге есть несколько примеров packtpub.com/android-security-cookbook/book. Отказ от ответственности Я написал главы по усилению безопасности Вы можете бесплатно загрузить образцы кода в разделе поддержки на веб-сайте книги. - person scottyab; 20.03.2014
comment
@scottyab Разве это не значительно увеличивает вероятность того, что законный пользователь не сможет использовать программное обеспечение после оплаты? - person Carl Smith; 28.03.2014
comment
Нет, единственное, что может быть проблемой, — это проверка приложения установщика, которая может привести к проблемам, если пользователь использует какое-либо программное обеспечение для резервного копирования приложений (например, резервное копирование титана). - person scottyab; 30.03.2014
comment
Забавно, я смотрел вашу статью и чуть позже нашел этот ответ. Вы могли бы хотеть соединиться с этим для более подробной информации. Кстати, отличная статья: airpair.com/android/ сообщения/ - person miva2; 06.05.2015

Ознакомьтесь с системой лицензирования Google Play.

http://developer.android.com/guide/market/licensing/index.html

Это ваш лучший выбор.

Лицензирование Google Play — это сетевая служба, которая позволяет приложению запрашивать доверенный сервер лицензирования Google Play, чтобы определить, лицензировано ли приложение для текущего пользователя устройства. Служба лицензирования основана на способности сервера лицензирования Google Play определять, имеет ли данный пользователь лицензию на использование данного приложения. Google Play считает пользователя лицензированным, если он является зарегистрированным покупателем приложения.

person Jeffrey Blattman    schedule 26.03.2012
comment
Я слышал, что лицензирование Google (посредством подписи приложений) действительно бесполезно. Есть автоматические инструменты, которые загружают приложение, удаляют лицензию и подписывают ее новым пользователем в один клик (я читал об этом на одном из форумов). Я определенно буду использовать лицензирование, но мне нужен еще один уровень защиты.. - person Snake; 26.03.2012
comment
механизм подписи приложений устарел. новая система лицензирования основана на сети и достаточно надежна. - person Jeffrey Blattman; 26.03.2012