“大师,安卓手机太卡了怎么办?” “恢复下出厂就好了”
“大师,装了俩app开机卡logo了怎么办?” “恢复下出厂就好了”
“大师,开机密码忘了进不去系统怎么办” “恢复下出厂就好了”
“大师,手机中毒了总是自动发短信咋办” “恢复下出厂就好了”
“大师。。。。” “阿弥陀佛, 请施主将手机恢复下出厂”
将手机恢复出厂是以往解决安卓手机在使用过程中遇到的一些疑难杂症所采用的“大师手段”,虽然“很黄很暴力” 但是往往有奇效,我们在进行取证工作当中是不能利用“恢复出厂”这种“高精尖”技术手段的,因为会导致一个根本问题:恢复出厂将会导致用户数据丢失。那么我们今天讨论恢复出厂有何意义呢?
答案是:肯定有意义(小编要拿这个月的奖金,肯定要细说一些大家所不了解的“取证经验”。),接下来我们细说:
我们在以前解决华为手机解锁开机密码,提取分身数据过程中,需要将自制固件刷入手机当中,这必然会需要对手机bootloader锁进行解锁,解锁bootloader会导致手机进行自动的恢复出厂,如果让手机进行恢复出厂,那前面的活白干了,所以我们要阻止其恢复出厂。
后来华为手机升级到安卓9.1版本,我们对9.1版本手机进行ROOT的前提是要解锁bootloader,和上述一样,解锁会导致恢复出厂,即使我们阻止了它恢复出厂,后面当bootloader检测到手机被ROOT了,那么系统会自动跳至recovery进行恢复出厂一次才能顺利进入系统。
根据上述两种情况(我们研究恢复出厂的主要目的不是想恢复出厂,而是为了阻止其恢复出厂),我们研究手机恢复出厂,首先要知道,手机恢复出厂的主要“功勋”--recovery,recovery是安卓手机从诞生之日就被设计拥有手机系统更新,恢复出厂设置等功能,recovery是独立于启动系统之外的一个拥有基本运行条件的“精简系统”,类似于PC端的"PE系统",当我们通过设置功能开启手机恢复出厂功能的时候,系统会自动将手机重启并且跳转至recovery进行恢复出厂。
那么,手机在重启之后,系统被重新启用,是如何进入recovery下的呢?当我们选择了设置里的恢复出厂功能,那么系统将会在手机的misc;cache等分区写入相关指令,用于判断在下一次通电开机后进入哪个模式或者对哪个分区先行启动,包括recovery需要执行的一些功能脚本。
recovery在开机启动后执行系统赋予的命令,这其中就包括对用户区的格式化,或者数据清除,对cache分区的清除等等。既然知道了恢复出厂是recoevry执行的,那么我们将recovery进行擦空,然后对手机进行恢复出厂操作,但是,恢复出厂依然执行成功,经过对recovery分区进行备份发现,此时recovery分区并不是空的,而是已经拥有了完整的recovery镜像,证实是系统检测到recovery分区为空自动将recovery还原成官方然后执行恢复出厂。我们把recovery镜像进行解包,想看一下recovery下的结构:
通过PC端的解包工具“Android Image Kitchen”将从固件中提取的镜像文件recovery.img进行解包:
在ramdisk/sbin下发现了 factory_reset执行文件,我们将该文件删除并且重新打包刷入到手机中(测试机已经解锁bootloader,因为我们修改过的recovery是属于自制固件):
我们将手机再进行一次恢复出厂设置操作,发现,手机进入recovery执行恢复出厂失败:
对于阻止手机恢复出厂的方法来说呢,还有很多种,篇幅有限,咱们在以后的公众号里会逐一说明,这些阻止恢复出厂的方法可以应用到我们的解锁/root方案当中阻止部分情况下的手机恢复出厂,通过辩证的逆向思想去解决我们在取证当中所遇到的种种难题。