ゲーム

ポケモンGOのお供「Pokémon GO Plus」をリバースエンジニアリングして「複製できる!」と豪語する猛者が登場


スマートフォン向けゲーム「Pokémon GO(ポケモンGO)」をプレイする時に助けとなるアイテム「Pokémon GO Plus」をリバースエンジニアリングして「Pokémon GO Plusを複製できるようになった!」と豪語する人物が、Pokémon GO Plusで使用されている認証アルゴリズムなどの詳細に丸裸にしたブログを公開しています。

Reverse Engineering Pokémon GO Plus – Tinyhack.com
https://tinyhack.com/2018/11/21/reverse-engineering-pokemon-go-plus/

Pokémon GO Plusのリバースエンジニアリングに挑戦したのはインドネシア人プログラマーのYohanes Nugrohoさん。Nugrohoさんは「Pokémon GO Plusを複製できるようになった!」と豪語するほど中身を熟知することに成功しています。

なお、Pokémon GO PlusについてはGIGAZINEでもレビュー済み。どんな端末か知りたい人は、以下の記事をチェックしてください。

ポケモンGO公式ウェアラブルデバイス「Pokémon GO Plus」速攻フォトレビュー、実物はこんな感じ - GIGAZINE


Nugrohoさんによると、Pokémon GO Plusを複製するためのカギとなるのは、各Pokémon GO Plusに割り当てられているBDアドレスを明らかにするためにBLOBを使用するということ。他人のPokémon GO Plusに割り振られたBLOBを使用すると、将来的に運営元のNianticにアカウントをBANされる可能性があるそうです。Nugrohoさんは自身のブログの中でPokémon GO Plusを複製するために必要となる認証アルゴリズムおよび、独自に編み出したBLOBを抽出するための方法を解説しています。

Nugrohoさんいわく、2016年9月のリリース当初、Pokémon GO Plusはリバースエンジニアリングに対して全くの無抵抗で、何も保護されていない丸裸の状態だったそうです。しかしその後、短期間でNianticはサーバーへの要求に対して複雑なハッシュアルゴリズムを実装するようになったとのこと。その後、2017年1月に海外掲示板redditのユーザーがPokémon GO Plusのリバースエンジニアリングについての詳細な投稿を行っていますが、「これも完ぺきなものではなかった」とNugrohoさんは記しています。

また、Datelなどの企業がサードパーティ製のPokémon GO Plusの代替デバイスを販売していることについて、Nugrohoさんは「DatelはPokémon GO Plusのリバースエンジニアリングについての詳細などは公表していない」としており、どうやってPokémon GO Plusと同じように動作するデバイスを作っているのかは不明としています。そのため、一般ユーザーにとって「Pokémon GO Plusは相変わらず謎の詰まったデバイスのまま」でした。そこで、Nugrohoさんは独自にPokémon GO Plusの完全なリバースエンジニアリングに挑戦することにした模様。


認証アルゴリズムの解明にはPokémon GO Plusが採用しているBluetooth Low Energy(BLE)関連の3つの要素「バッテリー状態」「LEDとボタン」「証明書」を理解する必要があるそうです。Nugrohoさんによると、ポケモンGOでPokémon GO Plusのような周辺機器を認識するには、「Pokémon GO Plus」や「Nintendo Switch」のような名前をまず通知する必要があるとのこと。そして、(Pokémon GO Plusの)LEDやボタンが使えるようになる前に、認証をクリアしなければスマートフォン側とのペアリングは完了しないそうです。

この認証のアルゴリズムを解き明かすために、BLEトラフィックに基づいたリバースエンジニアリングに挑戦した人もいたそうですが、それでは認証アルゴリズムの詳細を知ることはできませんでした。その理由について、Nugrohoさんは「プロトコルがAES暗号化を使用していたから」と語っています。暗号のメカニズムとして「CTR」なども用いられているとのこと。


