Подтвердить что ты не робот

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

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

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

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

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

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

4b9b3361

Ответ 1

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

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

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

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

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

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

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

Ответ 2

Пассивное/агрессивное скатывание

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

Вот легко скрытая техника, которую я называю "scuttling", которая работает для приложений, развернутых в Google и Amazon. 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), которое было перераспределено с помощью агрессивного scuttling (обнаружение и прекращение установки non-playstore). Отслеживание отслеживания не-playstore (not-set). Отслеживание не требовалось, но было разрешено для этих измерений.

enter image description here

ОБСУЖДЕНИЕ

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

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

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

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

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

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

Ответ 3

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

Ответ 4

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

Ответ 5

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

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

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