2016年8月14日日曜日

ポケモンGOで位置偽装を試したメモ

以下はポケモンGOで外部装置を用いた位置偽装を試した際のメモ

期待されると悪いので最初に結論だけ書くと
・偽装はできた(一応)
・明らかに異常な挙動なので運営にはバレる
・他のチート方法に比べてリスク/メリットの比が悪すぎる
以下は実用的?なチート方法やBOTを調べたい人には無駄な情報
検索ミスで来てしまった人は申し訳ない
一応試したけど実用度はかなり低いです

クライアントバージョン履歴:
日本で配信が開始されてから2回のバージョンアップが行われている
位置偽装に関係する機能も変更されているのでここにメモを残す
なお、古いクライアントはサーバ側からキックされてプレイ不能

・ver0.29.3(2016/07/22)
国内ファーストリリース
GPSオフ(wifi測位のみ)でもプレイできた

・ver0.31.0(2016/07/31)
GPSオフの場合起動しない
起動後にGPSがオフされた場合はオンされるまでゲームは停止する
GPSの測位にタイムアウトが存在し、タイムアウト時には測位せずに続行する
(GPSオン時のみ/GPSオフ時はタイムアウト無し)

・ver0.33.0(2016/08/09)
GPS測位のタイムアウトが無くなった
測位できない場合はプレイ続行不能になる
高速移動における警告が追加
高速移動を検知すると警告画面が表示され、解除するまでゲームは停止する
(孵化装置の距離カウントも停止)
2016/08/18追記:
GPS非搭載機種(KindleFire)にてGPS測位がスキップされることを確認
ただしすべての機種にあてはまるかは不明


位置偽装時の挙動:
以下は外部装置を用いた位置偽装を行った場合のクライアントの挙動について

・wifi測位の周期は20秒前後
測位は連続的ではなく周期的に行われている
周期より短い間隔でAPの設定を変更しても無駄
前の周期と違う場所が測位された場合は移動が発生する
2点間の距離が長すぎる場合は高速移動警告が発生する

・GPS測位が周期的(2~3分)に行われる
wifiと同様に周期的に測位が行われる
wifiで位置偽装していた場合でもここで本来の位置を測位してしまう
wifiと位置が大きく異なる場合はGPSの測位が優先される
wifiで偽装した位置からの距離が長すぎる場合は高速移動警告が発生する

・偽装できた距離について
1km程度離れた場所までは動作確認がとれている
フィールドワークが必要な関係で遠距離での動作確認は行っていない
あまりに距離が離れると高速移動警告以外のペナルティに抵触するかもしれない

・基地局を用いた測位には勝てない
SIMを挿した場合、位置偽装はほとんど機能しない
基地局を用いた測位の周期が短く、優先度も高いのだと思われる

・GPSの測位を無効化できなくなった
ver0.31.0ではGPS測位のタイムアウトが存在したため、電波の遮断などで測位を無効化できた
ver0.33.0では測位に失敗するとゲームが止まるため、単純な方法では無効化できなくなった

・高速移動警告によるBOT対策
高速移動の判定はかなり敏感であり、普通にプレイしていても日に数回は発生するほど
BOTや自動操作による放置中に発生した場合、解除するまでゲームの進行は停止する
どれだけ慎重に制御しても必ず警告が発生するため、警告解除の機能を盛り込む必要がある
一度警告を解除するとしばらくは警告画面が出なくなる


外部装置を用いた位置偽装の問題点:
GPSの定期的な測位を無効化できないのが一番の問題
数分おきに偽装位置からのテレポートが発生してしまう
あきらかに異常な挙動であるため運営にバレる可能性が高い
再測位される(数十秒後)まで偽装位置に戻れないので快適なプレイも無理
また、テレポートによって高速移動警告が頻発するためこの対策も必要
(放置時にリレータッチボード等を用いて外部から解除することは可能)


外部装置を用いた位置偽装のメリット:
本来の位置から100~200m程度の偽装ならばGPS誤差に紛れることができる
root化不要/海賊版クライアント、無許可APIの類を用いるリスクが無い
今後クライアントがアップデートされても使える可能性が高い
ポケストップや沸きポイントを巡回するようなマクロを組んでおけばオペレーションフリー
勝手に移動するので部屋の中からスマホ実機でプレイできる
(移動以外はユーザーが操作する必要がある)


