Как обезопасить мое приложение от пиратства
Я занимаюсь разработкой приложения для Android и планирую опубликовать его (платное приложение). Я слышал, что пиратские приложения для Android очень легко (намного проще, чем iphone). Мне было интересно из вашего опыта или из того, что вы знаете, как можно повысить безопасность моего приложения? Я знаю, что никогда не смогу получить его на 100%, но я хочу, чтобы людям было сложнее его пиратствовать или распространять незаконно. Есть какие-нибудь идеи, опыт, комментарии, которыми вы можете поделиться?
3 ответа
Я выпустил бесплатное приложение для защиты от вредоносных программ для Android, и чтобы никто не взломал его, нужно было добиться его успеха. Самыми большими угрозами для приложения на Android Market являются утечка исходного кода, копирование / распространение платных приложений и повторный набор ключей. Я объясню каждый ниже и способ их решения.
Во-первых, в этой статье описывается обратная инженерия приложения Android путем распаковки скомпилированного кода и просмотра исходного кода. Вы не сможете заблокировать это от вашего приложения. Период. Кто-то с завещанием всегда может просмотреть ваш исходный код, если он получит копию вашего apk (легко доступно на рутированном телефоне). Хорошая новость заключается в том, что вы можете запутать важные части своего кода, затрудняя его реинжиниринг. Proguard - это инструмент, предоставляемый Android, который позволяет запутывать (затруднять чтение) ваш код во время упаковки. Однако, чтобы предотвратить чтение вашего важного кода, вам нужно переместить все уязвимые методы или переменные в файл, который не является Activity
, Service
, или же BroadcastReceiver
, Для полной информации читайте документацию.
Для защиты от незаконного копирования и распространения вашего приложения Google Play предоставляет несколько вариантов лицензирования. К сожалению, LVL также не совсем безопасен. Подробное руководство по его взлому (до Google Play) доступно здесь.
И наконец, в статье, указанной выше, а также в многочисленных научных статьях и онлайн-блогах описывается, как после утечки исходного кода (или даже обфусцированного исходного кода) можно просто добавить часть своего вредоносного кода, отказаться от приложения и опубликуйте его в Android Market. Хорошая новость заключается в том, что, если ваш пароль лицензионного ключа Android не может быть легко угадан, или если вы передадите его кому-то другому, злоумышленник не сможет опубликовать приложение с тем же лицензионным ключом. Это не только защищает вас от обвинений, но и делает так, чтобы вредоносное приложение не могло получить доступ к данным, доступным через ваше исходное приложение (например, SharedPreferences
).
В общем, лучший способ действительно защитить ваше приложение от пиратства - правильно настроить и использовать Proguard, Google Play Licensure и подписать окончательный APK с очень надежным лицензионным ключом.
Вы можете добавить проверки несанкционированного доступа в сочетании с обфускацией, чтобы предупредить пользователя / отключить функциональность / сообщить на сервер, если приложение было пиратским. Я использую DexGuard для затвердевшего запутывания.
Тамперная проверка
- Приложение установщика - используйте менеджер пакетов, чтобы убедиться, что приложение установки является магазином приложений play/amazon
- Проверка эмулятора - проверьте системные свойства на наличие признаков того, что приложение запускается на эмуляторе, что за пределами dev может указывать на атаку / взлом
- Проверка на отладку - используйте менеджер пакетов, чтобы проверить флаг отладки, это должно быть отключено в продукте, что может указывать на атаку / взлом
- Проверка подписи сертификата - используйте менеджер пакетов, чтобы убедиться, что приложение подписано вашим сертификатом разработчика (это может быть нарушено, если кто-то распакует и перепакует / оставит приложение)
обновление: с тех пор как я ответил на этот вопрос, я написал более подробную статью об обнаружении взлома.
Взгляните на систему лицензирования Google Play.
http://developer.android.com/guide/market/licensing/index.html
это ваш лучший выбор.
Google Play Licensing - это сетевой сервис, который позволяет приложению запрашивать доверенный сервер лицензирования Google Play, чтобы определить, лицензировано ли приложение для текущего пользователя устройства. Служба лицензирования основана на способности сервера лицензирования Google Play определять, имеет ли данный пользователь лицензию на использование данного приложения. Google Play считает пользователя лицензированным, если он является зарегистрированным покупателем приложения.