secureモードのadbd
system/core/adb/adb.c: adb_mainを見ると
secure == 1 のとき
- groupの追加
/* add extra groups: ** AID_ADB to access the USB driver ** AID_LOG to read system logs (adb logcat) ** AID_INPUT to diagnose input issues (getevent) ** AID_INET to diagnose network issues (netcfg, ping) ** AID_GRAPHICS to access the frame buffer ** AID_NET_BT and AID_NET_BT_ADMIN to diagnose bluetooth (hcidump) ** AID_SDCARD_RW to allow writing to the SD card ** AID_MOUNT to allow unmounting the SD card before rebooting ** AID_NET_BW_STATS to read out qtaguid statistics */
- gidの変更。setgid(AID_SHELL)
- uidの変更。setuid(AID_SHELL)
- rebootできるcapabilityをセット
secure == 0 のとき
- uid, gidを変更しない。つまりrootのまま。
- port 5037 のソケットをlistenする。(用途不明。)
secureモードの判定条件
- emulatorで動いている。--> secure = 0
- システムプロパティ "ro.secure" == 1 --> secure = 1
- ただし、システムプロパティ "ro.debuggable" == 1ならば "adb root" でsecure = 0に切り替えることができる。
市販のAndroid端末では "ro.secure" = 1, "ro.debuggable" = 0になっています。
"ro."で始まるシステムプロパティはread onlyで値を変更することはできません。
システムプロパティ"ro.secure"が設定されていない場合はsecure = 1 になるようにプログラムされています。
KZM-A9-Dualボードで確認
$ adb shell id uid=0(root) gid=0(root)
ターゲットのルートディレクトリにある/default.propのファイルのro.secure=0をコメントアウトして再起動すると
$ adb shell id uid=2000(shell) gid=2000(shell) groups=1003(graphics),1004(input),1007(log),1009(mount),1011(adb),1015(sdcard_rw),3001(net_bt_admin),3002(net_bt),3003(inet),3006(net_bw_stats)
ro.debuggable=1 なのでadbdをrootモードで再起動できます。
$ adb root restarting adbd as root $ (数秒待つ。) $ adb shell id uid=0(root) gid=0(root)
0 件のコメント:
コメントを投稿