4ensiX

4ensiX

Forensics専門でなければ、CTFはDFIRの勉強にほとんど役立たないことをを知ったこの頃

LinuxのAndroidエミュレータ Anboxを試してみる(2020/10/02 F-Droidについてチョイ追記)

前回の記事ではapktoolについて紹介した。

apktoolについて調査しているときにLinux上のAndroidエミュレータは、どんなものがあるのか気になったので調べてみた。

調べた中で最も興味の湧いたLinuxandroidエミュレータを紹介させていただく。

Anbox(Android in a Box)

github.com

無料で使えるLinux上のAndroidエミュレータ。多くのAndroidエミュレータは仮想的にAndoroid環境を使ってシステムをエミュレートするが、AnboxはホストOSと同じカーネルAndroidシステムを動かす。なので仮想的に環境を構築するより動作が軽い。ただホストOSと同じカーネルを利用するせいなのか全てのアプリが使える訳ではない。

記事の執筆時はβ版として提供されている。この記事を書いた時点で公式がサポートしているLinuxディストリビューションは、Ubuntu 16.04(xenial) ,Ubuntu 18.04(bionic)の二つのみである。しかし、snapが使えるディストリビューションではおそらく動作すると思われる。(Debian系でもいけるらしい)

一応snapについて:

news.mynavi.jp

jp.techcrunch.com

kledgeb.blogspot.com

www.nowhere.co.jp

ついでにsnapアプリのストアのようなもの

uappexplorer.com

 

Anboxをインストール

github.com

早速Anboxをインストールしてみる。今回は2019/07/04時点で最新の

Ubuntu Desktop 18.04.2 LTS

VirtualBoxに入れて(仮想RAM 4096MB,仮想HDD 64GB)でやっていく。

1.インストールに必要なカーネルモジュールを入れる

i)UbuntuにAnboxのPPAを加え、PPA経由でanbox-module-dkmsをインストール

$ sudo add-apt-repository ppa:morphis/anbox-support

$ sudo apt update

$ sudo apt install anbox-modules-dkms

一応PPAについて:

allabout.co.jp

kazuhira-r.hatenablog.com

gihyo.jp

cloud-work.net

ii)インストールしたカーネルモジュールをロードする

$ sudo modprobe ashmem_linux

$ sudo modprobe binder_linux

iii)ノードがあるか確認

$ ls -l /dev/{ashmem,binder}

/dev/ashmem

/dev/binder

2.Anboxをsnapでインストール

snapが無い場合のインストールについてはsnapに関する上記リンクを参照して頂きたい。また、snapを持っていても更新の確認をおすすめする。では、snapでAnboxをインストール。

$ sudo snap install --devmode --beta anbox

10分くらい時間がかかる。

また、新しいバージョンへのアップデートは自動では行われないのでコマンドで行う必要がある。

Anbox更新コマンド:

$ snap refresh --beta --devmode anbox

最新の情報についてはこのコマンド:

$ snap info anbox

X.アンインストールする場合

$ snap remove anbox

※このコマンドではanboxに関する全てのデータが消えてしまい元に戻らないようなので注意。

また、anboxをアンインストールするならばインストールしたカーネルなども削除すべきなので、

$ sudo apt install ppa-purge

$ sudo ppa-purge ppa:morphis/anbox-support

Anboxを起動

 ここまで来ればあとは起動するだけ!コマンドラインに以下を入力!

$ anbox.appmgr

起動が成功すればこんな感じ↓

f:id:Zarat:20190706145157p:plain

普通のandroidエミュレータと違って画面がウインドウをのように使えるのが良い。あとはエミュレータのはずなのに操作がサクサクなのが良い(使用環境によるだろうが比較的軽いハズ)。

あと、何故か分からないけれど右クリックは通じるけど左クリックが通じないボタンがある。
よし!じゃあ早速何ができるか遊んでみるか!

んっ?Google Playが無いだとぉぉぉ?!

\(^o^)/オワタ

そんなあなたには二つの道があります。

それは、

i)エンジニアならばやはりCUIじゃけん。コマンドラインでapkをインストールするんじゃ。

ii)スマートに効率的にGUIでインストールしたい。やっぱGoogle Playストア入れるっきゃないでしょ。

ということで順番に見ていく。

i)apkファイルを直接インストール

 apkファイルを持ってきてインストールするには adb と fastboot 二つのパッケージが必要だと思われます。(adbは絶対必要だが、fastbootはよく分かってない。たぶん含まれているライブラリが必要なのだと思われる。)

Android Debug Bridge  |  Android Developers

tek2tech.com

droidd.ru

 

また、多くの記事はAndroid SDKを入れないと adb と fastboot は利用できないと書いているように思えるがパッケージのみ入れるだけで使える。

$ sudo apt install android-tools-adb

$ sudo apt install android-tools-fastboot

 

次にapkファイルは、やはりなんでも良いという訳では無い。基本的には Architecture が x86 または arm64 に対応していれば動くらしい。

apkファイルが沢山あるところ:

