Reversing Google Play Store

в 16:03, , рубрики: android, in-app purchases, информационная безопасность, метки: ,

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

Да, вслед за Реверсом AppStore, решил я взяться за то же самое, но с Google. Google Play Store. (как Бонд. Джеймс Бонд).

Весело то, что у гугла все просто и секъюрно. Юзаются подписи, nonce'ы. А также сервис разделяется на две составляющие — push и обычную. Все запаковано во что бы вы думали? Правильно — protobuffers! It's hard to decode, ибо формат бинарного сообщения сам себя не описывает, много эвристики и веселья.
Забавно, однако, что, как и в Apple, ВНЕЗАПНО, плевали они на стандарты (или я неправильно понял?) — gzip отдается плейнтекстом/binary — в protobuffers, а вот binary отдается в… gzip!
image
Добро пожаловать под кат.

image
Покупка проходит очень легко и непринужденно сложно.

Первое — /fdfe/toc — выдает данные о Terms&Conditions маркета и другую обязательную чушь.
Второе — /fdfe/purchase или /market/api/ApiRequest — получить данные о покупке (та кнопка «купить» в маркете)
Третье — /fdfe/completePurchase — выполнить собственно покупку
Пятое — /fdfe/purchaseStatus или /market/api/ApiRequest — проверить статус покупки — получить nonce и прочие параметры о покупке в json
Шестое — /market/api/ApiRequest — получение Nonce, деталей покупки
Седьмое — запрос к /market/api/ApiRequest и получение какой-то интересной строки типа ‹ г bе`PxБОі‰‰ эњ — я не понял, что это.

Также не ясно, почему запросы идут то к /market/api/ApiRequest, то к /fdfe/* при покупке. Может я попал под тихую смену протоколов?

+ большой брат следит за тобой! Переодически уходят запросы на /fdfe/log:
image

Вместе с этим приходит push-уведомление с данными о том, что, «ваша покупка загружена», либо «не удалось совершить покупку» — пока остановился на этом. А без уведомления ничего не работает. Еще одна степень защиты, однако.

Забавно, что все это дело (push) работет через TCP over SSL/TLS (уважаю), ВНЕЗАПНО, по mtalk.google.com (был в полной уверенности, что будет что-то на подобие XMPP), ан нет — protobuffers в base64 и что-то еще:
image

To be continued... (если меня, конечно, корпорация добра не забанит)

PS:
Удалось уже сэмулировать и вполне работает покупка восстанавливаемых покупок, но очень нестабильно. Если хотите как-то помочь, составить, например, .proto файл для ответов маркета — добро пожаловать в личку.
PSS:
Я работаю не один, мне помогает человек с ником madkite, не знаю, есть ли он на хабре. По ходу нет.

Автор: ZonD80

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js