От Слабые интеграции к Кофейные кнопки , существуют множество потенциальных интеграций, которые могут быть построены, если они открыли их API сторонним разработчикам.
Мотивация
Чтобы дать кредит, где он должен быть, приложение Starbucks отлично. Я использую это (как минимум) один раз в день. У него есть все, что я ищу в отличном мобильном опыте – кофе, Fire 80’s Spotify плейлисты и отсутствие взаимодействия с другими людьми. Я явно не одинок в этих желаниях, как 20% транзакций Starbucks в США теперь сделаны с помощью мобильных телефонов Отказ
Из слабой интеграции к кофейным кнопкам есть множество потенциальных интеграций, которые могут быть построены, если они открыли их API сторонним разработчикам. Они явно движутся в этом направлении, так как они имеют оба аккаунт в Твиттере и (защищенный паролем) Сайт для разработчиков.
Однако я не мог ждать, поэтому я решил взять дело в свои руки.
Они не сделали это легко
Как оказалось, приложение Starbucks – это жесткая гайка для трещины. Несмотря на URL-URL ” open api.starbucks.com,« Есть несколько неясные обручи, чтобы перейти до того, как можно даже начать анализировать вызовы, которое делает приложение. Как следует в случае с любое приложение, которое обрабатывает платежи, Starbucks предпринял множество мер безопасности для обеспечения API, которые их приложение использует от несанкционированного использования. Вот некоторые из них:
- SSL сертификат Pinning.
- Отпечаток пальцев атрибуты вашего мобильного телефона, чтобы увидеть, если это «Phonelike»
- Шифрование этого отпечатков пальцев с использованием AES, с 256-битным ключом и вектором случайной инициализации
- Подписание запросов с текущим временем
Наблюдение за сетевыми запросами
Первые вещи сначала мне нужен способ наблюдать за просьбой и ответами между приложением Starbucks и их серверами. Обычно я бы просто указывал на мой iPhone на Чарльз (или Mitmproxy ) И я буду на моем пути.
Не в этот раз! Поскольку приложение использует закрепление сертификата, я не смог перехватить любые запросы, поскольку я обычно бы. Вместо этого я должен был выкопать старый телефон Android, корень Это, установите рамки под названием Xposed и, наконец, установите Расширение который вводит себя в бегущих приложениях и Отключает SSL Pinning Отказ
Муахахахахахахах
Как только я это запустил, я смог начать просмотреть запросы, используя Charles Proxy. Эта рана была немного ложным рассветом, как Не все запросы могут быть легко воспроизведены Отказ Тем не менее, я смог запросить базовую информацию, такую как близлежащие магазины, пункты меню и остатки карты.
Результат ближайшего запроса магазина. Теперь вы знаете, где я работаю. Овел
«Легко», – подумал я, – я просто сделаю заказ, подключенный к прокси-серверу и повторю запросы позже! »
Неа.
Как получается, Starbucks истекает свои токены доступа через час, так что вы не можете просто захватить свой телефон, используемый и держаться на него. Что создал некоторые ВЫЗОВЫ …
Вход в систему
Конечная точка OAUTH, используемая приложением, проверяет три параметра, прежде чем предоставление токена:
- Параметр строки запроса SIG ‘. Исследователь безопасности Ryan Pickren Выявлено Что это клиентский ключ, секрет клиентов и текущий момент времени Unix объединенные вместе и пробежать через MD5 Функция хеширования.
- Параметр формы «DeviceFINGRINTPRINT». Это закодированный AES-256 AES-256 AES-256 AES-256 из различных атрибутов устройства. Он также регулярно меняется, поскольку текущее время, а также время работы устройства включены в отпечаток пальца.
- HTTP HTTP ‘X-CBT’. Еще одна секретная строка закодирована на базе64.
Я начал пытаться построить некоторые из них сам. Я смог захватить ключ шифрования, используемый для создания устройстваFINGRINTPRINT, используя Jailbokon iPhone для расшифровки каркасов внутри приложения Starbucks. Посмотрев на рамки в Бункер Некоторое время я в конечном итоге смог отследить звонок на Apple Функция Cccrypt Отказ
Затем я связался с их рамками SBXDATA (рамки, которые я расшифровал ранее на телефоне Jailbokle) из быстрого приложения для манекена и использовал FishHook Чтобы переподгонять эту функцию для моей собственной реализации. Это позволило мне сбросить ключ и связанные с ними параметры на консоль:
Выяснение, как генерировать заголовок X-CBT ‘был аналогичным процессом. Ради краткости, я оставлю это для вас
Обертывание
Теперь, когда я смог подписать и отпечатывать свои запросы на логин, я сочетал все в небольшом модуле Node.js, который позволяет некоторым базовым функциям API Starbucks. Хорошая новость в том, что она (в основном) размещена здесь на Github !
Воила! Программный кофе.
О Тендиги
Мы – это мобильный дизайн и студия развития Расположен в Бруклине, Нью-Йорк Отказ Если вы хотите узнать, как мы можем применить наш наградный процесс стратегии, дизайна и инженерии на ваш бизнес, бросить нам строку в hello@tendigi.com Отказ Вы также можете связаться со мной напрямую в Nick@tendigi.com Отказ