www.apkmirror.com

apkファイルが手に入ったら、これでインストール。

$ adb start-server

$ adb install file.apk

使用例)

f:id:Zarat:20190706153312p:plain

ダウンロードしたapkファイルは大分ファイル名が長い。Successと表示されればインストール完了。arm64と記載されていても軽く確認した中では成功するものが見つからなかった。

インストールに成功すればanboxに追加される。

f:id:Zarat:20190706153758p:plain

インストールに成功しても起動しないアプリが多くあるので注意

ここら辺は今後のanboxに期待するしかないだろう。

もしかしたら危険なアプリもあるかもしれないが、そこら辺は当サイトは責任を負いませんということで。

ii)Google Playを入れる

イ)事前に必要なものをインストール

 やっぱ正規のストアのGoogle Playの方が安心だよねってことで入れていく。

 まず、Google Playストアをインストールするためのインストールが必要である。必要とされるのは、wget , lzip , unzip squashfs-tools の4つ。Ubuntu18.04.02 LTS にはこれらのパッケージはlzip以外デフォルトで入っている。使用環境に含まれているか一応確認した方が良い。

(追記)curlも必要なのでcurl、も入れる。

以下まとめてインストールするコマンドを記述しておく

$ sudo apt install wget lzip unzip squashfs-tools curl

 

補足:

 lzipについて:

www.nongnu.org

gzipと同じくらい早く復元でき、bzip2よりも効率よく圧縮できるらしい。でも使ってる人あまり見かけない。

squashfs-toolsについて:

qiita.com

nopipi.hatenablog.com

 おそらくSquashfsイメージで配布しているlibhoudiniを利用するため。

ロ)Google Playストア、libhoudiniをインストール

wget https://raw.githubusercontent.com/geeks-r-us/anbox-playstore-installer/master/install-playstore.sh

#ダウンロードしてインストールしてくれるシェルスクリプトをダウンロードしてる

$ chmod +x install-playstore.sh

$ sudo ./install-playstore.sh

割と時間がかかる。自分は10分ほど。

終わったら一度起動して、

$ anbox.appmgr

ハ)Google Play Services,Google Play Storeに権限を与える

Settings -> Apps -> Google Play Services -> Permissionsで権限を与えてあげて。同様にSettings -> Apps -> Google Play Store-> Permissionsで権限を与える。 そしてGoogle Play Storeにログインする。ログインは必ず権限を全て与えてから。ログイン後には権限を減らすことができる。

あと何故か日本語キーだったのがログインのときだけUSキーになった。

これでGoogle Play Storeが使えるぞ

f:id:Zarat:20190706163549p:plain

しかし、Google Play Storeが使えるからと言って全てのアプリが使える訳ではない。というか使えるアプリが少ない。ほとんどのアプリはインストールできない、インストールに成功しても起動しないなど、このエミュレータは我々に根気強さを求めているのか(錯乱)。

x86に対応していると分かるapkファイルから入れる方がインストール成功の可能性は高いと思われる。Google Play Storeを選ぶのは負けなのでは。

 

補足:

権限を全て与えてもログイン失敗する場合は

$ sudo /snap/anbox/current/bin/anbox-bridge.sh start

したり、

$ sudo /snap/anbox/current/bin/anbox-bridge.sh restart

すると良いらしい。これらは参考リンクにも記載されている。また、Google Play StoreをAnboxで使うのにdnsmasqパッケージが必要だという人もいるみたいだが、Ubuntu Desktop 18.04.2 LTSでは要らなかった。

libhoudiniについて:

wiki.onakasuita.org

 

arekorebibouroku.hateblo.jp

 これが在ればarm64対応のアプリをx86でも動かせるということだと思われる。逆にこれが無いと動かないのではと思っているがどうなのだろう。

→どっちみち全アプリ動かん。

 

google playからのアプリが全く動かない(2020/10/02 追記)

公式にも書かれている通り、google playからのアプリは殆どというか全く動くのが見つからない。有名どころは動くのを見たことがない。

アーキテクチャの所為かと思ったが、正直アプリの外部ツール(チートツール、root化ツール等)検出機能等によってアプリの起動が行われていない気もする。あとは、androidのバージョンが古いとか(自分のanboxはAndroid 7.1.1)。

これまた、公式で言われている通り一応F-Droidからのアプリであれば動作するものがあることを確認できた。ちなみにF-Droidの導入は公式からapkファイルをDLして、上記の「i)apkファイルを直接インストール」と同様にanboxに直接apkをインストールすればよい。エンターテインメントとして楽しめるものは無いけれど。

 

最後に

エミュレータなのに仮想環境ではなく、同じカーネル上で面白いと思って手を出してみた。実際、サクサク動いたし楽しかったけど、それは初めだけだった希ガス

結論

Linuxでは、まだandroidエミュレータやらなくていい。今後に期待。

 

参考

 

baker-street.jugem.jp

www.fosslinux.com

baker-street.jugem.jp

www.linuxuprising.com