Intereting Posts

Как сделать приложение «Android-unlocker» безопаснее против сухарей?

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

Но это связано с серьезным невыгодным положением, очень легко перехватить проверку безопасности; Если я не пропущу что-то здесь.

Независимо от того, что я делаю, такая реализация всегда приведет к простому, if :

 if(Program.isPremiumVersion()) { // Remove ads... } 

Метод isPremiumVersion() является ответственным за всю работу по проверке установки платного приложения для разблокировки, если совпадение сертификатов и все это. Да, приложение для разблокировки защищено LVL (хотя я читал несколько статей, в которых упоминается, как небезопасный LVL, но сейчас это не так). Но в конце концов, независимо от того, насколько сложный код внутри isPremiumVersion() получает, он всегда приводит к возврату true или false значения.

Переопределение такой функции безопасности – это всего лишь вопрос обратного проектирования кода и заставить его всегда возвращать true . Это не? Как мы можем защитить наши Android-приложения от этого? И да, код запутан ProGuard. Тем не менее, не должно быть слишком сложно для кого-то достаточно квалифицированного.

Обратите внимание, что я не пытаюсь бороться с крекеры, мы просто не можем победить. Я не собираюсь терять сон над этим, тратя бесчисленные часы на «идеальное решение». Я просто ищу способ сделать его немного более безопасным. Это, по-видимому, так просто взломать, теоретически, по крайней мере. Разве я не прав?

Любые идеи по повышению безопасности такой функции?

Solutions Collecting From Web of "Как сделать приложение «Android-unlocker» безопаснее против сухарей?"

Это нелегко.

Вы должны попытаться замаскировать его. Вот несколько советов:

Совет 1: Возврат булевых слишком очевиден. Попробуйте вернуть значение (например, int). Затем используйте сравнение, чтобы узнать, является ли это допустимым известным возвращаемым значением.

Например: получите md5 строки, которая содержит что-то, из которого вы можете определить, является ли она премиальной или нет. Скажите, что у вас есть статическая финальная строка для каждого приложения. Возможно, md5 одного начинается с 9, а другой начинается с 1. В этом случае вычислите md5 и посмотрите, больше ли это «случайного» числа, которое, как вы знаете, находится между двумя другими числами. Скажем, что md5 «premium» – 987, а md5 «free» – 123. Вы можете вычислить md5 и сравнить его с 456. Совет 2 – Еще лучше: дублировать некоторый код и использовать разные значения каждый раз (вместо 456 )! Надеюсь, это затруднит процесс декодирования зафуфированного кода.

Я знаю, что все эти проверки в конечном итоге будут сопоставлены с булевым ( if(1 > 2) будет оценено как if(true) ), но сложнее будет перепроектировать ваше приложение.

Совет 3 : не выполняйте проверки для «isPremium» в наиболее очевидных местах. Например, не делайте проверку при запуске приложения, так как это наиболее очевидное место для этого. Возможно, будет сложно избежать некоторых очевидных мест, если вы хотите иметь условную логику в зависимости от версии приложения, но приложите все усилия!

Совет 4: создайте и обфускайте свое приложение. Запустите обратные инженерные инструменты против вашего apk. Прочтите его и посмотрите, как он выглядит.

Наконец , каждый день наблюдайте за этой презентацией Google IO: « Уклоняйтесь от пиратов и останавливая вампиров, используя библиотеку проверки версий, In-App Billing и App Engine»

[EDIT – еще несколько советов]

Совет 6: попробуйте использовать код, который вы используете для проверки в совершенно допустимых местах. Это может замаскировать то, что вы на самом деле делаете там. Это может включать вызов кода для проверки, какая версия приложения это, но ничего не значащего. Или, в моем предыдущем примере, сравнение md5 с 012 или 999, только ради разбавления реального использования этих переменных.

Совет 7: вместо того, чтобы полагаться на одну строку, вы можете подумать о построении строки во время выполнения. Финалы и статика могут привлечь слишком много внимания, поэтому избегать этих может быть хорошей вещью.

Совет 8: никогда не используйте код LVL, как указано в учебниках Google. Измените его. Много!

Примечание. Я не уверен, что какой-либо из этих советов действительно будет иметь большое значение, но у вас должны быть хорошие шансы хотя бы сделать жизнь крекеров немного сложнее.

Возможно, вы уже это видели, но вот какой-то код для реализации того, о чем вы говорите:

http://groups.google.com/group/android-developers/browse_thread/thread/4ad3d67f735f16d7/948b4f9eee2490a3?pli=1

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