Android Verified Boot Recovery/OTA verify_package过程

本文深入探讨Android OTA升级过程中的公钥验证机制,详细解析/res/keys文件的来源及其在Android Recovery下的作用。从编译Makefile入手,揭示RECOVERY_INSTALL_OTA_KEYS如何将默认系统开发证书拷贝至目标目录,确保OTA升级包的安全性。

 Android Recovery下升级,实际上OTA最终也是调用这个方法。

里面有个流程是需要验证verify_package,使用的是/res/keys,这个keys是从哪儿来的呢。

  static constexpr const char* PUBLIC_KEYS_FILE = "/res/keys";
  std::vector<Certificate> loadedKeys;
  if (!load_keys(PUBLIC_KEYS_FILE, loadedKeys)) {
 查看了recovery编译out目录,确实发现有这个文件呢,

     recovery/root/res$ ls     keys

  刚开始以为是bootloader/recovery下,搜了没有。后面想了下,找下  RECOVERY文件的

编译Makefile。 在目录build/make/core/Makefile,找到了RECOVERY_INSTALL_OTA_KEYS,

顺着代码看了下:

    # substitute other keys for this one.
OTA_PUBLIC_KEYS := $(DEFAULT_SYSTEM_DEV_CERTIFICATE).x509.pem

    $(RECOVERY_INSTALL_OTA_KEYS): PRIVATE_OTA_PUBLIC_KEYS := $(OTA_PUBLIC_KEYS)

      $(hide) cp $(RECOVERY_INSTALL_OTA_KEYS) $(TARGET_RECOVERY_ROOT_OUT)/res/keys

   编译log:

      default_system_dev_certificate = (str) device/mediatek/common/security/releasekey

 

ORIGINAL BUGGY BEHAVIOR ------------------------ Fixed prefix = '../' (hardcoded) ✅ Case 1: Root level HTML HTML page: docs_build/index.html SVG embed: _images/diagram.svg (treated as docs_build/_images/) SVG link: ../my_package/class.html Resolved: docs_build/_images/../my_package/class.html = docs_build/my_package/class.html ✓ WORKS ❌ Case 2: Nested HTML (THE PROBLEM) HTML page: docs_build/my_package/index.html SVG embed: ../_images/diagram.svg (treated as docs_build/my_package/_images/) SVG link: ../my_package/class.html Resolved: docs_build/my_package/_images/../my_package/class.html = docs_build/my_package/my_package/class.html ❌ BROKEN Expected: docs_build/my_package/class.html NEW FIXED BEHAVIOR ------------------- ✅ Fixed Case 1: Root level HTML HTML page: docs_build/index.html HTML path depth: 0 SVG prefix: '../' * (0+1) = '../' SVG link: ../my_package/class.html Resolved: docs_build/_images/../my_package/class.html = docs_build/my_package/class.html ✓ WORKS ✅ Fixed Case 2: Nested HTML (NOW WORKS!) HTML page: docs_build/my_package/index.html HTML path depth: 1 (one '/' in 'my_package/index') SVG prefix: '../' * (1+1) = '../../' SVG link: ../../my_package/class.html Resolved: docs_build/my_package/_images/../../my_package/class.html = docs_build/(my_package/_images/../..)/my_package/class.html = docs_build/my_package/class.html ✓ FIXED! ✅ Fixed Case 3: Deeper nesting HTML page: docs_build/api/v1/endpoints/user/index.html HTML path depth: 4 ('api/v1/endpoints/user/index') SVG prefix: '../' * (4+1) = '../../../../../../' SVG link: ../../../../../../my_package/class.html Resolved: docs_build/api/v1/endpoints/user/_images/../../../../../../my_package/class.html = docs_build/my_package/class.html ✓ STILL WORKS! 🏆 SVG inheritance diagram fix verified working correctly! 帮我解析一下
最新发布
10-29
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值