なお、ポケモンGOとPokémon GO Plusで認証プロセスにおいて、どのようなアルゴリズムが働き、複雑なデータのやり取りが行われているのかはNugrohoさんのブログに詳細に書かれています。かなり複雑かつ難解ですが、「PokemonGoooooooo」という文字列が含まれる最後の伝達が終わると、アプリがボタン通知に同意し、ジムやポケストップ、ポケモンを発見するたびにLEDにそれぞれの特性に合った通知を送るようになるとのことです。

ここまで終わると画面上のモンスターボールがグレーアウト表示から通常表示に切り替わり、ポケモンGOとPokémon GO Plusが接続されます。


認証アルゴリズムを理解したNugrohoさんは、解き明かした認証アルゴリズムの正しさを確かめるために、マイコンボードのRaspberry Pi Zero Wを使って実際に認証が可能かテストしようとしますが、最終的にESP32を使用することに決めたそうです。その理由はBluetoothスタックのBlueZをデバックするのにRaspberry Pi Zero Wではあまりに多くの時間が必要になってしまうからだそうです。Nugrohoさんは過去にBLEのプログラミング経験はなかったそうですが、「安価でプログラミングが簡単」という理由で採用したESP32でのBLEプログラミングは「とても簡単だった」と記しています。

なお、Nugrohoさんがこの時に作成した、ESP32用のPokemon GO PlusエミュレーターはGitHub上で公開されています。このエミュレーターでは、NugrohoさんはESP32をポケモンGOとペアリング可能かどうかがテスト。テストでは「ペアリング、切断、再接続が可能か?」「周りにポケモンがいる場合に通知を受けることができるか?」「ボタンを押せばポケモンを捕まえることができるか?」の3点がテストされたそうで、それぞれしっかりとクリアしている模様。

GitHub - yohanes/pgpemu: Pokemon GO Plus emulator using ESP32


リバースエンジニアリングの結果、NugrohoさんはDatelやCodejunkiesといった企業が完ぺきなPokémon GO Plusの模倣品を販売できている理由について、「BDアドレス・BLOB・カギの組み合わせはほとんどわずかしかないから」「これら3つを結びつける簡単な式があり、秘密鍵は必要としないから」「アルゴリズムがPokémon GO Plusの製造工場から漏洩したから」などの可能性を挙げています。

また、Pokémon GO PlusのBLOBとカギを公開することも考えたそうですが、そうすると運営元のNianticが特定のBDアドレスを接続からブロックする可能性があるということで、公開は断念したとしています。また、配布したBLOBから得たBDアドレスを多くのユーザーが使用することで、誰もがNianticからアカウント停止の制裁を食らう羽目になることも危惧しています。

加えて、Nianticがサードパーティ製のPokémon GO Plusのようなデバイスを快く思っておらず、最悪の場合はアカウント停止処分になる可能性についても言及していることも指摘しています。

Hey Brandon! Pokémon GO Plus is currently the only authorized accessory for Pokémon GO. Using other accessories may negatively affect your gameplay and may result in account blocking or termination. Hope that helps! ^AM

— Niantic Support (@NianticHelp)

この記事のタイトルとURLをコピーする

・関連記事
ポケモンGO公式ウェアラブルデバイス「Pokémon GO Plus」速攻フォトレビュー、実物はこんな感じ - GIGAZINE

「Pokémon GO Plus」実機プレイレビュー、どれぐらいポケモンGOのプレイが超絶楽ちんになるのか? - GIGAZINE

「Pokémon GO Plus」で自動でポケモンをゲットできるように改造するムービー - GIGAZINE

「Pokémon GO」からポケットモンスター Let’s Go!へポケモンを送って遊べる「GOパーク」へ実際にポケモンを転送してみた - GIGAZINE

「ポケットモンスター Let’s Go! ピカチュウ」プレイレビュー、Nintendo Switchのポケモン最新作はどんな感じなのか早速遊んでみた - GIGAZINE

in ソフトウェア,   ハードウェア,   ゲーム, Posted by logu_ii

You can read the machine translated English article here.