ガジェットまみれ生活

オッサンエンジニアの備忘録。 ネットで調べたけどそのままでは上手くいかなかったりとか、前例がなかったりで少々ハマッたり楽しかった事を綴るブログ。デジモノだけじゃなくノージャンルで思ったことや経験を発信する。

Android 2017-03セキュリティパッチでpokemon GOの位置偽装が終了のお知らせ

インチキトレーナーの方々に訃報です。どうやら近日中にセキュリティパッチで位置偽装が終了するようです。

 

 というか既にNexus6にはこの修正が配られて来てて、実際にFakeGPSが全く使えなくって焦った。ちょうどポケモンGOアプリのアップデートと同じ日にOSのアップデートもしてしまったので、どちらが原因か悩んだけどFakeGPSの評価を見ても誰も騒いでないので、OSを古いものに戻したらやっぱりビンゴ!その後もう少し詳しく調べていたら上記リンクに辿り着いたので確定でしょ。

 

どんなアップデートか詳しく知りたい人は↓のリンクの「CVE-2017-0489」を見て下さい。

Android Security Bulletin—March 2017 | Android Open Source Project

CVE References Severity Updated Google devices Updated AOSP versions Date reported
CVE-2017-0489 A-33091107 Moderate All 4.4.4, 5.0.2, 5.1.1, 6.0, 6.0.1, 7.0, 7.1.1 Nov 20, 2016

 

 

以下、バージョン戻しでイロイロと苦労したのでその備忘録

お約束ですが、これを見て何かしてアナタのスマホがおかしくなったとしても私は責任取れませんので悪しからずご了承ください。

 

 

 

バージョンダウンにチャレンジ

1個前のパッチに戻せばいいだけなので過去のOTAをあてればいいだろうと軽く考えて作業開始。さすがにスマホ単体ではできないのでadb sideloadを使うことにする。

 

OTAはこちらからダウンロード

Full OTA Images for Nexus and Pixel Devices  |  Google APIs for Android  |  Google Developers

"shamu" for Nexus6の「NBD91Y」を選択して保存しておいて以下を実行

adb sideload c:\temp\shamu-ota-nbd91y-92882eed.zip

 

残念ながら以下のメッセージが出てsideload失敗。まぁ新しいのに古いのを上書きしようとしたら怒られて当然か・・・

Installing update...
E3003: Can't install this package (Tue Jan 31 00:51:16 UTC 2017) over newer build (Wed Feb 1 00:00:51 UTC 2017).
E:Error in /sideload/package.zip
(Status 7)

Installation aborted.

  

仕方ないのでアプリのバックアップ

OTAがダメだとファクトリーイメージを焼くしかないので環境もアプリも再セットアップで結構面倒。root化してればTitaniumBackupで環境まるっと取得できるけど、非root端末ではアプリのapk程度しかバックアップできないと思ってた。ちょっと調べてみるとHeliumとか言うバックアップツールがあって、ある程度の環境も取得してくれるらしい。最近のアプリはクラウド上に設定があるものが多いので、この程度でもイイやって割り切って作業開始。いつものアンドロイドラバーさんにお世話になる。

 

多少バージョンが違うので手順も違うんだけど、どうもそれだけじゃない原因でバックアップがうまく行かない。英語のページとかも調べたけど、どうやらNexus6はMotorolaさんがイマイチな作りにしているらしくHeliumではバックアップ出来ないらしい。

 

仕方がないので他の方法を調べたら、adbからコマンド駆使してバックアップ・リストアできるらしいので試してみた。基本的にはリンクの通りでいいんだけど、少し間違いがあったりNexus6特異の問題かもしれないが運用対処が必要だったりとこれも結構面倒だった。まずは参考にしたリンクの紹介。

 

以下は私がハマった点

  • -shared指定すると必ず途中で失敗する(ずーっと終わらない)
    ※アプリ量にもよるけど、30分以上かかったらおかしいと思われる
  • -shared指定しなくても50%程度の確率で失敗する(ずーっと終わらない)
    →リソースモニタのネットワークからadbが消えてたら失敗してる
  • LINEはアプリデータ取ってもやっぱり元には戻らない!

 

adb backup -f full-backup.ab -apk -obb -all

