Android R AVB分析方法
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确定需要校验的分区。
- 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分析方法相关推荐
- Android APP性能分析方法及工具
近期读到<Speed up your app>一文.这是一篇关于Android APP性能分析.优化的文章.在这篇文章中,作者介绍他的APP分析优化规则.使用的工具和方法.我觉得值得大家借 ...
- android app耗电分析方法
这是一篇讲述应用耗电的文章,围绕 Android 电量采集机制及第二代 Battery Historian 分析工具讲述.文从数据采集.导出.环境搭建.解读报告的角度出发,从细节讲解整个流程.和大谈概 ...
- android backtrace,Android程序backtrace分析方法
如何分析Android程序的backtrace 最近碰到Android apk crash的问题,单从log很难定位.从tombstone里面得到下面的backtrace. *** *** *** * ...
- Android 系统(126)---Android的死机、重启问题分析方法
Android的死机.重启问题分析方法 阅读数:11986 Android的死机.重启问题分析方法 1. 死机现象 1.1 死机定义 当手机长时间无法再被用户控制操作时,我们称为死机 ...
- Android源码分析工具及方法
转载自:http://bbs.pediy.com/showthread.php?t=183278 标 题: [原创]Android源码分析工具及方法 作 者: MindMac 时 间: 2014-01 ...
- Android的死机、重启问题分析方法
Android的死机.重启问题分析方法 原文链接:https://blog.csdn.net/jinlu7611/article/details/50592385 1.死机现象 1.1 死机定义 当手 ...
- android自定义view onmeasure,Android 重写ViewGroup 分析onMeasure()和onLayout()方法
Android 重写ViewGroup 分析onMeasure()和onLayout()方法 在继承ViewGroup类时,需要重写两个方法,分别是onMeasure和onLayout. 1,在方法o ...
- android释放acitity内存,Android 内存泄漏分析与解决方法
在分析Android内存泄漏之前,先了解一下JAVA的一些知识 1. JAVA中的对象的创建 使用new指令生成对象时,堆内存将会为此开辟一份空间存放该对象 垃圾回收器回收非存活的对象,并释放对应的内 ...
- R语言临床诊断试验的ROC分析方法示例
R语言临床诊断试验的ROC分析方法示例 ROC(receiver operating characteristic curve)接收者操作特征曲线,是由二战中的电子工程师和雷达工程师发明用来侦测战场上 ...
最新文章
- 资源 | 来自独秀同学的深度网络数学笔记,还不快收藏?
- 网狐棋牌(一) ServerKernel中的IQueueService接口分析
- Python的这几个常用库,你会用吗?
- MySQL——binlog,redo log
- LeetCode 380. 常数时间插入、删除和获取随机元素(哈希+vector)
- 【软件架构】三层架构和MVC的比较
- 40 SD配置-销售凭证设置-分配计划行类别
- JavaScript变量提升
- 总结一下SQL语句中引号(')、quotedstr()、('')、format()在SQL语句中的用法
- JavaScript与页面交互
- 计算机网络技术期末应用试卷,中专学校2016年《计算机网络技术与应用》期末考试题(考试卷与答案)...
- 瑞昱网通芯片RTL8305NB-CG应用介绍
- Kconfig配置文件
- 【博弈论】势博弈(potential game)、EPG以及最佳响应、Nash均衡和帕累托(pareto)最优的理解
- python异步和进程_浅谈python异步IO,同步IO,线程与进程~
- 清除计算机策略,利用组策略清除历史记录
- 健身房有哪些令人讨厌的行为?
- 【Unity3D】拖尾TrailRenderer
- 多伦多大学朱子宁:一种选择语言探针的信息论观点
- Unity_UIWidgets新手入门