- Android — защита приложений от пиратства
- Защита Android приложений от взлома
- В чём слабость Google Application Licensing?
- Как реализовать свою собственную защиту?
- Что делать дальше?
- Защита приложения при наличии серверной части.
- Как разработчик Android-приложения борется с пиратами
- Google хочет убить пиратство на Android?
Android — защита приложений от пиратства
Вопрос — какие существуют методы борьбы с пиратством? Я понимаю, что сломать можно всё, но хоть какая-то защита от тупого копирования .apk и его распространения всё же должна быть. На developer.android.com описана некая библиотека LVL — Licencing Validation Library, это оно ведь?
И еще, поскольку приложение я пишу на Си, без явы, существующие решения мне может и не помогут, в связи с этим вопрос: а Google Play при передаче APK просто передаёт готовый архив, или может «встроить» в него, например, какой-нибудь идентификационный номер устройства, на которое загружается приложение? Имеется ли что-то подобное в Google Play?
Защита от пиратства должна быть заложена в идеологию получения дохода от приложения, а не решатся техническими методами.
Если вы являетесь создателем софта, продумайте модель, которая исключит пиратство как факт, и не надейтесь на технические методы.
shosh
> идеологию получения дохода от приложения
Приложение платное. Вот и вся идеология.
Требуется исключить (ну, или заметно усложнить) возможность установки приложения бесплатно. А это решается техническими средствами.
ALPINE
Пишите без явы?
ReeV
> Приложение платное. Вот и вся идеология.
Одним этим вы себя обрекаете на борьбу с ветром.
Рассказывайте подробнее, что за невнятные ответы.
ReeV
> Пишите без явы?
Да, пишу без явы.
shosh
> Одним этим вы себя обрекаете на борьбу с ветром.
Почему?
> Рассказывайте подробнее
А что рассказывать? Просто платное приложение. Игрушка. Есть бесплатная лайт-версия с урезанным количеством уровней (демо-версия по сути), есть полная платная версия со всеми уровнями. Монетизация только засчёт покупок платного приложения. Рекламы нет, in-game покупок нет. Вот и всё.
Задача — не допустить (усложнить) установку полной версии бесплатно.
ALPINE
А может продавать остальные уровни in-app purchase-ом?
Пишите свою систему, LVL вас никак не защитит, если ваша поделка станет популярной.
В отличии от iOS, Андроид=целый зоопарк из декартово произведения версий ОС на варианты железа. Гугл очень сильно ступил и не заложил изначально апи, которое всегда и везде гарантированно возвращало бы уникальный номер устройства. Так, чтоб ни рутом ни фектори резетом его сменить нельзя было.
Я бы порекомендовал использовать привязку не к железу, а какой-то учётной записи пользователя. Тогда бы можно было спокойно трекать, кто и как юзает вашу поделку, ваш софт бы время от времени обращался бы к какому-то серверу и запрашивал бы валидацию. Один недостаток — необходимость интернет подключения для работы вашей софтины.
Уровни грузить из инета. На устройстве храть текущий уровнь и следующий. Это позволит играть офлайн. При прохождении каждого уровня добро пожаловать за следующим.
> А может продавать остальные уровни in-app purchase-ом?
Думал об этом, но «просто игра без заморочек» показалась проще для пользователя. Не найду других решений — придется делать так.
Disabled
> Основная проблема при написании своей защиты— получить уникальный айди
> устройства на которое ставиться ваш софт
Дело еще в том, что даже если я получу его — что дальше? При покупке же Play Market высылает обычный .apk, общий для всех, я не могу «на той стороне» на основе этого айди что-нибудь сделать. Получается, интернет для докачивания уровней (шифрованных уникальным айди) нужен все равно.
Вот в Steam, насколько я знаю, есть «Custom exe generation» — исполняемый файл генерируется на основе учётки пользователя или как-то так. Подобной фичи у гугла нет? Умеет ли гугл вшивать в .apk что-нибудь уникальное при загрузке приложения?
> Уровни грузить из инета. На устройстве храть текущий уровнь и следующий.
Тоже думал. Идеальная цель — реализовать защиту, не требующую интернет. Не удастся — что ж, буду через инет.
Читайте LVL, http://developer.android.com/guide/google/play/licensing/index.html and http://developer.android.com/guide/google/play/licensing/adding-licensing.html
Но, инет всё равно понадобиться. А раз он понадобиться, то я б уже реализовал собственный механизм, а не юзял бы lvl.
В принципе, можно пойти иным путём. А Андроиде, в отличии от iOS, не надо получать рута, чтобы ставить софт не из маркета. Вы бы могли распространять apk со своего сервера, там же организовав и оплату и генерацию кастомизированного под покупателя apk. Т.е., apkшку вы собираете под клиента, компиля туда классик с константой с эккаунтом клиента. И вся ваша программа когда надо сравнивает учётную запись пользователя с этой айдишкой. Как вариант.
Любые методы защиты бесполезны. Андроидовскую защиту куда сложнее встроить, чем снять. Вообще любую защиту снять совершенно не сложно, в том числе онлайновую.
ALPINE
> Не удастся — что ж, буду через инет.
Лучше даже не пытайтесь 🙂 В отличие от пользователей ПК пользователи телефонов в большинстве случаев не держат постоянное подключении к тырнету. У большинства даже не подключена соответствующая тарифная опция, все качается дома через вайфай.
По опыту скажу, что даже хорошие бесплатные игры сносят только из-за того, что они требуют наличия тырнета при запуске. Вашу же игру просто не купят.
Хуже того, ее декомпилигуют, випилят онлайновую защиту и выложат на торренты, где она будет более привлекательной, чем в маркете.
Наилучшим выходом будет выставить низкую цену на игру. Дополнительные доходы может принести донат за внутриигровые предметы (тут главное не переусердствовать 🙂
Barabus
Ну я так и думал собственно. даже сам купил игру Spirit и однажды наткнулся на то, что ей нужен инет для запуска. Мелькнула еще мысль — что за херня, пиратка лучше была бы.
Просто хотелось исключить ситуацию, когда ТУПОЕ копирование .apk сразу успешно устанавливает приложение без покупки. Хотелось заставить хоть один бит сменить.
Короче, надо бесплатной демо-версией так сильно привлечь игроков, чтобы они сразу купили полную, позабыв о том, что есть торренты.
ЛИЦЕНЗИОННЫЙ КЛЮЧ ДЛЯ ЭТОГО ПРИЛОЖЕНИЯ
Включите этот открытый ключ RSA в свои исполняемые файлы (удалите пробелы).
Куда вставлять ключ RSA на Гугл Плей что бы защитить приложение от копирования?? и какие пробелы удалить? там в коде нет ни каких пробелов.
Источник
Защита Android приложений от взлома
В данной статье мы кратко расскажем о том, как можно защитить свою программу от взлома, не интегрируя стандартное решение от Google и предоставим пример рабочего кода. Интересно? Просим под кат!
В чём слабость Google Application Licensing?
Дело в том, что данный механизм хорошо известен разработчикам и его взлом не составляет большого труда. Всё что для этого нужно — скачать apktool, найти класс LicenseChecker и слегка подправить метод checkAccess.
Как реализовать свою собственную защиту?
Очевидно, что любую защиту можно сломать. Данный метод не является серебрянной пулей, но он имеет право на жизнь. Для проверки уникальности приложения есть смысл проверить сертификат, которым это приложение было подписано. Информацию о сертификате можно прочитать из PackageInfo:
Нулевой элемент массива будет содержать необходимую информацию о ключе, которым было подписано приложение. Сохраните сам ключ, он вам понадобится совсем скоро.
Логично, что делать такую проверку в Java не имеет смысла, так как аналогичный приём с использованием apktool похоронит вашу защиту за несколько минут. Поэтому данную проверку стоит перенести на нейтив уровень.
Что делать дальше?
Необходимо вынести часть своего функционала в ту же библиотеку и перед тем как вернуть значение проверить сертификат на подлинность. И не забываем про фантазию, которая необходима для того, чтобы сбить с толку потенциального хакера. Допустим, вы определили, что данная копия приложения — не подлинная. Нет смысла явно говорить об этом, намного веселее добавить случайный элемент в действия программы. К примеру, если у вас игра, то можно добавить силы соперникам или сделать игрока более уязвимым. Также можно добавить случайные падения, к примеру в 10% случаев (справедливое замечание от хабраюзераzagayevskiy: случайные падения испортят карму вашей программы. ). Тут всё зависит только от вас.
Вот простой пример возможной реализации:
Для начала пишем класс, который делает вызов библиотеки для получения некоторых данных.
Метод init нужен для того, чтобы не вызывать проверку подлинности сертификата каждый раз.
Реализация нейтив методов:
Данный вариант защиты также может быть взломан путём дизасемблирования, но для этого нужен совсем другой уровень знаний и намного больше времени, чем в случае с реализацией защиты на уровне Java. При наличии определённых средств есть смыл приобрести обфускатор для С кода, в этом случае взлом будет далеко не тривиальной задачей.
Защита приложения при наличии серверной части.
Если часть логики приложения реализована на сервере, есть смысл вынести проверку подлинности сертификата на сервер. Как вариант, можно использовать такой алгоритм действий:
- Сервер генерирует приватный и публичный RSA ключи;
- Клиент отправляет запрос на сервер и получает публичный ключ;
- На клиенте реализовываем нативную библиотеку с функцией вида String getInfo(String publicKey); функция должна считать сертификат, добавить к нему некоторую случайную величину, затем зашифровать полученную строку используя публичный RSA ключ;
- Клиент делает новый запрос на сервер, отправляя полученную строку. Сервер производит декодирование, отделение сертификата от случайной величины и проверку его на подлинность;
- В зависимости от результатов проверки сервер реагирует на все следующие запросы клиента.
Надеемся, данный механизм поможет читателям Хабра повысить заработок со своих Android приложений.
Источник
Как разработчик Android-приложения борется с пиратами
О том, что многие пользователи не прочь поработать со взломанной версией платного ПО, можно даже не говорить — само собой разумеется. Для разных приложений уровень «пиратства» разный. Разработчик альтернативного календаря для Android на днях заявил, что его приложение «пиратится» 85% пользователей. На днях этот разработчик (зовут его Джек Андервуд) поделился на Reddit интересным способом борьбы с пиратами.
Нет, Джек не подает исков в суд, не вычисляет взломщиков по IP и не использует вуду-магию для удаленного наказания пиратов. Вместо этого он использует более оригинальный способ. Кстати, само приложение называется Today Calendar Pro, и на сегодняшний день его оценка составляет 4,5 звезд при нескольких тысячах оценщиков.
На днях Джек поделился с Reddit своими методами борьбы. Так вот, он внедряет некоторые элементы неожиданности — пираты получают напоминания о событиях, которые не были занесены в календарь самим пользователем. Одно из таких событий, например, пройти по узкой доске (легенды гласят, что такой метод наказания использовали пираты для своих жертв), под которой плавают акулы.
Сам Джек утверждает, что он не против пиратов, и их логику он прекрасно понимает. Некоторые пользователи просто не хотят платит, другие считают, что цена завышена, третьи — хотят использовать приложение подольше, пока принимают решение о покупке. Разработчик все это понимает и не особо переживает. Тем не менее, его расстраивает тот факт, что почти 9 из 10 человек, работающих с платной версией, используют «пиратку».
Джек говорит, что считает 6 долларов (именно столько стоит его приложение, полная версия) обоснованной ценой для тех пользователей, кто работает с приложением каждый день. Разработчик обновляет приложение три раза в неделю, следит за баг-репортами и вообще выполняет довольно много работы. Поэтому ему не хочется терять 85% прибыли. Ну, а поскольку кто-то не хочет платить, Джек считает, что вправе немного шутить. И «особенные события», появляющиеся в календаре «пирата» могут подействовать, во всяком случае, на это есть надежда.
«План в том, что люди устанут от постоянных предложений вступить в „партию пиратов“ или пройти по узкой доске, и начнут платить», — говорит Андервуд.
Кстати, у приложения есть и бесплатная версия с рекламой, так что тут все, как обычно.
Источник
Google хочет убить пиратство на Android?
Компания Google решила усложнить жизнь любителям скачивать установочные apk-файлы приложений не из Google Play. Речь идет о новой структуре установочных приложений, которые будут состоять не из одного apk-файла, а из десятков, число которых будет увеличиваться по мере роста функциональности приложения.
В настоящее время на различных ресурсах можно найти apk-файлы приложений. При этом под каждое разрешение, под каждое API и архитектуру процессора предлагаются свои установочные файлы. Вот как это выглядит сейчас на примере ресурса APKMirror:
Google решила изменить подобный подход. Впервые о новой системе упаковки приложений компания рассказала разработчикам на I/O 2018. Главной особенностью новшества должен стать уменьшенный размера приложений и упрощенный процесс их публикации. В этом поможет Android App Bundle – новый формат публикации приложений.
Разработчикам теперь не нужно будет компилировать приложения под разные устройства. Достаточно лишь один раз скомпилировать исходники, ресурсы и библиотеки вашего приложения, передать их Google, после чего компания с помощью Android App Bundle сама будет предоставлять пользователям необходимые файлы.
Здесь в игру вступает функция Google Play Dynamic Delivery, которая берёт исходные файлы приложения и разбивает их на множество apk-файлов. Таким образом, мы получаем множество модулей, среди которых имеется один главный модуль (apk-файл) с базовой функциональностью приложения, и уже вокруг этого модуля добавляются остальные модули.
Например, представьте ситуацию, когда пользователь изменил язык в системе. Теперь приложениям не нужно будет хранить языки, Google сама предоставит всем приложениям отдельный apk-файл, включающий в себя поддержку языка, установленного в системе, при этом модуль с прошлым языком будет удален.
Особенностью подобной архитектуры является возможность бесконечно добавлять модули к приложению. Например, если разработчики решат обновить своё приложение, добавив новую функциональность, им нужно будет лишь добавить новый apk-файл к приложению, не изменяя все остальные модули приложения и главный apk-файл.
Android App Bundle поддерживается лишь Android 5.0 и выше, более старые версии Android будут получать привычные APK-файлы, но стоит отметить, что в будущем разработчики будут отказываться от поддержки старых версий Android. И постепенно Google Play полностью перейдет на новую систему.
Пока APKMirror ищет решение данной проблемы, ведь публиковать десятки APK-файлов для одного приложения было бы глупо. Посмотрим, что смогут предложить коллеги в дальнейшем. Но не исключено, что подобное означает смерть пиратства на Android.
Мнением делитесь в Telegram-чате или ниже в комментариях.
Источник