2016年8月30日火曜日

解決:ESP-WROOM-02のソフトAPが頻繁にハングアップする問題

ESP-WROOM-02のソフトAPが頻繁にハングアップする問題に悩んでいたが解決した

大ハマりのオチってこんなパターンが多い

原因はArduinoIDEのesp8266用パッケージが古すぎたこと
IDEのツール→ボード→BoardsManagerからesp8266用パッケージをアップデートすればOK

電源容量やAPIの仕様を散々調べたオチがこれで脱力してしまった
これまで30分おきにリセットして強引に運用していたのがバカみたいだ

位置偽装の検証では動作不良の監視のためにPCから操作していたがそれも不要になる
単純なシリアル出力で良いのでArduinoなどのマイコンに置換したい
(もしくはESP-WROOM-02の1基に行わせたい)

2016年8月25日木曜日

ポケモンGO位置偽装雑記

検証中に得られた知見のメモ
以下、位置偽装とある場合はすべて外部機器を用いたAP偽装を指す

これだけ頑張っても他のチートとリスクは同じ

偽装先の距離とペナルティについて:
・50km先の偽装に成功
・ソフトBAN(ペナルティ)に遭遇
ポケストップを回しても無反応(メッセージも一切なし)
ポケモンは1回ボールを当てると必ず逃げる(揺れる回数にはブレがある)
※つまり1回で逃げない場合はソフトBAN状態ではない、といえる
15分程度間を空けてログインすると解除されている


GPS非搭載機種での動作について:
GPS非搭載機種のみ、GPS測位のタイムアウトが発生する
タイムアウト後は普通にプレイ可能
ただし、中華Androidタブレットなどで
『GPS非搭載だが、GPS搭載機種としてファームがビルドされている』
ものがあり、これの場合はGPSのタイムアウトが発生しない(プレイ続行不可)


無線APについて:
・無線APの数を3台→6台にしたら明らかに安定度が増した
・6台使用して3台ずつ交互にMACアドレス変更することで空白地帯を設けないようにした
(MACアドレス設定変更後、APに10~20秒程度のリブート時間が必要なため)
・ESP-WROOM-02は起動時に大電流を引っ張るので起動のタイミングをズラすとよい
(電流不足でブートに失敗する個体が発生するため)
・APが途中で落ちてしまう問題は未解決

6台構成だとこんな感じ

フィールドワークについて:
観光地などでwifiの測定を行うと個人のポータブルwifiが山のように引っかかる
実際に測位できるかMACアドレスの位置情報をチェックするサイトで調べること


Androidタブレットについて:
・GPS非搭載のポケモンGO動作可能なAndroid端末がなかなか見つからない
安価なタブレットでもGPSを搭載している機種が殆ど
ネット上の動作確認情報は主に1stリリースのタイミングで行われているためあてにならない
(その後のアップデートにてwifiのみの動作が禁止されたため)
・KindleFireはクライアントの挙動が不安定なため検証に使えなかった
(一応偽装はできた)


iPodTouch(第六世代)の挙動:
・iOS用最新クライアント(1.5.0)でプレイ&位置偽装可能であることを確認
・アンテナ位置は筐体の上部(裏側に黒い電波抜き穴がある箇所)
ここを塞ぐとwifiの掴みが顕著に悪くなる

金属筐体なので抜き穴を塞ぐだけでなかなかいい感じ

・一定周期でGPSチェック→(GPSを探している間は一部操作不可)→タイムアウト後に操作可能→一定周期で…
というループ
一部操作:ポケストップ回転、ジムバトル、ポケモン捕獲

GPS非搭載機種ではこれが頻発

・GPSチェック中にホームボタンで一旦ゲームを抜け、再度ゲームに戻るとチェックをキャンセルできる場合がある


不忍池について:
フィールドワークとして不忍池でMACアドレスを取得した
偽装は成功

・ポッポ→コイキング
・コラッタ→コダック
・イーブイ→ヤドン
・その他レア→ミニリュウ
くらいのノリでポップする
最初の3時間くらいの高揚感が凄い
その後はミニリュウ以外いらねえな…ってなる

そこは別世界
最初のうちはこれに感激
・お祭りみたいな人出
・歩いてる人の9割が歩きスマホでポケモンGOやっててビビる
・止まってる人もほぼ全員ポケモンGO
・ミニリュウがポップするとダッシュする人達がいて怖い
ツイッターか何かで情報共有してるのか?
・乗り入れOKらしく自転車プレーヤーも交じっていて混沌としている
・あれで事故が起きていないのはある意味凄い

・近くに秋葉原があるがめぼしいポケモンがいないため測位せず
・偽装で池の上を歩いても特にペナルティ無し
・敷地に対して建物が少ない(≒APが少ない)ので細かい位置調整ができない


微調整ができないゆえの生殺し状態

2016年8月16日火曜日

KindleFireにポケモンGOをインストールしたメモ

KindleFire(第二世代)で無理やりポケモンGOをプレイしたときのメモ
対応機種に入っていないためすべて自己責任で

一応動くレベルなので期待しない

条件:
・root化はしない
・野良apkファイルは使わない

セットアップ方法:
ポケモンGOのapkファイルを持ってきてインストールしても正常動作しない
(測位ができず地図が一切表示されない)
・KindleFireでGooglePlayが使える状態までセットアップ
・googleマップアプリをapkファイルからインストール
(どちらもたくさんヒットするのでググろう)
これでクライアント起動後に測位が行われるようになる
うまくいかない場合はkindleの再起動を何回かするとよい

googleアカウントマネージャー、googleサービスフレームワークがインストールできないことがある
これはapkファイル自体の問題でありどうしようもない
表面上同じバージョンでも抜き取った端末によって素性が違う様子
手元の環境でもインストールできるものとそうでないものがあった
apkを抽出する端末を変えるか、諦めて野良apkに手を出すかしかない

ポケモンGO起動後に
『位置情報を取得できません』と表示が出る場合はデバッグ機能がONになっているため
設定→端末オプション→シリアル番号を7回タップ
これで『開発者オプション』メニューが新規に表示される
開発者オプション→『仮の位置情報の使用を許可する』をオフに
おそらくこれがandroidでいうところの疑似ロケーションオプションになっている様子

ポケモンGOクライアントver0.33.0でもKindleFireでプレイ可能
(※まとまった時間プレイしたわけではないので注意/不具合あるかも)
どうやらGPS自体が存在しない場合はGPS測位はスルーされる様子
ただしKindleFireはポケモンGOの推奨スペックを切っているので快適ではない
wifi測位のみなので位置情報の精度も酷い

位置偽装も試してはいるのだが動作が不安定
背面筐体がすべて樹脂なので電波の遮蔽がうまくいかない様子


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の出力を極力落とすこと