わかる人にしかわからないシリーズ第2弾。
GoogleのVendingアプリを使わずにAndroid Marketのフリーのアプリをダウンロードする方法についてです。
strazzere.com » Blog Archive » Downloading market applications without the vending app
上記によると、YouTubeの動画をダウンロードするときのトークンの考え方と似てますね。
違いとしては、
・YouTube
動画データをダウンロードするのに必要なトークンを入手するにはgmailのアカウントのログイン認証は必須ではない。
※現在のGoogleのYouTubeの動画プレイヤーでは、トークンを使わずに視聴ページにそのまま動画をダウンロードするためのURLが埋め込まれている情報をそのまま使うようになったので一昔前と同じという感じですが。
YouTubeのまとめ « 突然消失するかもしれないブログ
・Android Market
フリーのアプリをダウンロードする時でも必須らしい。
ということで、strazzere.com » Blog Archive » Downloading market applications without the vending appの情報をまとめると、
Android MarketからアプリケーションをダウンロードするためにHTTPのGETメソッドでリクエストするURLは以下の通り。
http://android.clients.google.com/market/download/Download
※IPアドレスではじいたりというような制限はかけてなさそうです。
必要なパラメータは以下の4つです。
| パラメータ |
説明 |
| userID |
ユーザID
※CGIのパラメータ
※恐らく固定値。最小8文字から最大13文字。
※ユーザID、認証トークン、端末IDは相互に関連づけ |
| authToken |
認証トークン
※クッキー。「“ANDROID=”+認証トークン」
※毎回変わる?
※ユーザID、認証トークン、端末IDは相互に関連づけ |
| deviceId |
端末ID
※CGIのパラメータ
※恐らく固定値
※ユーザID、認証トークン、端末IDは相互に関連づけ |
| assetId |
アプリケーションのアセットID
※CGIのパラメータ
※半固定値。Android Marketのアプリの登録状況が変わるなどアプリに何か変更がされると変わるらしい |
ユーザIDは、gmailのアカウント(現在、携帯電話にリンクされている)とだけ関連づけられているユニークなIDです。
※ユーザIDを取得する一般的な方法は調査中らしいですが、googleサーバに対するSSLリクエストで要求していると考えられているようです。
ここが肝ですね。gmailのアカウントと端末ID+何かの情報を使って認証トークンを取得しているんだと思います。
Googleのことだから大して難しいことしてないと思うんですよね。どうせ有料のアプリをダウンロードするときは、Google Checkoutを使って、結局、自分のクレジットカード番号などで決済されるので、Googleとしてはとりっぱぐれはないですし。購入したアプリをタダで配られたりすると困るでしょうけど・・・。
※当面、Android Marketとの通信をWireSharkでtcpdumpすることによりユーザIDを取得することができるようです。具体的には、WireSharkでアプリケーションをダウンロードをしているところのhttpの”GET”をリクエストを探せば良いようです。
ユーザIDは最小8文字から最大13文字で、不正なユーザIDをリクエストした場合は、403 forbiddenのレスポンスが返ってきます。
認証トークンはクッキーで送信することにより、ユーザが正当でエクスパイアしていない認証トークンを使用しているかを認証します。
認証トークンは、ユーザIDとリンクされていて、gmailのアカウントと関連づけられているユーザIDと一致している必要があります。
エクスパイアしているトークンを送信した場合、403 forbiddenのレスポンスが返ってきます。
端末IDはAndroid_IDで、認証トークンあるいはユーザIDと関連づけられています。
ということで、ユーザID、認証トークン、端末IDの3つがセットで関連づけられているようです。
アプリケーションのアセットIDは、現在通信しているセッションにおいてダウンロードしたいアプリケーションを識別するためのIDです。
尚、アプリケーションのアセットIDは、常に同じというわけではなく、アプリケーションで何かが変更されたときに変わるようです。
う~ん、スニファー環境作るしかないか・・・。
Glad you like my posts :)
ピンバック:Android Marketのハック事情(3):種割れ « 突然消失するかもしれないブログ
ピンバック:Android Marketのハック事情(5):Android Marketのクライアントソフトウェア « 突然消失するかもしれないブログ
ピンバック:Android Marketのハック事情(6):Androidの固有識別情報-1/ANDROID_ID « 突然消失するかもしれないブログ
ピンバック:Android Marketのハック事情(8):Android Marketのプロトコル-1 « 突然消失するかもしれないブログ