分类: Android平台
2015-07-06 17:13:18
在分析Kitkat加密功能的时候,在一些资料上看到一句话“对于加密后的系统,重启后,进入到输入密码界面,此时并没有完全加载Android系统,仅仅加载必要的服务”
那么这个必要的服务又是指的是那些服务呢?
在解答这个问题前我们先区分一下class core ,class main, class late_start。
这三个“class”,只是标识这个服务的类型是哪一个,然后通过调用class_start, class_reset, class_stop等命令的时候,来统一操作同一类的服务。
举个例子,从system/core/rootdir/init.rc文件中搜索“class main”可以搜到许多,例如有netd, ril-deamon服务被标识为class main,那么当我们调用class_start main命令时,所有标识为main的服务都会被启动,这里的netd ril-deamon就会被启动。对于core, late_start类的服务也是这样的。
这里以源代码中三星的manta为例进行演示:
class core 的服务如下:
序号 | service名称 | 所属文件 | 命令bin文件位置 |
1 | watchdogd | init.manta.rc | /sbin/watchdogd |
2 | watchdogd | init.recovery.manta.rc | /sbin/watchdogd |
3 | setup_fs | init.smdk5250.rc | /system/bin/setup_fs |
4 | ueventd | init.rc | /sbin/ueventd |
5 | logd | init.rc | /system/bin/logd |
6 | healthd | init.rc | /sbin/healthd |
7 | console | init.rc | /system/bin/sh |
8 | adbd | init.rc | /sbin/adbd |
9 | servicemanager | init.rc | /system/bin/servicemanager |
10 | vold | init.rc | /system/bin/vold |
class main的服务如下:
序号 | service名称 | 所属文件 | 命令bin文件位置 |
1 | p2p_supplicant | init.manata.rc | /system/bin/wpa_supplicant |
2 | wpa_supplicant | init.manata.rc | /system/bin/wpa_supplicant |
3 | dhcpcd_wlan0 | init.manata.rc | /system/bin/dhcpcd |
4 | dhcpcd_p2p | init.manata.rc | /system/bin/dhcpcd |
5 | dhcpcd_eth0 | init.manata.rc | /system/bin/dhcpcd |
6 | dhcpcd_bt-pan | init.manata.rc | /system/bin/dhcpcd |
7 | dhcpcd_bt-pan | init.manata.rc | /system/bin/dhcpcd |
8 | iprenew_p2p | init.manata.rc | /system/bin/dhcpcd |
9 | iprenew_eth0 | init.manata.rc | /system/bin/dhcpcd |
10 | iprenew_bt-pan | init.manata.rc | /system/bin/dhcpcd |
11 | gpsd | init.manata.rc | /system/vendor/bin/gpsd |
12 | mobicore | init.manata.rc | /system/bin/mcDriverDaemon |
13 | bugreport | init.manata.rc | /system/bin/dumpstate |
14 | netd | init.rc | /system/bin/netd |
15 | debuggerd | init.rc | /system/bin/debuggerd |
16 | debuggerd64 | init.rc | /system/bin/debuggerd64 |
17 | ril-daemon | init.rc | /system/bin/rild |
18 | surfaceflinger | init.rc | /system/bin/surfaceflinger |
19 | drm | init.rc | /system/bin/drmserver |
20 | media | init.rc | /system/bin/mediaserver |
21 | bootanim | init.rc | /system/bin/bootanimation |
22 | installd | init.rc | /system/bin/installd |
23 | flash_recovery | init.rc | /system/etc/install-recovery.sh |
24 | racoon | init.rc | /system/bin/racoon |
25 | mtpd | init.rc | /system/bin/mtpd |
26 | keystore | init.rc | /system/bin/keystore |
27 | dumpstate | init.rc | /system/bin/dumpstate |
28 | sshd | init.rc | /system/bin/start-ssh |
29 | mdnsd | init.rc | /system/bin/mdnsd |
30 | zygote | init.zygote32_64.rc | /system/bin/app_process |
31 | zygote | init.zygote32.rc | /system/bin/app_process |
32 | zygote | init.zygote64.rc | /system/bin/app_process64 |
可以看到main的服务相对多一些,看到zygote了吧,由此可见main服务大部分是建立在java层或者与java层息息相关的系统服务。
class late_start 的服务如下:
序号 | service名称 | 所属文件 | 命令bin文件位置 |
1 | sdcard | init.manta.rc | /system/bin/sdcard |
2 | sdcard | init.msmdk5250.rc | /system/bin/sdcard |
在看Android手机加密的资料的时候,看到late_start服务,以为有很多呢.,但是一搜索才知道,坑爹啊,只有一个。
由以上的简单分析,再来分析Kitkat手机加密功能的流程,和加密后的启动过程,就更加清晰了。
其实手机加密完毕后,重启手机,进入输入密码界面,此时系统的core,main服务都已经启动,只有late_start服务没有启动,可以直接无视late_start。这样说来,此时手机的系统服务和正常状态下是一样的。我们想利用系统服务做什么都行啊。^_^
那么为什么在该界面只能做很少的事情呢?
例如可以拨打紧急呼救号码,弹出输入法,显示设置中的CryptKeeper界面,可以锁屏。但是却玩不了游戏,无法调用我们已经设置的“百度输入法”,而是使用很丑的Ladin输入法。锁屏也是系统默认的,拨号的界面也是系统原生的等等问题。这些问题,将在下一篇文章《Kitkat的加密功能对应用做了什么?》中解答