2016年9月24日土曜日

電子工作的アプローチによるポケモンGoBOTの作成

まえがき:

スマホ用アプリはリエンジニアリングが容易であるため、BOTはシミュレータを使用するかアプリを改造するのが定石である
ここでは実用度から目を背けつつ、実機を外部から操作する方法でポケモンGo用BOTの作成を行う

GoPlusが入手できないのが一番のハードルか
注意点:

作成コストが高く低性能なので期待しないこと
BAN回避の施策もない
BOTに使用するポケモンGoPlusの仕様上一時間以上の連続稼働が不可能(一時間おきに再接続が必要)


作成ルールと方針:

・正規のポケモンGoアプリをそのまま用いる
・root化しない
・外部アプリを用いない
・電波法を遵守(無線機器の分解、改造は行わない)


システム概要:

システムは以下3つのユニットとクライアント(iPodTouch)から構成される

・位置偽装ユニット
 複数のESP-WROOM-02と制御用Arduinoから構成されるユニット
 任意地点の無線アクセスポイント(以下、APと表記)の再現(偽装)を行う
 (※作例ではArduinoの代わりにノートPC/USBシリアル変換を使用)

・GoPlus連打ユニット
 ポケモンGoPlusとサーボモータ、制御用Arduinoから構成されるユニット
 GoPlusのボタンを定期的に押すだけ

 2016/10/02追記:iOSではボタン押し下げ固定でもOKの模様

・iPod昇降ユニット
 サーボモータと制御用Arduinoから構成されるユニット
 台の上に置かれたiPodTouchを上下に揺らすだけ(揺らす意味は後述)

・クライアント(iPodTouch)
 実際にポケモンGoアプリが動作するクライアント
 GPSが搭載されていると偽装に都合が悪いのでiPhoneは使えない

※説明の便宜上制御用Arduinoがユニット毎に存在するが、それぞれの制御は簡単なので一つのArduionにまとめても良い

位置偽装ユニット(左下)と連打ユニット(右上)
昇降ユニット:100均のスマホ置台を流用

システム動作概要:

位置偽装ユニットは任意地点の無線アクセスポイント環境を再現(偽装)する
クライアントはWifiで測位を行うため、位置情報を誤認してしまう
(クライアントがLTE通信機能なし、GPS非搭載であることが大前提)
偽装地点を一定間隔で変更することで、偽装先での移動が再現できる
外部機器を用いた位置偽装を参照

GoPlus連打ユニットは一定周期でGoPlusのボタンを押し続ける
上記偽装移動によってポケストップやポケモンを検知した場合はそれぞれのゲットが可能
(ボタンの空押しペナルティが無いため、連打で問題無い)

iPod昇降ユニットは一定周期でiPodの置き台を上下に揺らし続ける
iOSではジャイロセンサ(もしくは加速度センサ)を再測位トリガーに用いている
置き台の上に置いたiPodTouchを揺らすことで再測位を誘発する

以上のユニット動作によりクライアントは移動を誤認し、GoPlusの連打によってゲームを自動進行できる


動作例:

以下は動作の様子
偶然卵の孵化と速度制限オーバーが発生したがどちらもBOTの動作を妨げない
(GoPlusで操作しているため)


0 件のコメント:

コメントを投稿