Для платная версия моего приложения. Я выбираю маршрут приложения для разблокировки, потому что его легко реализовать, он позволяет отображать индивидуальную статистику в консоли разработчика, но в основном потому, что мне не нужно будет поддерживать 2 базы кода (одна для бесплатной версии и другая для платной версии). Даже если бы я использовал CVS (что я и делаю), мне все равно было бы мучительно продолжать объединять функции и исправлять ошибки. Приложение для разблокировки в целом гораздо проще реализовать...
Но у него есть серьезный недостаток: очень легко обойти проверку безопасности; если я что-то пропустил здесь.
Что бы я ни делал, такая реализация всегда будет приводить к простому if
, подобному этому:
if(Program.isPremiumVersion()) {
// Remove ads...
}
Метод isPremiumVersion()
отвечает за всю работу при проверке установки платного приложения для разблокировки, совпадают ли сертификаты и все такое прочее. Да, приложение для разблокировки защищено LVL (хотя я читал несколько статей, в которых упоминалось, что LVL небезопасен, но сейчас не об этом). Но, в конце концов, каким бы сложным ни был код внутри isPremiumVersion()
, он всегда возвращает значение true
или false
.
Переопределение такой функции безопасности — это просто вопрос обратного проектирования кода, чтобы он всегда возвращал true
. Это не? Как мы можем защитить наши приложения для Android от этого? И да, код запутан с помощью ProGuard. Тем не менее, не должно быть слишком сложно для кого-то достаточно опытного.
Обратите внимание, я не пытаюсь бороться с взломщиками, мы просто не можем победить. Я не собираюсь терять сон из-за этого, тратя бесчисленные часы на «идеальное решение». Я просто ищу способ сделать его немного более безопасным. Кажется, что это так просто взломать, по крайней мере, в теории. Я ошибаюсь?
Есть идеи по улучшению безопасности этой функции?