スターバックスは、そのAPIへのパブリックアクセスを開く必要があります

スターバックスモバイルアプリは、最も有名なeコマースケースの1つです。 この資料の著者は、このアプリケーションのAPIを開く価値がある理由を実験的に証明するプログラマーです。



画像



やる気



Starbucksアプリにクレジットを与える価値があります-それは素晴らしいことです。 私は(少なくとも)1日1回使用します。 コーヒー、 Spotify 80sプレイリスト 、他の人とのライブチャットを回避する機能など、優れたモバイルサービスに必要なものがすべて揃っています。 米国でのスターバックスの事業の20%が現在携帯電話を介して行われているため、私は自分の好みが明らかに一人ではありません。



Slackコーヒーボタンの 統合に加えて、サードパーティの開発者向けにAPIを公開した場合に実装できる他の多くの統合があります。 彼女は開発者向けのTwitterアカウントと(パスワードで保護された)Webサイトの両方を持っているため、明らかにこの方向に動いています。



しかし、私は待つことができなかったため、問題を自分の手に委ねることにしました。



簡単ではなかった



スターバックスはクラックするのが難しいことが判明しました。 「openapi.starbucks.com」というURLにもかかわらず、アプリケーションによって行われた呼び出しの分析を開始する前に、深刻なジャングルを通り抜けなければなりませんでした。 他の支払い処理アプリケーションと同様に、スターバックスは、アプリケーションで使用されるAPIを不正使用から保護するために多くのセキュリティ対策を講じています。 それらのいくつかを次に示します。





ネットワーク要求の監視



開始するには、Starbucksアプリケーションとそのサーバー間で交換されるリクエストとレスポンスを監視する方法が必要でした。 通常、私はCharles (またはmitmproxy )でiPhoneをセットアップするだけで十分でした。



しかし、今回は違います! アプリケーションは証明書の固定を使用しているため、通常どおり、要求を傍受できませんでした。 代わりに、古いAndroid携帯電話を掘り下げ、 ルート権限を取得しXposedというフレームワークをインストールし、最後に実行中のアプリケーションに統合してSSLピニングを無効にする拡張機能をインストールする必要がありました。



画像



ムアハハ



開始後、Charlesプロキシを使用してリクエストの表示を開始できました。 ただし、すべてのリクエストを簡単に再現できるわけではないため、これはかなり誤った希望であることが判明しました。 ただし、たとえば、最寄りの店舗、メニュー、カード残高などの基本情報を要求することはできました。



画像

最寄りの店舗に関するクエリの結果。 今、あなたは私が働いている場所を知っています。 おっと



「簡単です」と思ったのですが、「プロキシサーバーに接続して注文した後、リクエストを再生するだけです!」


しかし、ありません。



判明したように、スターバックスのアクセストークンは1時間しか有効ではないため、携帯電話で使用されているトークンをそのまま使用することはできません。 これにより、特定の困難が生じます...



ログイン



アプリケーションで使用されるOAuthエンドポイントは、トークンを発行する前に3つのパラメーターをチェックします。





私は自分でそれらのいくつかを形成しようとし始めました。 ジェイルブレイクしたiPhoneを使用してdeviceFingerprintを作成するために使用する暗号化キーを取得し、Starbucksアプリ内のフレームワークを解読することができました。 しばらくの間、 Hopperでフレームワークを研究していた私は、最終的にApple CCCrypt関数の呼び出しを追跡することができました。



画像



www.youtube.com/watch?v=o8ZnCT14nRc



次に、SBXDataフレームワーク(以前にジェイルブレイクした電話で解読したフレームワーク)を急いで作成したアプリケーションにリンクし、 Fishhookを使用してこの機能を自分の実装に再割り当てしました。 これにより、キーと関連パラメーターをコンソールにアップロードできました。



画像



同様に、「X-Cbt」ヘッダーの生成方法を見つけることができました。 簡潔にするために、このタスクはあなたにお任せします:)



おわりに



ログイン要求から指紋に署名して指紋を削除できた後、すべてを小さなNode.jsモジュールに統合しました。これにより、Starbucks APIの基本機能の一部を使用できます。 良いニュース:GitHubに(ほとんど) ここに投稿さています!



出来上がり! プログラム可能なコーヒー。



画像



All Articles