その他の情報:
・孵化装置のアベレージは2km/h程度
wifi検知周期と高速移動警告のバランスをとるとこの程度になる
同じマクロで動かしても距離のブレが大きい
これはGPS測位に伴うテレポートをカウントする場合とそうでない場合があるため
条件はイマイチ掴めない

・ESP-WROOM-02のソフトAPがよく落ちる
2~3時間に一回は落ちて動作しなくなる
メインループ自体は生きているので何がおかしいのかがよくわからない
頻繁にMACアドレスを変更するのがダメなのか…?
現在は定期的な本体リセットによって無理やり解決している

・クライアントの挙動がおかしい場合は再起動
よくいわれているソフトBAN(軽微なペナルティ)は全然発生しない
(ただし遠距離の偽装については未確認)
稀にポケストップが反応しなくなるのだがアプリを再起動するとすぐ直る
ソフトBANではなく単なるクライアントの不調ないしバグに見える

・スマホの発熱が凄い
リッチクライアント+高頻度のwifi(GPS)アクセスによる負荷と発熱が凄い
また、バックグラウンド動作やスリープ中の動作もできない
マクロを数時間回すと発熱の警告で充電が止まる
ファン等で冷却しないと長時間放置は無理

・本来のナイアンティックのBANは苛烈
今のポケモンGOは各種不正を完全放置している状態にある
これはおそらく各国でのローンチやバグの修正にリソースを割いているため
イングレスを見る限り本来のナイアンティックは不正に対してかなり厳しい
巻き添え誤BAN上等で位置履歴に基づく容赦のない処分を行った過去がある
ポケモンGOもリソースに余裕ができたら履歴に基づき大量処分が行われるものと思われる

2016年8月5日金曜日

改良編:外部機器を用いたスマホの位置偽装

前回完成したものをブラッシュアップしたメモ

今度こそこれで完成としたい

前回の問題点:
周囲のAPを遮断しきれない点が一番のネック
どれだけ頑張って偽装しても本来の測位をされてしまった時点で台無しになる


改良の概要:
再現用AP(群)と偽装対象のスマホを電波を遮断する容器に密閉してしまう
完全な遮断は無理だがこのシステムに必要な程度の減衰は十分望める


必要なもの(前回用いたものは省略):
・電波遮蔽用の容器
再現用APとスマホが入る容積があること
電波を遮蔽する素材でできており、密閉できること
ケーブルを引き込む開口加工が容易であること
以下は実用性のあったもの
1.100均のクーラーバッグ
アルミシートで表面が覆われており適度な容積がある
何より安価で入手しやすい
難点は保温性があること
スマホが発熱するためこれは都合が悪い
2.100均一のアルミシート
樹脂シートにアルミを蒸着させたもの
単独で使ってもよいし、他の容器をさらに包んでもよい
保温用途に裏地が厚いものは避けたい
3.クッキー缶や茶筒
密閉性が高く堅牢である
より効果を上げるには継ぎ目をアルミテープで目張りするとよい

画像はバッグタイプだが角型の方が使いやすい

出来ればペラペラのものを選ぶ


・必要に応じた各種ケーブル等
密閉してしまうため当然ながら画面を見ることはできないし、操作もできない
HDMIケーブルやUSBマウスなどを用意すること
また、スマホと自宅Wifi間も相応に減衰してしまうのでできれば有線LAN接続すること
マクロによる完全放置ならば不要

・タッパなどの絶縁容器
偽装用APが基盤むき出しの場合に使用
遮蔽用の容器は伝導性があるため、そのままではショートの恐れがある
絶縁容器によって保護すること


改良の方法:
前回のシステムを絶縁容器で包むだけ!
必要に応じてケーブル穴を開けること
スマホの温度上昇に気を付けていきなり長時間放置しないこと



2016年8月3日水曜日

運用編:外部機器を用いたスマホの位置偽装

完成した外部機器を用いた位置偽装でいろいろ遊んでみた
以下は得られた知見について

