2012年10月18日木曜日

Androidのadbのメモ(11) adbdのsecureモード

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 件のコメント:

コメントを投稿