Android Verified Boot上有两个阶段,bootloader和init,每个阶段校验的内容都是不一样的。以高通平台为例:

第一阶段

在bootloader中,需要校验分区的函数变量:

// Library/avb/VerifiedBoot.cstatic CHAR8 *avb_verify_partition_name[] = {"boot","dtbo","vbmeta","recovery","vendor_boot"
};

从上面的变量可以知道,在bootloader中,可能需要校验上面的5个分区。

为什么说是可能?因为最终的校验是需要根据vbmeta分区来决定的。

解析vbmeta镜像:

avbtool info_image --image vbmeta.img > vbmeta.img.info

vbmeta.img.info 内容

Minimum libavb version:   1.0
Header Block:             256 bytes
Authentication Block:     576 bytes
Auxiliary Block:          4032 bytes
Public key (sha1):        2e22ae4a46cf9db9c24ab74cee91fa005ccb30e4
Algorithm:                SHA256_RSA4096
Rollback Index:           0
Flags:                    0
Release String:           'avbtool 1.1.0'
Descriptors:Chain Partition descriptor:Partition Name:          vbmeta_systemRollback Index Location: 2Public key (sha1):       fc92d9cba0628858d846fb9a18a7af72b05d7dc8...Hash descriptor:Image Size:            59932672 bytesHash Algorithm:        sha256Partition Name:        bootSalt:                  e691366c1c43ee5e23b342d65555ad8cfbadf77118dceb77e240c8e7d3e63ea6Digest:                239648eb41f5a491c7c4d6b51b52a533bd9da98ba8800f58a0957f7341dd1686Flags:                 0Hash descriptor:Image Size:            740733 bytesHash Algorithm:        sha256Partition Name:        dtboSalt:                  d445a36d8154a774589dd51c49029ee388ecaac28212c8c6899f45dc5a51dbcfDigest:                cac0bd59091464292bc83d6f1193afb1520c12a3849f2673ad3160bb951acf6dFlags:                 0Hash descriptor:Image Size:            1916928 bytesHash Algorithm:        sha256Partition Name:        vendor_bootSalt:                  5f7b7c3592142d4f3645d7e675fb7865915e52e8b361ba330fccf00aeb1c4028Digest:                cf153ab9df9a5c34024417ea2b0b4dfd716d01ba9cd2d5bcf964fe7e25cdd802Flags:                 0Hashtree descriptor:Version of dm-verity:  1Image Size:            864256 bytesTree Offset:           864256Tree Size:             12288 bytesData Block Size:       4096 bytesHash Block Size:       4096 bytesFEC num roots:         2FEC offset:            876544FEC size:              8192 bytesHash Algorithm:        sha1Partition Name:        odmSalt:                  b6e1f57ae6939659355e83ad7fa57feb6b5eb15a3d16b96752f43cdc14918708Root Digest:           da99875b16661e72eec81d05d58dffdf09fe228dFlags:                 0Hashtree descriptor:Version of dm-verity:  1Image Size:            1002233856 bytesTree Offset:           1002233856Tree Size:             7897088 bytesData Block Size:       4096 bytesHash Block Size:       4096 bytesFEC num roots:         2FEC offset:            1010130944FEC size:              7987200 bytesHash Algorithm:        sha1Partition Name:        vendorSalt:                  b6e1f57ae6939659355e83ad7fa57feb6b5eb15a3d16b96752f43cdc14918708Root Digest:           336bd4885da274ae0de38b32b899f7b6169e676fFlags:                 0

通过vbmeta.img.info可以知道,bootloader中需要校验 vbmeta、boot 、dtbo、vendor_boot四个分区。

第二阶段

init阶段的avb校验,可以通过dts和fstab确定需要校验的分区。

  1. dts
 android {compatible = "android,firmware";vbmeta {compatible = "android,vbmeta";parts = "vbmeta,boot,system,vendor,dtbo";};fstab {compatible = "android,fstab";vendor {compatible = "android,vendor";dev = "/dev/block/platform/soc/1d84000.ufshc/by-name/vendor";type = "ext4";mnt_flags = "ro,barrier=1,discard";fsmgr_flags = "wait,slotselect,avb";status = "ok";};};};

fsmgr_flags = "wait,slotselect,avb"知道,根据fstab中分区的挂载参数,来确定需要进行校验的分区。
2. fstab.qcom

