前提知識/位置情報の取得方法について:
スマホでの測位方法はざっくり以下の3つに分かれる
1.GPSを利用する
複数の衛星の発信した電波を受信して位置を計算する
GPSの受信装置が必要
精度が良く処理は重い
スマホ用GPSは処理の一部をサーバで行っているため別途通信が必要
2.携帯電話の基地局を利用する
衛星の代わりに携帯電話の基地局を用いる方法
GPSよりも処理が軽い
キャリアとの契約およびLTE(3G)の通信機能が必要
3.wifiのアクセスポイント(以下AP)を利用する
衛星の代わりにAPを用いる方法
精度は周辺のwifi設置状況に依存(多ければ多いほど良い)
APと位置情報との紐付けをしているサーバから情報を得る必要がある
一番メジャーなのはGoogleの測位サービス
GPS非搭載、SIMなしwifiのみのタブレットでも測位ができるのはこの方法を使っているため
1.開発者用の機能を利用する
デバッグ用にテストデータを食べさせる機能がありこれを利用する
機能を有効にして偽装したい位置データを与えるだけ
一番簡単だがアプリ側には偽装はバレバレ
2.位置情報取得APIをフック
位置情報取得に使うAPIをフックしてデータを差し替える
基本的にrootを取らないと無理
root前提の偽装ツールはこの方法を用いている
3.BluetoothタイプGPSのフリをする
タブレットなど外付けGPSに対応した機種のみ
GPSとの通信プロトコルは単純なSPPなので簡単に真似できる
外部機器を用いてGPSのフリをして偽装したい位置データを出力する
4.APのフリをする
外部機器を用いてAP自体を偽装する
特定の場所におけるAPの状況を再現できれば位置情報の偽装が可能
複数のニセAPと位置情報―APの関連付け情報が必要になる
また、移動を再現するにはAPの電波強度の増減制御が必要
1.root環境でのアプリケーション実行を禁止する
最もメジャーな偽装方法が使えなくなるため効果が高い
ただしこれを迂回する方法を考えてくるのでいたちごっこになる
2.複数方法での位置チェックを行う
GPSやAPの組み合わせなど複数の方法で測位を行う
データ間の矛盾が発生した場合は偽装と判定する
データ間の矛盾が発生した場合は偽装と判定する
3.テレポートや高速移動チェック
有り得ない移動についてのチェックを行う
そもそも不正が行われることが想定されていない性善説的設計という印象
基本的にクライアント(スマホ)側の自己申告を信じるしかないため、偽装のハードルは低い
位置情報を扱うアプリでは最悪、偽装されても問題が無いようなデザインにしないとマズい
位置情報をゲームのスコアや抽選のシードとして直接使ってしまうと破綻しかねない
0 件のコメント:
コメントを投稿