Пиратство, пиратство, пиратство.Что я могу сделать? - PullRequest
25 голосов
/ 23 декабря 2011

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

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

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

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

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

Ответы [ 4 ]

28 голосов
/ 23 декабря 2011

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

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

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

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

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

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

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

10 голосов
/ 08 февраля 2014

Пассивное / Агрессивное заторможение

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

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

  • Агрессивное уничтожение: напр. Прекращение и / или тревоги на пиратском приложении. Сетевое взаимодействие не обязательно требуется.
  • Passive 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 обнаружены и прекращены). Отслеживание не в игровом магазине (не установлено). Отслеживание не требуется, но включено для этих измерений.

enter image description here

Обсуждение

Примечание. Служба подписи играет важную роль в уничтожении: менеджер пакетов обеспечивает уникальные имена пакетов с уникальными сигнатурами.

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

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

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

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

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

2 голосов
/ 11 февраля 2014

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

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

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

0 голосов
/ 04 февраля 2012

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

...