我们只需要关注fstab中的 wait,slotselect,avb= 挂载参数。

system      /system  ext4    ro,barrier=1,discard    wait,slotselect,avb=vbmeta_system,logical,first_stage_mount,avb_keys=/avb/q-gsi.avbpubkey:/avb/r-gsi.avbpubkey:/avb/s-gsi.avbpubkey
system_ext  /system_ext   ext4    ro,barrier=1,discard         wait,slotselect,avb=vbmeta_system,logical,first_stage_mount
product     /product      ext4    ro,barrier=1,discard         wait,slotselect,avb=vbmeta_system,logical,first_stage_mount
vendor      /vendor       ext4    ro,barrier=1,discard         wait,slotselect,avb,logical,first_stage_mount
odm         /odm          ext4    ro,barrier=1,discard         wait,slotselect,avb,logical,first_stage_mount

其中 wait,slotselect,avb=vbmeta_system涉及的system、system_ext、product三个分区需要跟vbmeta_system分区进行校验。

wait,slotselect,avb没有vbmeta_system参数的,则跟vbmeta分区进行校验,可以参考上面解析的vbmeta.img.info。

解析 vbmeta_system镜像以求证wait,slotselect,avb=vbmeta_system涉及的三个分区:

avbtool info_image --image vbmeta_system.img > vbmeta_system.img.info

vbmeta_system.img.info内容

Minimum libavb version:   1.0
Header Block:             256 bytes
Authentication Block:     320 bytes
Auxiliary Block:          2368 bytes
Public key (sha1):        fc92d9cba0628858d846fb9a18a7af72b05d7dc8
Algorithm:                SHA256_RSA2048
Rollback Index:           1598918400
Flags:                    0
Release String:           'avbtool 1.1.0'
Descriptors:...Hashtree descriptor:Version of dm-verity:  1Image Size:            141250560 bytesTree Offset:           141250560Tree Size:             1122304 bytesData Block Size:       4096 bytesHash Block Size:       4096 bytesFEC num roots:         2FEC offset:            142372864FEC size:              1130496 bytesHash Algorithm:        sha1Partition Name:        productSalt:                  b6e1f57ae6939659355e83ad7fa57feb6b5eb15a3d16b96752f43cdc14918708Root Digest:           8747dcab121c9cf740b106dc4b5545d685ee148fFlags:                 0Hashtree descriptor:Version of dm-verity:  1Image Size:            2592661504 bytesTree Offset:           2592661504Tree Size:             20422656 bytesData Block Size:       4096 bytesHash Block Size:       4096 bytesFEC num roots:         2FEC offset:            2613084160FEC size:              20660224 bytesHash Algorithm:        sha1Partition Name:        systemSalt:                  b6e1f57ae6939659355e83ad7fa57feb6b5eb15a3d16b96752f43cdc14918708Root Digest:           489a406f49dd15c6c4ab3f86ae8c490837602f81Flags:                 0Hashtree descriptor:Version of dm-verity:  1Image Size:            418029568 bytesTree Offset:           418029568Tree Size:             3301376 bytesData Block Size:       4096 bytesHash Block Size:       4096 bytesFEC num roots:         2FEC offset:            421330944FEC size:              3334144 bytesHash Algorithm:        sha1Partition Name:        system_extSalt:                  b6e1f57ae6939659355e83ad7fa57feb6b5eb15a3d16b96752f43cdc14918708Root Digest:           3eabb06d98d7e4639fbca3fd21806ef36332f1d3Flags:                 0

可以看到vbmeta_system.img.info中包含product system system_ext三个分区校验信息。

总结

AVB校验 分成两个阶段

  • bootloader 阶段 AVB 校验以下镜像
vbmeta.img、boot.img 、dtbo.img、vendor_boot.img
  • init 阶段 AVB 校验以下镜像
vbmeta_system.img  vbmeta.img vendor.img product.img odm.img system_ext.img

具体AVB流程,以及如何关闭dm-verity可以参考Android P中的AVB校验。

