前回引っかかった問題について解決したためここにまとめる
なお、ゲーム等では位置偽装はBAN対象であるため使用しないこと
精度がイマイチなのでゲームとかはroot取って偽装した方がマシだと思う |
概要:
wifiアクセスポイント(以下AP)を用いた位置測定方法に対して任意位置の偽装を行う
偽装したい場所のAP環境を再現することで測位を誤認させる
外部機器を用いたアプローチで実現するため、偽装用アプリの使用やroot化等は行わない
必要なもの:
・スマホ
偽装を行うスマホ本体
できるだけwifi受信感度が『弱い』ものが好ましい(後述)
GPSは非搭載でもよい
今回はAndroid機で実験しており、iOS機でどうなるかは不明
・偽装対象のアプリ
GPSオフかつSIM無しでも動作すること
・複数台のwifiAP
必ずMACアドレスが変更可能であること
数は多ければ多いほどよい
今回はESP-WROOM-02を用いた
ソースコードはサンプルにわずかに手を入れる程度なので割愛
・アルミテープ
厚みのあるアルミ箔に接着剤がついたもの
ホームセンターなどで購入可能
準備できなければ銅箔テープやアルミホイルでもよい
・wifi測定用のアプリと実行環境
周囲のwifi環境を調べるスマホ用アプリケーション(Wifi Analyzerなど)
APの電波強度とMACアドレスが調べられる機能があること
適当なスマホにインストールして測定可能な環境を構築しておくこと
PC用アプリとノートPCを使ってもよい
実現方法:
1.偽装したい場所の調査(フィールドワーク)
偽装したい場所に行き、アプリを用いて周囲のAP環境の測定を行う
各APについて以下の情報を取得する
・SSID(APの名前)
・MACアドレス(BSSID)
・電波強度
精度を上げるならば測定位置を中心に10m程度移動して複数回測定すること
2.APの精査
測定したAPを精査して環境再現に用いるAPを選ぶ
以下の条件で絞り込みを行うこと
・電波強度が強いものを選ぶこと
電波強度が強いほどその場所から近いAPといえる
・同じ機器からは一つのみ選択
連番のMACアドレスは同じ機器のマルチSSIDに対して振られたもの
・モバイルルータは弾くこと
モバイルルータには位置情報の結びつけが無いため避ける
SSID名から類推すること
・店舗のAPを選ぶこと
店舗のフリーAPはその場所との結びつきが強く、位置測位に用いるのに向いている
3.再現用APの準備
前項で精査したAP情報を用いてAPを立てる
この際、SSIDはコピーせずに適当な名前を付けること
(測位には用いられないため/実在するAPのSSIDを用いることは避ける)
MACアドレスのみを用いて再現を行う
再現用APはインターネットに接続しなくてもよい
また、MACアドレス照会に返答する以外の機能は不要
立てるAPは多いほどよい
外部からAPにアクセスされないように極力電波強度を下げること
4.スマホへの加工
スマホのwifi受信感度を『下げる』加工をする
これは周囲のAPの電波をなるべく掴ませないようにするため
周囲のAPの情報から正しい測位をされてしまうことを防ぐ
再現用APは至近距離から電波を出せるので受信感度を下げても問題ない
スマホのwifiモジュール付近にアルミテープを包むように貼る
(wifiモジュールの配置はスマホの上部であることが多い)
実際に受信感度が下がることをwifi設定画面等で確認すること
5.効果のプレ確認
googleマップアプリを用いて位置情報が偽装されているかを確認する
マップアプリは偽装検知が緩い(もしくは無い)ため確認に向いている
ここでうまく偽装できてないようならば他のアプリでも無理
APの精査をやりなおすか再現用APを増やすこと
6.アプリの動作確認
目的のアプリで位置情報が偽装されているかを確認する
失敗する場合はAPの精査をやりなおすか再現用APを増やすこと
TIPS:
・自宅に無線AP名を『~_nomap』に変更すること
googleの測位データベースから除外するため
・偽装はできるだけ近場にすること
どれだけ受信感度を下げても周囲のAPを完全にシャットアウトはできない
このため偽装中に突然本来の位置を測位してしまう場合がある
遠隔地に偽装していた場合は長距離テレポートがサーバ側に検知されてしまう
一方、測位を数100mずらす程度ならば検知されても誤差として処理される希望が持てる
・アルミテープ最強伝説
最初はアルミホイルを使っていたがうまくいかなかった
アルミテープは隙間なく目張りできるので作業しやすく効果が高い