U+E000 私用領域

しがない緑茶好きのメモ的なの。

android端末でchroot使ってディストリ動かしたときのメモ

root前提なので自己責任で。
Kali Linuxの開発元Offensive Securityがスマホ向けに出してるNetHunterを活用してLinuxディストリ動かそうというお話。

androidLinux

義務教育で習ったようにandroidLinuxカーネルで動いています。
なので各ディストリ用のファイルやらを用意してやれば、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のイメージしか作れないです...
なので、microSDext4パテを作ってそこにイメージを展開、mountのbindを使って本体とつなぐことにします。
Linux Deployの設定はこんな感じ。

https://cdn.discordapp.com/attachments/530608865256013840/699079037280059482/Screenshot_2020-04-13-11-09-02.png

アーキテクチャとかパーティションは機種によって違うので、CPU-Z使うなりdmesgでマウントログ見たりで対応してください。
間違ったパーティションに上書きして泣いても自己責任で。 microSDにはext4パーティションを作ってスロットに突っ込んでください。
あとは右上のボタンからInstallを選択すればmicroSDにディストリのイメージが書き込まれます。
今回はNetHunterのスクリプトで動かすので、作ったらLinux Deployは消しても大丈夫です。

スクリプト書き換え

今更ながらNetHunterでディストリを動かすメリットを紹介。

  • SSHとかをアプリから制御できて楽。自動起動も可。
  • コマンドから起動するので、adbとか他のターミナルアプリ上でも動かせる。
  • 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 : 起動用スクリプト。引数をつけることでSSHVNCとかをコントロールできる。
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にext4microSDのパテが生えてるので、これを

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

することでmicroSDchrootしてくれます。
その他にも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
でとりあえず起動できます。

https://cdn.discordapp.com/attachments/530608865256013840/699139660013895691/neofetch.png

終了するときは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アプリから設定すれば動きます(なげやり)

書きかけの記事がめっちゃ溜まってきたな...