Пиратство, пиратство, пиратство. Что я могу сделать?

Я только что выпустил приложение, платное приложение, через 4 дня пользователь сказал мне, что есть еще один веб-сайт в Китае, где находится мое приложение. Я загрузил его оттуда, и он отлично работает на моем устройстве!

Здесь есть сообщения, в которых люди могут изменить имя пакета и переиздать apk. Но это не мое дело, трещина версии по-прежнему использует одно и то же имя пакета. Я использовал Android Vending Licensing в программе, но взломанная версия вообще не выполняет проверку лицензий. Я использовал ProGuard, чтобы запутать его, но это не мешает хакерам.

Вопрос №1: Я подписал файл apk в соответствии с инструкциями Google. Но все же они изменили код и достали часть проверки лицензий. Я ошибаюсь, что подпись файла apk предназначена для того, чтобы люди не вмешивались в содержимое файла?

Вопрос № 2: Для программ Win32 .exe я использовал контрольную сумму, чтобы определить, был ли файл изменен. Вот как это работает: Когда создается .exe, я использовал инструмент для вычисления суммы байтового содержимого файла, а затем вставлял его где-то в файл, например, 4 байта после текстового шаблона «МОЙ ПОДПИСЬ», , Затем во время выполнения программа открывает файл .exe и вычисляет сумму байта, сравнивает ее с целым числом после подписи.

Кто-нибудь пробовал этот подход в файлах apk? Хотите поделиться своим опытом?

Solutions Collecting From Web of "Пиратство, пиратство, пиратство. Что я могу сделать?"

В конечном итоге встроенная защита приложений в Android очень бедна. Вот ваши лучшие практики.

1) Да. Рекомендация Google использовать обфускацию кода, подписанную кодировку и сервер проверки лицензии предназначена для предотвращения кражи программного обеспечения. Однако их реализация крайне ошибочна. Единственным требованием, которое APK должен выполнить, является то, что он должен быть подписан. Неважно, кто его подписал. Нет никаких проверок, что ваша подпись – та, с которой она подписана. Поэтому, чтобы взломать его, вы просто удаляете проверку лицензии и повторно подписываете любой желаемый сертификат. Затем пользователь может загрузить его на свой телефон с помощью «Разрешить нерыночные приложения».

Не используйте лицензию Google как есть. Измените код в значительной степени. Добавьте несколько новых параметров, которые будут использоваться при создании ключей. Переместите код вокруг / перепроектируйте его. Не включайте библиотеку лицензирования Google в качестве проекта библиотеки. Поместите его прямо в свой код. Сделайте код как можно точнее и глухо, насколько это возможно. Добавьте функции, которые ничего не делают, но изменяйте значения «на лету». Сделайте другие функции позже, чтобы преобразовать их обратно. Проверяйте проверку лицензии на всю вашу кодовую базу.

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

2) Это обычная техника защиты от трещин. Вы можете сделать это на Android, если хотите. Но он может быть взломан примерно через 5 минут. Если у вас Google есть учебники о том, как взломать эту конкретную технику. В основном вы просто ищете CRC-вызов в коде и удалите чек после возврата CRC.

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

3) Если вы действительно параноик, вы можете реализовать собственное лицензирование на своем собственном сервере лицензирования. Это тот подход, который я принял, но не столько для защиты приложения от кражи, сколько для того, чтобы предоставить мне механизм для продажи приложений непосредственно с моего сайта, поэтому пользователи, у которых нет Google Play, все равно могут покупать мои приложения.

Пассивный / агрессивный прыжок

Я согласен с @metalideath, что запутывание и унификация кода лицензирования не являются надежными.

Вот легко скрытая техника, которую я называю «scuttling», которая работает для приложений, развернутых в Google и Amazon. Scuttling – это первое обнаружение пиратства приложением. Что делать после обнаружения в приложении разработчика приложения.

  • Агрессивное скатлинг: например. Прекращение и / или аварийные сигналы на пиратском приложении. Сетевая связь не обязательно необходима.
  • Пассивный Scuttling: нет модификации приложения. Например. Включить отслеживание.
  • Пассивный / Агрессивный Scuttling: тонкая модификация приложения. Например. Отключить ключевые функции. Ведущий пират, думая, что они испортились, и в неопубликование пиратского приложения.

Если ваше приложение было переименовано и / или установлено из любого источника, кроме Google или Amazon, функция scuttle () вернет значение true.

// Dont just copy/paste this code - that is what automated crackers look for - cludge it! // No network communication is required at runtime. // myPackageName should decode at runtime to "com.yourpackagename" // google should decode at runtime to "com.android.vending"; // amazon should decode at runtime to "com.amazon.venezia"; public boolean scuttle(Context context, String myPackageName, String google, String amazon) { //Scallywags renamed your app? if (context.getPackageName().compareTo(myPackageName != 0) return true; // BOOM! //Rogues relocated your app? String installer = context.getPackageManager().getInstallerPackageName(myPackageName); if (installer == null) return true; // BOOM! if (installer.compareTo(google) != 0 && installer.compareTo(amazon) != 0) return true; // BOOM! return false; } 

РЕЗУЛЬТАТЫ

Следующий скриншот был взят из Google Analytics, в котором показано пиратское бесплатное приложение из playstore (com.android.vending), которое было перераспределено с помощью агрессивного ската (обнаружены и прекращены установки не-playstore). Отслеживание отслеживания не-playstore (not-set). Отслеживание не требовалось, но было включено для этих измерений.

Введите описание изображения здесь

ОБСУЖДЕНИЕ

Заметное оповещение о сервисе играет роль в запуске: Менеджер пакетов использует уникальные имена пакетов с уникальными сигнатурами.

Здесь представлен вопрос о том, что делать, когда приложение запущено (пират обнаружен приложением). Пиратство – это форма вирусализации (неконтролируемое распространение) вашего приложения. Это уже можно обнаружить, включив поддержку отслеживания аналитики. Scuttling позволяет создателю приложения настраивать внешний интерфейс с отслеживанием или без него.

Агрессивная атака очевидна для пиратов (BOOM!). Это способствует дальнейшему растрескиванию. Пассивное скатывание гораздо менее очевидно, но может включать отслеживание.

Пиратство нельзя предотвратить, но оно предсказуемо, можно обнаружить и отслеживать.

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

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

Я связался с Google и был перенаправлен на супер полезный разговор о том, как изменить базовую лицензию LVL. Ознакомьтесь с этим разговором из Google I / O 2011.

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

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

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

Наконец, сообщайте пиратские копии поставщикам антивирусных программ. Поставляйте копии APK. Они будут добавлять подписи в свои базы данных, чтобы они были помечены как потенциально опасные.