Android R AVB分析方法相关推荐

  1. Android APP性能分析方法及工具

    近期读到<Speed up your app>一文.这是一篇关于Android APP性能分析.优化的文章.在这篇文章中,作者介绍他的APP分析优化规则.使用的工具和方法.我觉得值得大家借 ...

  2. android app耗电分析方法

    这是一篇讲述应用耗电的文章,围绕 Android 电量采集机制及第二代 Battery Historian 分析工具讲述.文从数据采集.导出.环境搭建.解读报告的角度出发,从细节讲解整个流程.和大谈概 ...

  3. android backtrace,Android程序backtrace分析方法

    如何分析Android程序的backtrace 最近碰到Android apk crash的问题,单从log很难定位.从tombstone里面得到下面的backtrace. *** *** *** * ...

  4. Android 系统(126)---Android的死机、重启问题分析方法

    Android的死机.重启问题分析方法 阅读数:11986 Android的死机.重启问题分析方法 1.     死机现象 1.1      死机定义 当手机长时间无法再被用户控制操作时,我们称为死机 ...

  5. Android源码分析工具及方法

    转载自:http://bbs.pediy.com/showthread.php?t=183278 标 题: [原创]Android源码分析工具及方法 作 者: MindMac 时 间: 2014-01 ...

  6. Android的死机、重启问题分析方法

    Android的死机.重启问题分析方法 原文链接:https://blog.csdn.net/jinlu7611/article/details/50592385 1.死机现象 1.1 死机定义 当手 ...

  7. android自定义view onmeasure,Android 重写ViewGroup 分析onMeasure()和onLayout()方法

    Android 重写ViewGroup 分析onMeasure()和onLayout()方法 在继承ViewGroup类时,需要重写两个方法,分别是onMeasure和onLayout. 1,在方法o ...

  8. android释放acitity内存,Android 内存泄漏分析与解决方法

    在分析Android内存泄漏之前,先了解一下JAVA的一些知识 1. JAVA中的对象的创建 使用new指令生成对象时,堆内存将会为此开辟一份空间存放该对象 垃圾回收器回收非存活的对象,并释放对应的内 ...

  9. R语言临床诊断试验的ROC分析方法示例

    R语言临床诊断试验的ROC分析方法示例 ROC(receiver operating characteristic curve)接收者操作特征曲线,是由二战中的电子工程师和雷达工程师发明用来侦测战场上 ...

最新文章

  1. 资源 | 来自独秀同学的深度网络数学笔记,还不快收藏?
  2. 网狐棋牌(一) ServerKernel中的IQueueService接口分析
  3. Python的这几个常用库,你会用吗?
  4. MySQL——binlog,redo log
  5. LeetCode 380. 常数时间插入、删除和获取随机元素(哈希+vector)
  6. 【软件架构】三层架构和MVC的比较
  7. 40 SD配置-销售凭证设置-分配计划行类别
  8. JavaScript变量提升
  9. 总结一下SQL语句中引号(')、quotedstr()、('')、format()在SQL语句中的用法
  10. JavaScript与页面交互
  11. 计算机网络技术期末应用试卷,中专学校2016年《计算机网络技术与应用》期末考试题(考试卷与答案)...
  12. 瑞昱网通芯片RTL8305NB-CG应用介绍
  13. Kconfig配置文件
  14. 【博弈论】势博弈(potential game)、EPG以及最佳响应、Nash均衡和帕累托(pareto)最优的理解
  15. python异步和进程_浅谈python异步IO,同步IO,线程与进程~
  16. 清除计算机策略,利用组策略清除历史记录
  17. 健身房有哪些令人讨厌的行为?
  18. 【Unity3D】拖尾TrailRenderer
  19. 多伦多大学朱子宁:一种选择语言探针的信息论观点
  20. Unity_UIWidgets新手入门

热门文章

  1. 基金Alpha值 matlab,基金中的α、β、Sharpe比率都是什么意思?
  2. Jmeter安装教程(windows)
  3. 计算机课专业介绍听后感,最新计算机课心得体会范文
  4. 微信红包的随机算法是怎样实现的?
  5. 士兵队列训练问题 HDU - 1276
  6. 2023全国特种作业操作证高处安装、维护、拆除模拟考试试卷一[安考星]
  7. 通过JAVA自动获取Ip地址
  8. 去哪儿网业务大规模容器化最佳实践
  9. linux自学笔记(三)
  10. 最新聚合官方个人免签支付系统源码+服务器打包