背景

Android为了保证设备的安全性和稳定性加入的一系列的Lock保证措施。

OEM Lock

从小米,魅族,华为的OEM到Google在Nexus 6/9加入的OEM解锁特性,解锁过程中终端设备需要与设备制造商校验设备解锁资格。根据硬件特征发送中间码,服务器接收到中间码验证成功后会使用非对称加密算法返回一个解锁码并置与一个Bootloader可读的地点以便下一步的Bootloader解锁。例如,华为和小米都要求用户在手机上登陆对应账号并使用14天,审核后会发放解锁资格,华为直接提供解锁码,小米则将解锁码与小米账号绑定。这样说,OEM无法被第三方通道调用,也就是说,如果你使用的是Nexus,Pixel系列,然而没有勾选OEM解锁,那么刷机失败后,无论如何无法从任何途径进行OEM解锁。

注:华为已于5月24日下线解锁码提供服务。

“为了更好的保护消费者的体验,避免刷机后引入的一系列问题,我们决定对所有2018年5月24日后新上市产品停止解锁码服务,已经上市产品自公告发布之日起60天后停止解锁码服务。

感谢您对华为公司的支持,我们将一如既往为您提供优质的服务和体验。”

Bootloader Lock

Bootloader作为硬件启动时候第一时间加载的引导程序,它的作用类似于传统PC概念上的BIOS,它负责硬件启动并能够依次加载Boot,System并进入系统。Bootloader Boot镜像的合法性,对于没有官方签名的镜像,拒绝启动。接着Boot会校验System的合法性,避免加载第三方系统。

在Fastboot下键入fastboot flashing unlock或者fastboot oem unlock即可解锁,不过前提是OEM验证的解锁码可被Bootloader读取。

在Pixel下,解锁后的手机会出现不安全的标志,每次开机会出现安全警示。

Data加密

Android 4.4 后加入了全盘加密功能,对Data分区进行加密,避免第三方非法读取用户数据,除非是配置极低的Android设备才会显著影响设备IO性能。

“全盘加密是使用密钥(密钥本身也经过加密)对 Android 设备上的所有用户数据进行编码的过程。设备经过加密后,所有由用户创建的数据在存入磁盘之前都会自动加密,并且所有读取操作都会在将数据返回给调用进程之前自动解密数据。

全盘加密是在 Android 4.4 版中引入的,不过 Android 5.0 中又引入了以下新功能:

新增了快速加密方式,这种加密方式只会对数据分区中已使用的分块进行加密,以免首次启动用时过长。目前只有 EXT4 和 F2FS 文件系统支持快速加密。
添加了 forceencrypt fstab 标记,以便在首次启动时进行加密。
添加了对解锁图案和无密码加密的支持。
添加了由硬件支持的加密密钥存储空间,该空间使用可信执行环境(TEE,例如 TrustZone)的签名功能。”

Screen Lock

Android的锁屏密码,可在TWRP或者启动到Bootloader后使用adb shell进行抹除。

1
2
3
4
rm /data/system/locksettings.db
rm /data/system/locksettings.db-shm
rm /data/system/locksettings.db-wal
rm /data/system/*.key

抹除之后reboot即可,部分文件可能因设备而异。

在Android P上测试通过,理论上任何一部可以使用adb并提权的手机,均可抹除密码。

结语

Android一系列的Lock的加入,保证了使用者的设备安全性,当然,一部合格的安全的Android要求启用Secure boot防止加载非法来源的Bootloader,要求设备不被Root,不被解Bootloader校验,并开启全盘加密。

这样的Lock也为难了开发者以及刷机爱好者,因此,如有刚需,编译一个eng的工程版本岂不美哉。