qualcomm non SecureBoot 安卓设备默认lock

市场上几乎大部分的安卓设备都是默认Lock上锁的,尤其是品牌手机类,针对没有开启secureboot的设备,lock设备的需求该如何实现,下文针对Qualcomm平台来提供一个方式实现.

整个secureboot的实现,此文暂不涉及,主要来呈现non-secureboot的机器如何默认上锁.

通过定位bootloader abl部分的代码,我们定位到Devinfo会存放lock和unlock的标志位. 对应的数据会保存在实际的devinfo这个分区,那我们可以尝试在此处设置DevInfo.is_unlocked = FALSE岂不是就万事大吉了,实际设置之后,这个流程存在的一个问题就是永远Lock,当在fastboot模式下执行了unlock之后,正常的擦除userdata流程,让设备重新走入devinfoinit,标志位依然是false. 这样一来,是没有办法unlock.

EFI_STATUS DeviceInfoInit (VOID)
{
  EFI_STATUS Status = EFI_SUCCESS;

  if (FirstReadDevInfo) {
    Status =
        ReadWriteDeviceInfo (READ_CONFIG, (VOID *)&DevInfo, sizeof (DevInfo));//读写devinfo的操作函数
    if (Status != EFI_SUCCESS) {
      DEBUG ((EFI_D_ERROR, "Unable to Read Device Info: %r\n", Status));
      return Status;
    }

    FirstReadDevInfo = FALSE;
  }

  if (CompareMem (DevInfo.magic, DEVICE_MAGIC, DEVICE_MAGIC_SIZE)) {
    DEBUG ((EFI_D_ERROR, "Device Magic does not match\n"));
	...
	...	
    if (IsSecureBootEnabled ()) {//当开启Secureboot之后,设备默认上锁,将unlock标志和critical_unlock标志置FALSE
      DevInfo.is_unlocked = FALSE;
      DevInfo.is_unlock_critical = FALSE;
    } else {
      DevInfo.is_unlocked = TRUE;
      DevInfo.is_unlock_critical = TRUE;
    }
	...
	...
    Status =
        ReadWriteDeviceInfo (WRITE_CONFIG, (VOID *)&DevInfo, sizeof (DevInfo));//然后将设置的标志写入devinfo分区
    if (Status != EFI_SUCCESS) {
      DEBUG ((EFI_D_ERROR, "Unable to Write Device Info: %r\n", Status));
      return Status;
    }
  }

  return Status;
}

而DevinfoInit会在Linux引导启动的入口函数被调用

EFI_STATUS EFIAPI  __attribute__ ( (no_sanitize ("safe-stack")))
LinuxLoaderEntry (IN EFI_HANDLE ImageHandle, IN EFI_SYSTEM_TABLE *SystemTable)
{
  EFI_STATUS Status;  
...

// Initialize verified boot & Read Device Info
  Status = DeviceInfoInit ();//读取devinfo分区的标志位
  if (Status != EFI_SUCCESS) {
    DEBUG ((EFI_D_ERROR, "Initialize the device info failed: %r\n", Status));
    goto stack_guard_update_default;
  }
...
}

以上是代码的流程,接下来说说non-secureboot怎么实现
我们先将andriod设备在fastboot模式下,手动执行
fastboot flashing lock
整个流程完成后,标志位就已写入devinfo该分区.

最后启用QFIL的Partition Manager读取分区, 思路很简单, devinfo这个分区,是非文件系统的分区,单纯存放数据,

在这里插入图片描述

下一步选择"Manager Partition Data".

读取devinfo, “Read Data”.
在这里插入图片描述

在这里插入图片描述

最后生成的红框的bin,即是最终的上锁的devinfo.bin,直接改名即可.以后直接可以通过QFIL把最终的flat build版本中加入该devinfo.bin下载,就可以实现设备默认lock.

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值