なお、ゲーム等では位置偽装はBAN対象であるため使用しないこと
ちょっと楽しくなってきた

知見とかTIPS:

・止まるよりも動き続けた方が良い
動き続けた方(一定間隔で偽装先を変更した方)が明らかに偽装の精度が上がる
前回の測位と同じ位置にいるよりは近くの別の位置にいた方が信頼される様子

・近距離ならGPSオンでも使える
本来の位置から半径200m程度ならば問題なく偽装できた
(SIM抜き/GPSおよびWifiの測位を許可)
これより距離が離れると本来の位置へのテレポートが頻発する
(ただしアプリの位置測定アルゴリズムに依存する話)

・基地局を使った測位には勝てない
SIMを挿して基地局を用いた測位を行った場合は使い物にならない
本来の位置へのテレポートが頻発して偽装の用をなさない
GPSに対して測位のスピードが速く、精度も高い様子

 ・細かい調整が難しい
メートル単位の調整は難しい、というか無理
選択するAPを変えて運よく目標位置になることを祈るしかない
APの電波強度の強弱まで制御するならば調整可能か?

・アルミテープ加工したスマホの外観が酷い
毒電波を気にしてる系ユーザー、もしくは板チョコ弄ってるアレな人にしか見えない
外に持ち出すときは絶対にアルミテープを剥がすこと


手前の銀色の塊が加工済スマホ(裏面)

nomapのオプトアウトには時間がかかる
ただちにデータベースへ反映されるわけではない
位置偽装では自宅のwifiが一番のノイズ源
モバイルwifiならば気にしなくてもよいのだが

・運用によるテレポート回避
遠隔地を偽装する場合は
APによる再現開始→アプリ起動→アプリ操作→アプリ終了→APによる再現終了
ただしどうやっても短時間で移動不可能な距離の連続偽装は行わないこと

・シリアル通信経由でのMACアドレス変更
APのファームを毎回ビルドするのは不合理なのでMACアドレスは外部から変更可能にしておく
シリアル通信でコマンドを投げる方法が一番楽

・シリアル通信のブロードキャスト(もどき)
 再現用APの数だけシリアル通信ポートを準備するのも不合理
 送信側のTXに対して各APのRXを同時に接続することで簡易的なブロードキャストが可能
 各APに対して同じコマンドを同時に送信することができる
(注1:ここでは電気的なリスクは考慮していないので注意)
(注2:逆の接続(送信側のRXに対して各APのTX)を行っても混信するだけで使えない)
コマンドの中にどのAPへの命令なのかを埋め込むこと

シリアル通信による移動指示、ループ指示
ブロードキャストしたコマンドでMACアドレスが変更可能になったらかなり実用度が上がる
各場所におけるMACアドレス変更コマンドを列挙してtxtファイルにする
これをTeraTermなどのターミナルにD&Dするだけで位置設定が可能になる
また、マクロを用いることでループ処理やコマンド間のウェイト制御が可能


 実用的な使用方法:

・近所を永久ロングウォーク
近所の周回コースを測位しておき、コース上を延々とループするように位置偽装する
移動距離がポイントになるようなケースで使用する
万一本来の位置を測位してしまってもテレポートする距離は短くバレにくい
ありえない移動速度にならないように適宜ウェイト調整が必要になる

 ・長距離テレポートピンポンダッシュ
遠隔地に偽装した後、ごく短い操作を行った後即座にアプリを終了する
チェックポイント到達に意味があるケース、そこでスタンプなど短い操作を行うケースで使用
遠隔地で偽装し続けることは難しいが、短時間で操作が終了するならば問題は起きない
次回アプリ起動時に矛盾が起きないように気を付けること
(東京のチェックポイント通過→アプリ終了→5分後に大阪でアプリ起動、など明らかに異常な記録が残る)

・バス停を家の前にもってくる
家の近くにあるポータル的なものへ位置偽装を行う
自宅から外出せずに近所のポータルへ直接アクセス可能になる
数百メートル程度の位置偽装ならばリスクがかなり低く効果が高い
ただしごく近所のAPを偽装するためトラブル要因になりかねない
再現用APの出力を極力落とすこと