PCで上記を入力すると端末側に許可とパスワード入力画面がでるので、1文字でもいいので何か入れて「データをバックアップ」をタップするとバックアップが開始される。リストア時にこのパスワードは必要になるので忘れないように。

f:id:motodefy:20170323171107p:plain

バックアップが正常に終わればこの画面は自動で消えるので途中で触らない事

 

ちなみに、ちゃんとバックアップが動いていればリソースモニター にadbが2個出ているはずだし、ディスク書き出しにも-fで指定したファイルがいるはず。

f:id:motodefy:20170323170939p:plain

adbがいなくなっているのに端末側はフルバックアップの画面のまま、PC上のfull-backup.abが0バイトのままだったら失敗してるのでadbのwindowでctrl+Cでコマンドを停止、端末側ではフルバックアップの画面をタスク切り替えして削除して処理中止する。このときPCにできたファイルは中途半端でリストア出来ないので捨てる。もう一度adb backupからやり直し。

 

 

 

ファイルとLINEのバックアップ

 アプリとデータがバックアップできたら念のためLINEのトーク履歴と写真などのバックアップ。LINEのアカウントは引継ぎ出来てもトーク履歴はサーバには直近のものしか残ってないので、ちょっと面倒でもバックアップしておいた方がいい。まあ捨ててしまっても困らないトークであれば放置で構わないですが・・・

 

リンクはPC不要となってますが、念のため同じファイルをPCにも保存しておいた方が安心。まずは書いてある通り、バックアップが必要なトークを選んで、トーク設定→トーク履歴をバックアップ→すべてバックアップでスマホ内とKEEPにトーク履歴をバックアップしていく。

 

全部のバックアップが終わったら、端末のLine_BackupフォルダをDCIMフォルダの中にコピーか移動しておく。ここまで準備できたらUSBでPCとつないでDCIMフォルダとPicturesフォルダを丸ごとコピーしておく。このときトーク履歴のzipファイルをチェック、もし0バイトのzipがあったら履歴のバックアップが失敗しているのでもう一度LINEに戻ってやりなおす。ちなみに私は結構0バイトのzipがあって復旧できないトーク履歴が多数でした(涙)

f:id:motodefy:20170323174115p:plain

 

最後にLINEの引継ぎ設定をしておかないと後でとっても面倒な事になるので忘れずに。

その他→右上の設定マーク→アカウント
・メールアドレス登録しておく、パスワード忘れずに
電話番号がSMS受信可能な番号になってるか確認、なってなければ設定する

その他→右上の設定マーク→アカウント引継ぎ設定→アカウントを引き継ぐをON

困ったときの対処方法はこちらを参考に。

 

 

やっとROMの書き換え

Factory IMAGEはこちらからダウンロード

Factory Images for Nexus and Pixel Devices  |  Google APIs for Android  |  Google Developers

"shamu" for Nexus6の「NBD91Y」を選択して保存

  • ダウンロードしたzipを解凍する(例:c:\temp\shamu-nbd91yに解凍)
  • USBで端末を接続
  • adb reboot bootloaderでブートローダー画面を表示
    (電源OFF→ボタン全部押して起動でもOK)
  • dos> cd \temp\shamu-nbd91y
    dos> .\flash-all.bat      ←ROMの書き込みが始まる(約3分ほど)

 最終的には以下のようなメッセージがDOS窓にでて終了、簡単すぎる。

rebooting...

finished. total time: 130.736s
Press any key to exit...

 

環境復旧

昔に比べたらAndroidの初期設定だけでかなり直前の状態まで戻るようになっていたのは驚き。まずデスクトップの状態はwi-fiの設定をしておくだけでお任せで復旧してくれた。アプリもダウンロードは全部してくれるのでfull-backupしなくても良かったかも。

 

リストアは以下の手順、こちらはバックアップと違ってすんなり行った。

  • USBで端末と接続
  • adb restore \backup\full-backup.ab
    アプリ毎にバックアップした場合は必要回数繰り返し

 

あとはandroidの設定を好きなように。

  • APNの設定
  • 開発者オプションON(ビルド番号連打)
  • USBデバッグ設定ON
  • 位置情報→ロケーション履歴OFF
  • 画面のロックまでの時間

 

なんだかんだ言ってアプリの設定はあんまり保存できてない。 ポケモンGOのためだけにこんな事するのは割にあわないな(笑)