Подтвердить что ты не робот

Google IAP возвращает короткий токен покупки для проверки

Я реализовал проверку токенов Google IAP на стороне сервера. Мое мобильное приложение отправляет мне этот токен, как получить его от Google.

Регулярный токен выглядит как

minodojglppganfbiedlabed.AO-J1OyNtpooSraUdtKlZ_9gYs0o20ZF_0ryTNACmvaaaG5EwPX0hPruUdGbE3XejoXYCYzJA2xjjAxrDLFhmu9WC4fvTDNL-RDXCWjlHKpzLOigxCr1QhScXR8uXtX8R94iV6MmMHqD

но иногда я получаю короткий токен, подобный этому

korpimulxmslxissnschtkdb

Когда я проверяю этот токен с помощью API разработчика Google Play: https://www.googleapis.com/androidpublisher/v2/applications/packageName/purchases/subscriptions/subscriptionId/tokens/token, для короткого токена я получаю ошибку 404.

Где проблема? Возможно ли, что этот короткий токен представляет собой реальные транзакции?

4b9b3361

Ответ 1

Я получаю эти же недействительные токены в нашем приложении, не подозревая причину на некоторое время. Токены поступают в различных форматах, включая 24 альфа-символа (например, glvnqnpjqslcagyimgxeuybk), 15 цифр (например, 781871156762279, см. Этот вопрос) и даже токены надлежащей длины, которые имеют несколько иной формат от действительных (например, xdavcuvdnniwwrhwemleqjdz.rSQozm... см. этот вопрос).

Это сообщения об ошибках, которые я получил от API выставления счетов в приложении для этих разных токенов в тот или иной момент:

  • "code": 404, "message": "The purchase token was not found."
  • "code": 400, "message": "Invalid Value"
  • "code": 400, "message": "Your request is invalid for this subscription purchase."

Ответ, данный Марком Гринстоком, дал мне идею попытаться воспроизвести проблему.

Создание мошеннической покупки

Я тестировал два приложения, которые заявляют, что взломали покупки в приложениях: Свобода и Lucky Patcher на корневом устройстве. Первый не работал: хотя он обнаружил, что наше приложение может совершать покупки, когда я пытался сделать поддельный, он сказал мне, что "это приложение не может быть подделано". Тем не менее, последний работал после некоторого ворчания и создал короткий токен покупки точно так же, как и в вопросе. Когда я попытался проверить токен с помощью API фактурирования в приложении, я получил то же самое "неверное токеновое сообщение", как и раньше.

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

Атака

Я считаю, что атака работает следующим образом. Любой, кто знает об этом, пожалуйста, звоните!

  • Пользователь устанавливает одно из приложений для взлома, которое утверждает, что делает бесплатные покупки в приложении на корневом устройстве.
  • Приложение для взлома либо исправляет законную In-App Billing Service на устройстве, либо эмулирует его.
  • В процессе покупки приложение взлома перехватывает покупку Intent, которая предназначена для законной службы
  • Приложение для взлома обрабатывает запрос на покупку и генерирует ответ таким же образом, как и законная услуга, но запрос на покупку никогда не доходит до серверов Google.
  • Приложение, основанное на проверке локального токена, будет запрашивать покупки у службы биллинга In-App. Этот запрос также перехвачен приложением взлома, в котором утверждается, что покупка действительна.
  • Приложение, основанное на проверке маркера сервера, отправляет токен покупки на сервер, что делает вызов API фактурирования в приложении, который никогда не видел токена и поэтому возвращает ответ "недействительный токен"

Смягчение

  • Приложения, которые полагаются исключительно на службу биллинга In-App, уязвимы! Запросы на покупку и подтверждение покупки перехватываются одним и тем же мошенническим приложением. Нет защиты.
  • Приложения, которые полагаются на серверный сервер, должны отправить токен покупки на сервер, который будет проверен через API издателя. Эти приложения должны не кредитовать пользователя при покупке до тех пор, пока бэкэнд не проверит его и не вернет положительный результат в приложение. Бэкэнд должен, вероятно, следовать рекомендациям рекомендаций по In-App Billing. Эти приложения, вероятно, более безопасны из-за мошеннических покупок, хотя они генерируют много недействительных покупок.
  • Я не думаю, что безопасно полагаться на длину или формат токена, идентификатор заказа или другие данные для определения действительности покупки. Эти жетоны, вероятно, только искажены, потому что они имитировали предыдущий формат. Предположительно, авторы приложения для взлома в конечном итоге выпустят версию для подражания любому формату, который Google хочет разработать. Единственным безопасным средством является проверка покупки через API выставления счетов в приложении на устройстве, которое вы контролируете, т.е. сервер.

Ответ 2

Вы в конечном итоге решили это?

Единственная причина, по которой я могу предположить, заключается в том, что токен был сгенерирован Ink App Purchase Cracker, например, приложение "Freedom in-app purchase for Android", которое может быть установлено на корневых устройствах.

Мне интересно узнать, был ли у вас короткий токен для любых пробных покупок, которые вы сделали сами.

Другим признаком того, что токен является поддельным, является формат orderId, который вы получаете после покупки в приложении.

Если он не соответствует формату, указанному в Администрирование факсов в приложении", скорее всего, это мошенническая покупка.