android端末でchroot使ってディストリ動かしたときのメモ
root前提なので自己責任で。
Kali Linuxの開発元Offensive Securityがスマホ向けに出してるNetHunterを活用してLinuxディストリ動かそうというお話。
androidとLinux
義務教育で習ったようにandroidはLinuxカーネルで動いています。
なので各ディストリ用のファイルやらを用意してやれば、UbuntuなりArchなりが動いてくれます。
最近はUserLAndとかTermuxみたいにrootなくてもディストリを動かせるのが出てきて嬉しい限りですが、自由とは言いづらいし、個人的にroot振り回してchroot使ってディストリを動かしたほうが精神衛生上よろしいのでそうします(chrootも自由とは言えないだろっていうツッコミはなしで...)
というか、前回のURBANO V01君を売って手元にroot取得してない奴がないので自然とそうなるんですけどね。
今回はチャレンジパッド2ことTAB-A03-BSにArch Linuxを入れてみます。
ディストリの生成
ディストリのイメージがないと始まらないので、Linux Deployを使ってイメージを作ります。
チャレパ2はROM 16GBなので、アプリとかを考えるとディストリのイメージを入れるにはちと狭い...
そこでmicroSDにイメージを入れるのも考えましたがSDXC非対応でexFAT作れないので、FAT系の1ファイル2GB制限に引っかかって2GBのイメージしか作れないです...
なので、microSDにext4パテを作ってそこにイメージを展開、mountのbindを使って本体とつなぐことにします。
Linux Deployの設定はこんな感じ。
アーキテクチャとかパーティションは機種によって違うので、CPU-Z使うなりdmesgでマウントログ見たりで対応してください。
間違ったパーティションに上書きして泣いても自己責任で。
microSDにはext4なパーティションを作ってスロットに突っ込んでください。
あとは右上のボタンからInstallを選択すればmicroSDにディストリのイメージが書き込まれます。
今回はNetHunterのスクリプトで動かすので、作ったらLinux Deployは消しても大丈夫です。
スクリプト書き換え
今更ながらNetHunterでディストリを動かすメリットを紹介。
要するに色々楽です。
自作するのがめんどい
アプリとかがKaliなデザインなのはあれですけど。
アプリは
http://store.nethunter.com/repo/com.offsec.nethunter_2019041400.apk
から落とせます。新しいのも出てますが、新しいのはスクリプトがガラッと変わっててまだ解析終わってないので...
Kaliなツールのアップデート多めみたいですし、chrootするためなら別に新しくなくてもいいと思います。(妥協)
あと、NetHunter用のターミナルも入れておかないと起動時に怒られるので使わなくても入れておきましょう。
apk書き換えたら良さそうだけど、めんどくさい...誰かやってくれないかなぁ...
http://store.nethunter.com/repo/com.offsec.nhterm_2020010200.apk
2つとも入れたらadbなり直接なりでインストールします。
インストールしたら早速スクリプトをいじります。
場所:/data/data/com.offsec.nethunter/files/scripts
色々スクリプトがありますが、今回いじるのはbootkali*系のスクリプトです。
各スクリプトの役目は以下の通り
bootkali : 起動用スクリプト。引数をつけることでSSHやVNCとかをコントロールできる。
bootkali_bash : 起動時のシェル準備。あとrootでのログインも定義されてる。
bootkali_env : 変数定義と画面クリア。
bootkali_init : 今回の主役。chrootのあれこれを構築したり定義したりする。
bootkali_log : logcatにログを吐く
bootkali_login : rootでのログインを定義。
通常の動作としては、/data/local/nhsystem/kali-armhfにchrootできる環境があったらchroot。
なかったら/sdcard/kali-chroot.imgを/data/local/nhsystem/kali-armhfにマウントしてchroot。
といった感じです。
今回はmicroSDのパーティションにディストリがあるので、それをマウントできるように書き換えます。
とりあえずbootkali_initの123行目らへんを見ます
mount_kali_chroot() { $busybox mount -t ext4 /sdcard/kali-chroot.img $mnt mkdir -p $mnt/dev mkdir -p $mnt/dev/shm mkdir -p $mnt/proc mkdir -p $mnt/sys mkdir -p $mnt/system mkdir -p $mnt/sdcard
ここがイメージをマウントしてる部分です。
チャレパ2の場合、microSDは/dev/block/platform/soc.1/mmcblk1p1にext4なmicroSDのパテが生えてるので、これを
mount_kali_chroot() { $busybox mount -t ext4 /dev/block/platform/soc.1/mmcblk1p1 $mnt mkdir -p $mnt/dev mkdir -p $mnt/dev/shm mkdir -p $mnt/proc mkdir -p $mnt/sys mkdir -p $mnt/system mkdir -p $mnt/sdcard
することでmicroSDにchrootしてくれます。
その他にも155行目にDNSが定義されてるので、1.1.1.1大好きな人とかは変えるといいと思います。
あと、このままだとホストネームがkaliになってしまいます。
kaliじゃねーしArchだし! って感じですし、個人的にKaliあんま好かんので変えます。
232行目あたりから
# NETWORK SETTINGS # $busybox sysctl -w net.ipv4.ip_forward=1 echo "127.0.0.1 localhost kali" > $mnt/etc/hosts echo "::1 localhost ip6-localhost ip6-loopback" >> $mnt/etc/hosts echo "kali" > $mnt/proc/sys/kernel/hostname
といった感じで定義されてるので、ここのkaliの部分をお好きなホストネームに変えます。
あとは/data/data/com.offsec.nethunter/files/scripts/bootkali
でとりあえず起動できます。
終了するときはkillkaliスクリプトを実行すれば、マウントしてたディレクトリとかを一括でアンマウントしてくれます。
起動できることを確認したら、パスが通るとこにシンボリックリンクを貼っておきましょう。
# mount -o rw,remount /system # ln -s /data/data/com.offsec.nethunter/files/scripts/bootkali /system/xbin/boot # ln -s /data/data/com.offsec.nethunter/files/scripts/killkali /system/xbin/shutdown
これで楽に動かせます。
起動時にSSHとかを動かす場合はNetHunterアプリから設定すれば動きます(なげやり)
書きかけの記事がめっちゃ溜まってきたな...