В-биллинг безопасности в приложении – в чем дело с запутывающим ключом?

Я внедряю биллинг Google Play In-app в приложении Xamarin, поэтому я смотрю как документацию по android, так и xamarin. Оба они рекомендуют неясные способы запутывания открытого ключа внутри приложения:

http://developer.android.com/training/in-app-billing/preparing-iab-app.html

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

http://components.xamarin.com/gettingstarted/xamarin.inappbilling/true

Хотя наилучшей практикой является выполнение проверки подписи на удаленном сервере, а не на устройстве, это может оказаться не всегда возможным. Другой способ – обмануть ваш открытый ключ Google Play и никогда не хранить собранный ключ в памяти. Xamarin.InAppBilling предоставляет подпрограмму Unify, которая может быть использована для разрыва открытого ключа Google Play на две или более частей и для обфускации этих фрагментов с использованием одной или нескольких пар ключ / значение. Кроме того, Xamarin.InAppBilling всегда шифрует ваш закрытый ключ, пока он находится в памяти. Ниже приведен пример использования Unify для обфускации закрытого ключа:

string value = Security.Unify ( new string[] { "X0X0-1c...", "+123+Jq...", "//w/2jANB...", "...Kl+/ID43" }, new int[] { 2, 3, 1, 0 }, new string[] { "X0X0-1", "9V4XD", "+123+", "R9eGv", "//w/2", "MIIBI", "+/ID43", "9alu4" }) 

Но нигде не объясняется, в чем заключена сделка. Почему кто-то хочет увидеть этот ключ? Как бы кто-нибудь выиграл от просмотра / замены ключа в моем APK? Каковы возможные «атаки» здесь? Благодарю.

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

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

Лучший способ избежать этого – сделать проверку на своем собственном сервере, где они не могут получить код. Если сервер проверяет его, он загружается.

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

Intereting Posts
Исходный код для нового приложения Calendar Lollipop Calendar Можно ли использовать Uri.Builder и не иметь часть «//»? Как установить ориентацию ContentPage в Xamarin.Forms Как вставить дополнительные элементы в SimpleCursorAdapter или Cursor для Spinner? Как передать строку в 'Body' Параметр Retrofit 2 в android Предотвращение уведомления. Ожидается запуск PendingIntent. Активность уже запущена? Divider исчезает из последнего элемента в списке, если добавлен footerview Жизненный цикл действия? Можно ли использовать пользовательские вкладки Chrome в процессе производства? Уже disposedjava.lang.AssertionError при переключении на дизайн в Android Studio Android: получить текущее местоположение пользователя без использования gps или Интернета Можно ли симулировать увеличение скорости прохождения времени в Android? Drawables не будет нажимать на github Android Studio Верните приложение на передний план Android эмулятор висит при запуске?