OTA包添加自定义内容
起因
新开一条线,需要上传的OTA包里加点内容,好让后台校验它是否是当前这条线(短期最小改动)。
开整
之前看过ota包结构,整包和差分包里都有一个payload_properties.txt文件,所以最简单的就是给这个txt文件里追加点自定义内容,然后测试上传ota包到发布平台上之后,后端通过命令读取这个标志校验,如果校验成功,即可点击发布。
既然思路清楚了,那瞅瞅payload_properties.txt的内容是在哪开始写入的。
grep -rn "payload_properties.txt" *
发现在ota_from_target_files.py里有如下这段代码
def Sign(self, payload_signer):"""Generates and signs the hashes of the payload and metadata.Args:payload_signer: A PayloadSigner() instance that serves the signing work.Raises:AssertionError: On any failure when calling brillo_update_payload script."""assert isinstance(payload_signer, PayloadSigner)# 1. Generate hashes of the payload and metadata files.payload_sig_file = common.MakeTempFile(prefix="sig-", suffix=".bin")metadata_sig_file = common.MakeTempFile(prefix="sig-", suffix=".bin")cmd = ["brillo_update_payload", "hash","--unsigned_payload", self.payload_file,"--signature_size", str(payload_signer.maximum_signature_size),"--metadata_hash_file", metadata_sig_file,"--payload_hash_file", payload_sig_file]self._Run(cmd)# 2. Sign the hashes.signed_payload_sig_file = payload_signer.Sign(payload_sig_file)signed_metadata_sig_file = payload_signer.Sign(metadata_sig_file)# 3. Insert the signatures back into the payload file.signed_payload_file = common.MakeTempFile(prefix="signed-payload-",suffix=".bin")cmd = ["brillo_update_payload", "sign","--unsigned_payload", self.payload_file,"--payload", signed_payload_file,"--signature_size", str(payload_signer.maximum_signature_size),"--metadata_signature_file", signed_metadata_sig_file,"--payload_signature_file", signed_payload_sig_file]self._Run(cmd)# 4. Dump the signed payload properties.properties_file = common.MakeTempFile(prefix="payload-properties-",suffix=".txt")cmd = ["brillo_update_payload", "properties","--payload", signed_payload_file,"--properties_file", properties_file]self._Run(cmd)if self.secondary:with open(properties_file, "a") as f:f.write("SWITCH_SLOT_ON_REBOOT=0\n")if OPTIONS.wipe_user_data:with open(properties_file, "a") as f:f.write("POWERWASH=1\n")self.payload_file = signed_payload_fileself.payload_properties = properties_file
可以看到最后这里有创建payload_properties.txt,并往里面写入的操作,那在这之前,我们可以加上标志
# 4. Dump the signed payload properties.properties_file = common.MakeTempFile(prefix="payload-properties-",suffix=".txt")cmd = ["brillo_update_payload", "properties","--payload", signed_payload_file,"--properties_file", properties_file]self._Run(cmd)with open(properties_file, "a") as f:f.write("Platform_API=1\n")if self.secondary:with open(properties_file, "a") as f:f.write("SWITCH_SLOT_ON_REBOOT=0\n")if OPTIONS.wipe_user_data:with open(properties_file, "a") as f:f.write("POWERWASH=1\n")self.payload_file = signed_payload_fileself.payload_properties = properties_file
编译OTA 整包和差分包,解压后,发现payload_properties.txt里多了这一行,并且也丝毫没有影响正常升级。
读取
unzip -p oriUpdate.zip payload_properties.txt
如下图:

收工!!!
相关文章:
OTA包添加自定义内容
起因 新开一条线,需要上传的OTA包里加点内容,好让后台校验它是否是当前这条线(短期最小改动)。 开整 之前看过ota包结构,整包和差分包里都有一个payload_properties.txt文件,所以最简单的就是给这个txt文件里追加点自定义内容&…...
Luatos Air700 改变BL0942串口波特率
LuatOs 改变模块串口波特率思路参照 luatos 改变AIR530串口波特率 BL0942默认串口波特率可以通过SCLK_BPS引脚接3.3V电源设置到9600bps 但如果调整到38400bps需要修改0x19寄存器 bl0942 v1.06版的特殊寄存器说明,注意早期版本特殊寄存器说明存在错误 完整代码 mai…...
不可忽视的国外服务器地址IP选择指南
在如今互联网高速发展的时代,海外服务器扮演着重要的角色。选择合适的国外服务器IP地址却是一项复杂而又关键的任务。本文将为您介绍一些不可忽视的国外服务器地址IP选择指南。 私有IP地址: 私有IP地址是指在局域网内使用的IP地址,用于…...
C语言 预处理详解
目录 1.预定义符号 2.#define 2.1#define 定义标识符 2.2#define 定义宏 2.3#define 替换规则 2.4#和## 2.4.1# 的作用 2.4.2## 的作用 2.5 带有副作用的宏参数 2.6宏和函数的对比 对比 **2.7内联函数 2.8命名约定 3.#undef **4.命令行定义 5.条件编译 常…...
c++ async 使用详解,创建异步任务的多种方法
c async 使用详解 std::async 头文件 #include <future>。 函数原型: template<class Function, class... Args> std::future<std::invoke_result_t<std::decay_t<Function>,std::decay_t<Args>...>>async(std::launch polic…...
万物皆数——用matlab求解二阶微分方程
一、背景 毕达哥拉斯的“万物皆数”哲学观点表达了一个理念,即宇宙万物都可以通过数学语言来描述,数是万物的本原。 勾股定理就是毕达哥拉斯提出,因此在西方勾股定理也被叫做毕达哥拉斯定理。 工科类的专业,越到后面越感觉到数学…...
jmeter接口自动化部署jenkins教程
首先,保证本地安装并部署了jenkins,jmeter,xslproc 我搭建的自动化测试框架是jmeterjenkinsxslproc ---注意:原理是,jmeter自生成的报告jtl文件,通过xslproc工具,再结合jmeter自带的模板修改&…...
前端js实现将数组对象组装成自己需要的属性,或者去掉对象中不必要的属性
前言 提示:这里可以添加本文要记录的大概内容: 需求:前端js实现将数组对象组装成自己需要的属性,或者前端js实现去掉对象中不必要的属性 提示:以下是本篇文章正文内容,下面案例可供参考 一、示例数组对象…...
MeterSphere 任意文件读取漏洞(CVE-2023-25814)
MeterSphere 任意文件读取漏洞(CVE-2023-25814) 免责声明漏洞描述漏洞影响漏洞危害网络测绘Fofa: title"MeterSphere" 漏洞复现1. 构造poc2. 发送数据包3. 查看文件 免责声明 仅用于技术交流,目的是向相关安全人员展示漏洞利用方式,以便更好地…...
设计模式-01-单例设计模式
经典的设计模式有23种,但是常用的设计模式一般情况下不会到一半,我们就针对一些常用的设计模式进行一些详细的讲解和分析,方便大家更加容易理解和使用设计模式。 1-为什么要使用单例 单例设计模式(Singleton Design Pattern&…...
霍尔电流传感器如何进行可靠性测试?主要应用在哪些领域?
霍尔电流传感器广泛应用于航空航天、电源监测、飞行器状态监测、变速驱动设备、焊接设备供电电源、新能源汽车蓄电池管理系统等领域,在电流检测领域中有着重要地位和实用价值,在电驱系统中被称为新能源汽车的动力“心脏”。因此,霍尔电流传感…...
pandas按行按列遍历Dataframe的三种方式
遍历数据有以下三种方法: 简单对上面三种方法进行说明: iterrows(): 按行遍历,将DataFrame的每一行迭代为(index, Series)对,可以通过row[name]对元素进行访问。 itertuples(): 按行遍历,将DataFrame的每一行迭代为元…...
Api接口如何防止被刷?
现在越来越多的应用程序和服务都提供了API接口,使得开发人员可以方便地与这些应用程序和服务进行交互。但是,由于API接口是公开的,因此很容易被黑客利用,对系统造成损害。为了确保API接口的安全性,我们需要采取一些措施…...
Django——orm模块创建表关系
django orm中如何创建表关系 1. 表关系分析 表与表之间的关系: 一对多 多对多 一对一 没有关系 判断表关系的方法: 换位思考用4张表举例: 图书表 出版社表 作者表 作者详情表图书和出版社是一对多的关系 外键字段建在多的那一方图书和作者是多对多的关系 需要创建第三张表来…...
Django知识点
目录 一、三板斧的使用 二、全局配置文件 三、静态文件的设置 四、request对象的方法 五、pycharm链接数据库 六、Django链接数据库 七、orm介绍 一、三板斧的使用 三个方法: HttpResponse renderredirect def index(request):print(request)return HttpR…...
基于单片机设计的智能风扇(红外线无线控制开关调速定时)
一、项目介绍 在炎热的夏季,风扇成为人们室内生活中必不可少的电器产品。然而,传统的风扇控制方式存在一些不便之处,比如需要手动操作开关、无法远程控制和调速,以及缺乏定时功能等。为了解决这些问题,设计了一款基于…...
k8s报错pause 3.2 解决方案
报错 Failed to create pod sandbox: rpc error: code Unknown desc failed to get sandbox image "k8s.gcr.io/pause:3.2": failed to pull image "k8s.gcr.io/pause:3.2": failed to pull and unpack image "k8s.gcr.io/pause:3.2": failed…...
基于遗传算法的电器分类,基于GA的电器分类
目录 背影 遗传算法的原理及步骤 基本定义 编码方式 适应度函数 运算过程 代码 结果分析 展望 完整代码下载链接:基于遗传算法的电器识别,基于遗传算法的电器分类(代码完整,数据齐全)资源-CSDN文库 https://download.csdn.net/download/abc991835105/88506649 背影 电器…...
某XX自考小程序的AES加密分析
前言 主要是报了自考在这个小程序上面做题,就研究了一下这个接口本文仅供学习交流使用,请勿随意传播。如有侵犯你的权益及时联系我删除。 一、抓包分析打开小程序,打开devtools 工具,这里就不啰嗦,直接上过程。 点击…...
加密算法笔记
MD5: 目前相对容易破解,且容易发生碰撞; 不可逆(但是网络上有很多破解方法) SHA256: 不会碰撞; 可以加盐,也可以不加盐; 不可逆; HmacSHA256在线加密-HmacMD5加密-散列哈希HASH加密工具 相同点 1、都是密码散列函数,加密不可逆。 2、都可…...
告别漂移轨迹!用Valhalla的HMM地图匹配API,5分钟搞定车辆轨迹纠偏
5分钟实战:用Valhalla的HMM算法实现高精度车辆轨迹纠偏 当物流调度系统显示某辆货车正在珠江中央"行驶",或是共享单车轨迹在建筑物间"穿墙而过",这些令人啼笑皆非的GPS漂移现象背后,是每个轨迹数据处理工程师…...
从Fiori App反推CDS视图:手把手教你定位SAP S/4HANA标准OData服务背后的数据模型
从Fiori App反推CDS视图:手把手教你定位SAP S/4HANA标准OData服务背后的数据模型 当你在SAP S/4HANA环境中配置或增强标准Fiori应用时,经常会遇到需要深入理解其底层数据模型的情况。本文将带你一步步逆向工程,从Fiori应用界面出发ÿ…...
Visual C++运行库整合安装器:告别繁琐安装的一站式解决方案
Visual C运行库整合安装器:告别繁琐安装的一站式解决方案 【免费下载链接】vcredist AIO Repack for latest Microsoft Visual C Redistributable Runtimes 项目地址: https://gitcode.com/gh_mirrors/vc/vcredist 你是否曾经因为"缺少MSVCP140.dll&quo…...
提升游戏体验:原神自动化脚本的智能辅助解决方案
提升游戏体验:原神自动化脚本的智能辅助解决方案 【免费下载链接】genshin-impact-script 原神脚本,包含自动钓鱼、自动拾取、自动跳过对话等多项实用功能。A Genshin Impact script includes many useful features such as automatic fishing, automati…...
每日热门skill:让你的AI告别被动等待:AgentAutonomyKit实现智能体自主工作
当Claude Max每月给你几十万token额度,你的AI却每天只用了不到20%——不是它不够聪明,是它一直在等你"喂饭"。 这个Skill,让你的AI从"等指令"变成"自己找事干"。 文末有下载链接。 一、问题:你的AI正在大规模浪费资源 先问自己一个问题: …...
Linux 静态库与共享库完全指南:从制作到使用
引言在C语言开发中,我们经常需要重复使用一些通用功能,比如数学计算、字符串处理、文件操作等。如果每次都重新编写这些代码,不仅效率低下,还容易出错。库(Library) 就是解决这个问题的方案——它是预先编译…...
【ROS】ros-noetic与anaconda环境融合:解决Python路径冲突的实战指南
1. 环境冲突的根源分析 当你在Ubuntu 20.04上同时使用ROS Noetic和Anaconda时,最常遇到的报错就是"ImportError: No module named torch"。这个问题的本质是Python的路径搜索机制(sys.path)被ROS的初始化脚本改写了。我刚开始用ROS…...
MySQL 查询缓存机制的应用与缺陷
MySQL查询缓存机制的应用与缺陷 在数据库优化领域,MySQL的查询缓存机制曾是一项重要特性,它通过缓存SELECT语句及其结果集,减少重复查询的开销,显著提升性能。随着业务场景的复杂化,其局限性逐渐暴露,最终…...
Lenovo Legion Toolkit完全解析:拯救者笔记本的轻量化性能管理终极指南
Lenovo Legion Toolkit完全解析:拯救者笔记本的轻量化性能管理终极指南 【免费下载链接】LenovoLegionToolkit Lightweight Lenovo Vantage and Hotkeys replacement for Lenovo Legion laptops. 项目地址: https://gitcode.com/gh_mirrors/le/LenovoLegionToolki…...
EasyClaw怎么炒股?2026年AI炒股零基础入门教程|6步学会核心操作流程
很多人听说AI能辅助炒股,但不知道从哪里入手——AI炒股的6个步骤到底怎么操作?用什么工具?本文以EasyClaw为例,把AI炒股的6个步骤完整走一遍,从打开软件到拿到分析结果,零基础跟着做就能上手。 读完本文你…...
