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