CN115563628A - 一种变量读取、写入方法和变量读取、写入装置 - Google Patents
一种变量读取、写入方法和变量读取、写入装置 Download PDFInfo
- Publication number
- CN115563628A CN115563628A CN202210051767.1A CN202210051767A CN115563628A CN 115563628 A CN115563628 A CN 115563628A CN 202210051767 A CN202210051767 A CN 202210051767A CN 115563628 A CN115563628 A CN 115563628A
- Authority
- CN
- China
- Prior art keywords
- variable
- application
- data
- function interface
- bios
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/60—Protecting data
- G06F21/602—Providing cryptographic facilities or services
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/60—Protecting data
- G06F21/64—Protecting data integrity, e.g. using checksums, certificates or signatures
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Health & Medical Sciences (AREA)
- Bioethics (AREA)
- General Health & Medical Sciences (AREA)
- Computer Hardware Design (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Storage Device Security (AREA)
Abstract
本申请实施例提供一种变量读取、写入方法和变量读取、写入装置,涉及终端领域,能够保护重要变量不被盗取或篡改。其中,变量读取方法包括:第一应用程序向应用态过滤库发送读取请求,读取请求用于请求读取第一变量的数据,第一请求包括第一变量的全局唯一标识符GUID和变量名;响应于接收第一请求,应用态过滤库根据第一变量的GUID和变量名获取第一变量的数据,第一变量的数据包括标志位和第一变量对应的净载荷;在第一应用程序经过安全校验的情况下,应用态过滤库删除标志位;应用态过滤库向第一应用程序发送净载荷。
Description
技术领域
本申请涉及终端领域,尤其涉及一种变量读取、写入方法和变量读取、写入装置。
背景技术
嵌入式开发套件2(embedded development kit,EDK2/EDKII)提供一种统一的可扩展固件接口(unified extensible firmware interface,UEFI)变量读写机制,可以向操作系统(operating system,OS)提供读写接口。通过向该读写接口输入变量名称,可以获取变量(variable)的内容,并可以对变量的内容直接进行修改。
例如,windows操作系统的SetFirmwareEnvironmentVariable接口可以用于修改变量,SetFirmwareEnvironmentVariable接口可以调用EDK2中gRT->SetVariable接口完成变量修改操作。
由于UEFI变量读写机制是公开的,黑客可能借助UEFI变量读写机制编写病毒程序来盗取或篡改重要变量(例如,影响电子设备开关机的变量)。重要变量被盗取可能危害用户利益,重要变量被篡改会导致系统出现不可预期的异常行为,系统修复难度高。因此,如何保护重要变量是一个亟待解决的问题。
发明内容
本申请提供一种变量读取、写入方法和变量读取、写入装置,能够保护重要变量不被盗取或篡改。
为达到上述目的,本申请的实施例采用如下技术方案:
第一方面,提供了一种变量读取方法,包括:第一应用程序向应用态过滤库发送读取请求,读取请求用于请求读取第一变量的数据,第一请求包括第一变量的全局唯一标识符GUID和变量名;响应于接收第一请求,应用态过滤库根据第一变量的GUID和变量名获取第一变量的数据,第一变量的数据包括标志位和第一变量对应的净载荷;在第一应用程序经过安全校验的情况下,应用态过滤库删除标志位;应用态过滤库向第一应用程序发送净载荷。
基于本申请实施例提供的方法,上层应用读取第一变量时,若应用态过滤库判断第一变量为私有变量(即存在标志位),应用态过滤库可以对上层应用进行验证,若验证通过,应用态过滤库可以从第一变量的数据中删除标志位得到净载荷,将净载荷返回给上层应用。由于上层应用验证通过,认为第一应用程序为安全的应用程序而非恶意应用程序,因此可以向第一应用程序发送第一变量的净载荷,这样可以抵御恶意程序对私有变量的篡改或盗取。
在一种可能的设计中,在第一应用程序经过安全校验的情况下,应用态过滤库删除标志位包括:应用态过滤库从第一应用程序接收数字签名,数字签名是第一应用程序根据公钥加密的;应用态过滤库根据私钥对数字签名进行验证;若验证通过,应用态过滤库删除标志位。即应用态过滤库可以基于数字签名对第一应用程序进行验证,若验证通过,认为第一应用程序为安全的应用程序而非恶意应用程序,从而可以向第一应用程序发送第一变量的净载荷。
在一种可能的设计中,应用态过滤库根据GUID和变量名获取第一变量对应的数据之后,方法还包括:应用态过滤库确定第一变量对应的数据是否存在标志位。
在一种可能的设计中,在第一应用程序未经过安全校验的情况下,应用态过滤库向第一应用程序发送净载荷和标志位。若验证不通过,认为上层应用可能为恶意程序,应用态过滤库可以将净载荷和标志位一并返回给上层应用,恶意程序无法区分标志位和净载荷,从而可以抵御恶意程序对私有变量的篡改。
在一种可能的设计中,应用态过滤库位于应用层。
在一种可能的设计中,标志位为预设字符串。标志位可以采用ASCII字符,例如可以为“$PV$”,其对应的十六进制数据可以为0x24,0x50,0x56,0x24。
在一种可能的设计中,第一变量的数据还包括尺寸位、盐值位和校验位;其中,尺寸位用于指示第一变量的数据区域的字节数,校验位用于校验净载荷,盐值位用于保证校验位的复杂度。
在一种可能的设计中,标志位、尺寸位、盐值位和校验位是根据哈希算法生成的。
在一种可能的设计中,方法还包括:若第一变量的数据不包括标志位,应用态过滤库直接将第一变量的净载荷发送给第一应用程序。若第一变量的数据不包括标志位,可以认为第一变量的类型为通用变量,应用态过滤Library可以直接将第一变量的净载荷返回给第一应用程序。
在一种可能的设计中,应用态过滤库根据第一变量的GUID和变量名获取第一变量的数据包括:应用态过滤库调用第一函数接口读取第一变量的数据,并向第一函数接口发送第一变量的GUID和变量名,第一函数接口是操作系统向应用层提供的读取变量的接口;第一函数接口调用第二函数接口读取第一变量的数据,并向第二函数接口发送第一变量的GUID和变量名,第二函数接口是操作系统提供的用于从基本输入输出系统BIOS层读取变量的接口;第二函数接口调用第三函数接口读取第一变量的数据,并向第三函数接口发送第一变量的GUID和变量名,第三函数接口是BIOS层向操作系统提供的用于读取变量的接口;第三函数接口调用BIOS过滤库读取第一变量的数据,并向BIOS过滤库发送第一变量的GUID和变量名,BIOS过滤库是BIOS层中用于验证待写入数据的接口;BIOS过滤库调用第四函数接口读取第一变量的数据,并向第四函数接口发送第一变量的GUID和变量名,第四函数接口是BIOS层中的运行时服务提供的用于从内存中读取变量的接口;第四函数接口根据第一变量的GUID和变量名从内存中读取第一变量的数据;第四函数接口向BIOS过滤库发送第一变量的数据;BIOS过滤库向第三函数接口发送第一变量的数据;第三函数接口向第二函数接口发送第一变量的数据;第二函数接口向第一函数接口发送第一变量的数据;第一函数接口向应用态过滤库发送第一变量的数据。即在读取第一变量的时候,可以由多个接口相互调用配合获取第一变量的数据。
第二方面,提供了一种变量写入方法,包括:第一应用程序向应用态过滤库发送写入请求,写入请求用于请求写入第一变量的数据,写入请求包括第一变量的全局唯一标识符GUID、变量名和第一净载荷;在第一应用程序是经过安全校验的情况下,应用态过滤库根据GUID和变量名读取第一变量对应的数据,第一变量的数据包括标志位和第一变量对应的第二净载荷;应用态过滤库调用基本输入输出系统BIOS过滤库写入标志位、校验位和第一净载荷,校验位用于校验第一净载荷;BIOS过滤库验证校验位;若验证成功,BIOS过滤库将标志位、校验位和第一净载荷写入内存。
基于本申请实施例提供的方法,第一应用程序向应用态过滤库发送写入请求后,在第一应用程序是经过安全校验的情况下,应用态过滤库可以先读取第一变量在内存中对应的数据,若读取到的第一变量的数据包括标志位,应用态过滤库调用BIOS过滤库写入标志位、校验位和第一净载荷。BIOS过滤库验证校验位,若验证成功,认为第一净载荷是安全的应用程序写入的而非被病毒软件恶意篡改过的。然后,BIOS过滤库才将标志位、校验位和第一净载荷写入内存。这样,可以避免病毒软件恶意篡改变量导致的系统崩溃,不开机等问题。
在一种可能的设计中,在第一应用程序是经过安全校验的情况下,应用态过滤库根据GUID和变量名读取第一变量对应的数据包括:应用态过滤库从第一应用程序接收数字签名,数字签名是第一应用程序根据公钥加密的;应用态过滤库根据私钥对数字签名进行验证;若验证通过,应用态过滤库根据GUID和变量名读取第一变量对应的数据。即应用态过滤库可以基于数字签名对第一应用程序进行验证,若验证通过,认为第一应用程序为安全的应用程序而非恶意应用程序,从而可以向第一应用程序发送第一变量的净载荷。
在一种可能的设计中,应用态过滤库位于应用层,BIOS过滤库位于BIOS层。
在一种可能的设计中,应用态过滤库根据GUID和变量名读取第一变量对应的数据之后,方法还包括:应用态过滤库确定第一变量对应的数据是否存在标志位。
在一种可能的设计中,标志位为预设字符串。
在一种可能的设计中,应用态过滤库调用基本输入输出系统BIOS过滤库写入标志位和第一净载荷包括:应用态过滤库调用BIOS过滤库写入标志位、校验位、尺寸位、盐值位和第一净载荷;其中,尺寸位用于指示第一数据的字节数,盐值位用于保证校验位的复杂度。
在一种可能的设计中,标志位、尺寸位、盐值位和校验位是根据散列算法生成的。
在一种可能的设计中,BIOS过滤库验证校验位包括:BIOS过滤库根据标志位、尺寸位和盐值位验证校验位。
在一种可能的设计中,应用态过滤库根据第一变量的GUID和变量名获取第一变量的数据包括:应用态过滤库调用第一函数接口读取第一变量的数据,并向第一函数接口发送第一变量的GUID和变量名,第一函数接口是操作系统向应用层提供的读取变量的接口;第一函数接口调用第二函数接口读取第一变量的数据,并向第二函数接口发送第一变量的GUID和变量名,第二函数接口是操作系统提供的用于从基本输入输出系统BIOS层读取变量的接口;第二函数接口调用第三函数接口读取第一变量的数据,并向第三函数接口发送第一变量的GUID和变量名,第三函数接口是BIOS层向操作系统提供的用于读取UEFI变量的接口;第三函数接口调用BIOS过滤库读取第一变量的数据,并向BIOS过滤库发送第一变量的GUID和变量名,BIOS过滤库是BIOS层中用于验证待写入数据的接口;BIOS过滤库调用第四函数接口读取第一变量的数据,并向第四函数接口发送第一变量的GUID和变量名,第四函数接口是BIOS层中的运行时服务提供的用于从内存中读取变量的接口;第四函数接口根据第一变量的GUID和变量名从内存中读取第一变量的数据;第四函数接口向BIOS过滤库发送第一变量的数据;BIOS过滤库向第三函数接口发送第一变量的数据;第三函数接口向第二函数接口发送第一变量的数据;第二函数接口向第一函数接口发送第一变量的数据;第一函数接口向应用态过滤库发送第一变量的数据。即在读取第一变量的时候,可以由多个接口相互调用配合获取第一变量的数据。
在一种可能的设计中,应用态过滤库调用BIOS过滤库写入标志位、校验位和第一净载荷包括:应用态过滤库调用第五函数接口写入标志位、校验位和第一净载荷,并向第五函数接口发送第一变量的GUID、变量名、标志位、校验位和第一净载荷,第五函数接口是操作系统向应用层提供的写入变量的接口;第五函数接口调用第六函数接口写入标志位、校验位和第一净载荷,并向第六函数接口发送第一变量的GUID、变量名和第三数据,第六函数接口是操作系统提供的用于向基本输入输出系统BIOS层写入变量的接口;第六函数接口调用第七函数接口写入标志位、校验位和第一净载荷,并向第七函数接口发送第一变量的GUID、变量名和第三数据,第七函数接口是BIOS层向操作系统提供的用于写入变量的接口;第七函数接口调用BIOS过滤库写入标志位、校验位和第一净载荷,并向BIOS过滤库发送第一变量的GUID、变量名和标志位、校验位和第一净载荷。即在写入第一变量的时候,可以由多个接口相互调用配合写入第一变量的数据。
在一种可能的设计中,BIOS过滤库写入标志位、校验位和第一净载荷包括:BIOS过滤库调用第八函数接口写入标志位、校验位和第一净载荷,并向第八函数接口发送第一变量的GUID、变量名和标志位、校验位和第一净载荷,第八函数接口是BIOS层中的运行时服务提供的用于向内存中写入变量的接口;第八函数接口根据第一变量的GUID和变量名将标志位、校验位和第一净载荷写入内存。BIOS过滤库写入第一变量的时候,可以调用第八函数接口(BIOS层中的运行时服务提供的用于向内存中写入变量的接口)写入第一变量的数据。
在一种可能的设计中,方法还包括:第八函数接口向BIOS过滤库发送第一净载荷是否写入成功的结果;BIOS过滤库向第七函数接口发送第一净载荷是否写入成功的结果;第七函数接口向第六函数接口发送第一净载荷是否写入成功的结果;第六函数接口向第五函数接口发送第一净载荷是否写入成功的结果;第五函数接口向应用态过滤库发送第一净载荷是否写入成功的结果;应用态过滤库向第一应用程序发送第一净载荷是否写入成功的结果。这样,第一应用程序可以获知第一净载荷是否写入成功,从而可以根据写入结果执行后续流程。
第三方面,本申请提供一种计算机可读存储介质,该计算机可读存储介质包括计算机指令。当计算机指令在电子设备(如笔记本电脑)上运行时,使得该电子设备执行如第一方面和/或第二方面及其任一种可能的设计方式所述的方法。
第四方面,本申请提供一种计算机程序产品,当所述计算机程序产品在计算机上运行时,使得所述计算机执行如第一方面和/或第二方面及其任一种可能的设计方式所述的方法。
第五方面,本申请实施例提供了一种变量读取、写入装置,包括处理器,处理器和存储器耦合,存储器存储有程序指令,当存储器存储的程序指令被处理器执行时使得所述装置实现上述第一方面和/或第二方面及其任一种可能的设计方式所述的方法。所述装置可以为电子设备或服务器设备;或可以为电子设备或服务器设备中的一个组成部分,如芯片。
第六方面,本申请实施例提供了一种变量读取、写入装置,所述装置可以按照功能划分为不同的逻辑单元或模块,各单元或模块执行不同的功能,以使得所述装置执行上述第一方面和/或第二方面及其任一种可能的设计方式所述的方法。
第七方面,本申请提供一种芯片系统,该芯片系统包括一个或多个接口电路和一个或多个处理器。该接口电路和处理器通过线路互联。上述芯片系统可以应用于包括通信模块和存储器的电子设备。该接口电路用于从电子设备的存储器接收信号,并向处理器发送接收到的信号,该信号包括存储器中存储的计算机指令。当处理器执行该计算机指令时,电子设备可以执行如第一方面和/或第二方面及其任一种可能的设计方式所述的方法。
可以理解地,上述提供的第三方面所述的计算机可读存储介质,第四方面所述的计算机程序产品,第五方面、第六方面所述的装置以及第七方面所述的芯片系统,所能达到的有益效果,可参考如第一方面及其任一种可能的设计方式中的有益效果,此处不再赘述。
附图说明
图1为本申请实施例提供的一种UEFI的开机流流程示意图;
图2为本申请实施例提供的一种基于EDK2的UEFI架构示意图;
图3为本申请实施例提供的一种电子设备的结构示意图;
图4为本申请实施例提供的一种变量的结构示意图;
图5为本申请实施例提供的一种读取/写入变量调用堆栈的示意图;
图6a为本申请实施例提供的又一种变量的结构示意图;
图6b为本申请实施例提供的一种代码示意图;
图7为本申请实施例提供的一种信号交互示意图;
图8为本申请实施例提供的又一种信号交互示意图;
图9为本申请实施例提供的一种显示示意图;
图10为本申请实施例提供的又一种信号交互示意图;
图11为本申请实施例提供的一种芯片系统的结构示意图。
具体实施方式
为了下述各实施例的描述清楚简洁,首先给出相关概念或技术的简要介绍:
动态链接库(dynamic link library,DLL):为可执行的一组代码,用于完成应用程序中的某些数据的计算处理。在装载完应用程序后,将应用程序需要调用的动态链接库装载到内存;响应于应用程序调用动态链接库的指令,运行动态链接库获取执行结果。本申请实施例中,应用态过滤库(library)属于一种动态链接库。
公私钥加密技术:一对秘钥可以包括一个公钥和一个私钥,公钥可以自由发布,私钥则由用户秘密保存。秘钥可以用于验证签名(即验签)。
签名:采用公钥对报文(或其他信息)进行加密的过程相当于生成签名,应注意,采用公钥签名的目的是为了签名,不是为了保密。
验签:采用与该公钥对应的私钥进行解密的过程相当于验签(即验证签名),若采用私钥解密得到的报文与原报文一致,则验证签名成功。对报文进行签名可以保证报文的完整性,若采用私钥验签成功,则说明报文在传输过程中未被篡改。
UEFI启动过程:如图1所示,UEFI从启动到关机断电分为七个阶段,包括安全校验(security phase,SEC),EFI预初始化(Pre-EFI(extensible firmware interface)initialization,PEI),驱动执行环境(driver execution environment,DXE),启动设备选择(boot device selection,BDS),操作系统加载前期(transient system load,TSL),运行时(run time,RT)和灾难恢复(after life,AL)等阶段。其中SEC、PEI和DXE为UEFI的验证与初始化环节,主要承担映像验证和运行环境的初始化。BDS和TSL为UEFI的运行环节,主要承担操作系统的引导,用于引导读取存储器中的操作系统(例如,windows)。RT阶段控制权已交至系统,UEFI保留运行时服务。AL为灾难恢复阶段,用于定义运行异常处理。
具体的,在SEC阶段,可以对固件进行前期验证(Pre verifier),保证固件(硬件)安全启动,增强系统的安全性。具体的,电脑刚接通电源时,可以对硬件部分进行检测,该过程也可以称为加电自检(power on self test,POST)。通常完整的POST包括对中央处理器(central processing unit,CPU),640K基本内存,1M以上的扩展内存,只读存储器(readonly memory,ROM),主板,互补金属氧化物半导体(complementary metal-oxide-semiconductor,CMOS)光电晶体管存储器,串并口,显示卡,软硬盘子系统及外接设备进行测试。一旦在POST中发现问题,系统将给出提示信息或鸣笛警告。在PEI阶段,可以进行CPU初始化(CPU Init)、芯片组初始化(Chipset Init)和主板初始化(Board init)等工作。在PEI阶段,还可以进行基本输入输出系统(basic input output system,BIOS)设置,主要是设置硬件的一些参数,当电脑启动时会读取这些参数,并和实际硬件设置进行比较。其中,BIOS是存储在主板上的EEPROM,在系统上电开机阶段,负责初始化硬件,并屏蔽底层硬件的差异,向操作系统提供一个统一的接口。在DXE阶段,可以遍历所有的DXE驱动(Driver),包括设备(Device)、总线(Bus)和服务驱动程序(Service Driver),完成硬件系统的初始化。EFI驱动派遣(即DXE Dispatcher),用于为Driver的遍历执行提供相应的操作顺序。当所有Driver执行完毕后,UEFI系统完成初始化工作,进入BDS阶段,选择相应的启动设备引导系统启动。在BDS阶段,启动管理器可以按照Boot order选择相应的启动设备,并执行相应的启动策略。在TSL阶段,用户可进入UEFI Shell(一个提供用户和UEFI系统之间的接口,进入UEFI Shell可以对计算机系统进行配置),通过Shell指令进行操作。一般情况下系统会直接跳过UEFI shell,直接进入OS启动加载程序(Boot Loader),除非人为操作或产生异常。在RT&AL阶段,Boot Loader获取操作系统的控制权,UEFI仅保留Runtime Service对接使用。而AL阶段则是指在RT阶段中出现异常时的操作过程。
如图2所示,为本申请实施例提供的一种基于EDK2的UEFI架构。UEFI提供了启动态服务(BOOTSERVICE)和运行态服务(RUNTIMESERVICE)。其中BOOTSERVICE在操作系统运行时之前可用(Boot services and structures Only available prior to OS runtime),在进入操作系统的阶段会退出。BOOTSERVICE期间可以运行以下功能函数:Active consoles(用于激活控制台)、Input console(用于输入控制,如键盘鼠标控制)、Output console(用于输出控制,如显示器控制)、Standard error console(用于标准出错码控制,如发现故障时显示出错码)等。RUNTIMESERVICE在操作系统运行时可用(Runtime services andstructures available prior to OS runtime),即在操作系统运行时仅保留了RUNTIMESERVICE。RUNTIMESERVICE期间可以运行以下函数:UEFI Runtime services table(运行时服务,用于记录可实时运行的服务程序)、Variable services(变量服务,用于记录环境变量相关的服务程序)、Real time clock services(实时时钟服务,用于为系统提供时钟服务)、Reset services(重置服务,用于为系统提供重置底层硬件的服务)等。其中,Variable services可以用于读写变量操作。
EDK2提供一种UEFI变量读写机制,可以向OS提供读写接口,允许OS对变量(环境变量)进行修改。EDK2架构中存在gRT->GetNextVariableName函数,调用该函数可以轻松的将所有的EDK2的变量遍历出来。然后,可以通过windows操作系统的SetFirmwareEnvironmentVariable接口修改变量。该接口可以调用EDK2中gRT->SetVariable接口。gRT->SetVariable接口可以获取变量名称和数据大小,并可以直接进行修改。但是,若重要变量篡改会导致系统出现不可预期的异常行为甚至故障变砖的风险,且系统修复成本和难度高。因此,如何防止重要变量被篡改,是一个亟待解决的问题。
针对上述问题,本申请实施例提供一种变量读取、写入方法,可以针对重要变量的读写进行验证,避免重要变量被恶意第三方程序窃取和修改。
本申请实施例提供的方法可以应用于电子设备。电子设备例如可以为笔记本电脑(膝上型电脑)、平板电脑、台式机(桌面型电脑)、手机、手持计算机、超级移动个人计算机(ultra-mobile personal computer,UMPC)、上网本、个人数字助理(personal digitalassistant,PDA)、增强现实(augmented reality,AR)\虚拟现实(virtual reality,VR)设备等,本申请实施例对电子设备的具体形态不作特殊限制。
图3为本申请实施例提供的一种电子设备100的结构示意图。
如图3所示,电子设备100可以包括处理器110,外部存储器接口120,内部存储器121,通用串行总线(universal serial bus,USB)接口130,充电管理模块140,电源管理模块141,电池142,天线1,天线2,移动通信模块150,无线通信模块160,音频模块170,扬声器170A,受话器170B,麦克风170C,耳机接口170D,传感器模块180,按键190,马达191,指示器192,摄像头193,显示屏194,以及用户标识模块(subscriber identification module,SIM)卡接口195等。
其中,传感器模块180可以包括压力传感器180A,陀螺仪传感器180B,气压传感器180C,磁传感器180D,加速度传感器180E,距离传感器180F,接近光传感器180G,指纹传感器180H,温度传感器180J,触摸传感器180K,环境光传感器180L,骨传导传感器180M等。
可以理解的是,本实施例示意的结构并不构成对电子设备100的具体限定。在另一些实施例中,电子设备100可以包括比图示更多或更少的部件,或者组合某些部件,或者拆分某些部件,或者不同的部件布置。图示的部件可以以硬件,软件或软件和硬件的组合实现。
处理器110可以包括一个或多个处理单元,例如:处理器110可以包括应用处理器(application processor,AP),调制解调处理器,图形处理器(graphics processingunit,GPU),图像信号处理器(image signal processor,ISP),控制器,存储器,视频编解码器,数字信号处理器(digital signal processor,DSP),基带处理器,和/或神经网络处理器(neural-network processing unit,NPU)等。其中,不同的处理单元可以是独立的器件,也可以集成在一个或多个处理器中。
控制器可以是电子设备100的神经中枢和指挥中心。控制器可以根据指令操作码和时序信号,产生操作控制信号,完成取指令和执行指令的控制。
处理器110中还可以设置存储器,用于存储指令和数据。在一些实施例中,处理器110中的存储器为高速缓冲存储器。该存储器可以保存处理器110刚用过或循环使用的指令或数据。如果处理器110需要再次使用该指令或数据,可从所述存储器中直接调用。避免了重复存取,减少了处理器110的等待时间,因而提高了系统的效率。
在一些实施例中,处理器110可以包括一个或多个接口。接口可以包括集成电路(inter-integrated circuit,I2C)接口,集成电路内置音频(inter-integrated circuitsound,I2S)接口,脉冲编码调制(pulse code modulation,PCM)接口,通用异步收发传输器(universal asynchronous receiver/transmitter,UART)接口,移动产业处理器接口(mobile industry processor interface,MIPI),通用输入输出(general-purposeinput/output,GPIO)接口,用户标识模块(subscriber identity module,SIM)接口,和/或通用串行总线(universal serial bus,USB)接口等。
可以理解的是,本实施例示意的各模块间的接口连接关系,只是示意性说明,并不构成对电子设备100的结构限定。在另一些实施例中,电子设备100也可以采用上述实施例中不同的接口连接方式,或多种接口连接方式的组合。
充电管理模块140用于从充电器接收充电输入。充电管理模块140为电池142充电的同时,还可以通过电源管理模块141为电子设备供电。
电源管理模块141用于连接电池142,充电管理模块140与处理器110。电源管理模块141接收电池142和/或充电管理模块140的输入,为处理器110,内部存储器121,外部存储器,显示屏194,摄像头193,和无线通信模块160等供电。在其他一些实施例中,电源管理模块141也可以设置于处理器110中。在另一些实施例中,电源管理模块141和充电管理模块140也可以设置于同一个器件中。
电子设备100的无线通信功能可以通过天线1,天线2,移动通信模块150,无线通信模块160,调制解调处理器以及基带处理器等实现。
天线1和天线2用于发射和接收电磁波信号。电子设备100中的每个天线可用于覆盖单个或多个通信频带。不同的天线还可以复用,以提高天线的利用率。例如:可以将天线1复用为无线局域网的分集天线。
移动通信模块150可以提供应用在电子设备100上的包括2G/3G/4G/5G等无线通信的解决方案。移动通信模块150可以包括至少一个滤波器,开关,功率放大器,低噪声放大器(low noise amplifier,LNA)等。移动通信模块150可以由天线1接收电磁波,并对接收的电磁波进行滤波,放大等处理,传送至调制解调处理器进行解调。移动通信模块150还可以对经调制解调处理器调制后的信号放大,经天线1转为电磁波辐射出去。
调制解调处理器可以包括调制器和解调器。其中,调制器用于将待发送的低频基带信号调制成中高频信号。解调器用于将接收的电磁波信号解调为低频基带信号。随后解调器将解调得到的低频基带信号传送至基带处理器处理。低频基带信号经基带处理器处理后,被传递给应用处理器。应用处理器通过音频设备(不限于扬声器170A,受话器170B等)输出声音信号,或通过显示屏194显示图像或视频。
无线通信模块160可以提供应用在电子设备100上的包括无线局域网(wirelesslocal area networks,WLAN)(如无线保真(wireless fidelity,Wi-Fi)网络),蓝牙(bluetooth,BT),全球导航卫星系统(global navigation satellite system,GNSS),调频(frequency modulation,FM),近距离无线通信技术(near field communication,NFC),红外技术(infrared,IR)等无线通信的解决方案。无线通信模块160可以是集成至少一个通信处理模块的一个或多个器件。无线通信模块160经由天线2接收电磁波,将电磁波信号调频以及滤波处理,将处理后的信号发送到处理器110。无线通信模块160还可以从处理器110接收待发送的信号,对其进行调频,放大,经天线2转为电磁波辐射出去。
在一些实施例中,电子设备100的天线1和移动通信模块150耦合,天线2和无线通信模块160耦合,使得电子设备100可以通过无线通信技术与网络以及其他设备通信。所述无线通信技术可以包括全球移动通讯系统(global system for mobile communications,GSM),通用分组无线服务(general packet radio service,GPRS),码分多址接入(codedivision multiple access,CDMA),宽带码分多址(wideband code division multipleaccess,WCDMA),时分码分多址(time-division code division multiple access,TD-SCDMA),长期演进(long term evolution,LTE),BT,GNSS,WLAN,NFC,FM,和/或IR技术等。所述GNSS可以包括全球卫星定位系统(global positioning system,GPS),全球导航卫星系统(global navigation satellite system,GLONASS),北斗卫星导航系统(beidounavigation satellite system,BDS),准天顶卫星系统(quasi-zenith satellitesystem,QZSS)和/或星基增强系统(satellite based augmentation systems,SBAS)。
电子设备100通过GPU,显示屏194,以及应用处理器等实现显示功能。GPU为图像处理的微处理器,连接显示屏194和应用处理器。GPU用于执行数学和几何计算,用于图形渲染。处理器110可包括一个或多个GPU,其执行程序指令以生成或改变显示信息。
显示屏194用于显示图像,视频等。该显示屏194包括显示面板。显示面板可以采用液晶显示屏(liquid crystal display,LCD),发光二极管(light-emitting diode,LED),有机发光二极管(organic light-emitting diode,OLED),有源矩阵有机发光二极体或主动矩阵有机发光二极体(active-matrix organic light emitting diode,AMOLED),柔性发光二极管(flex light-emitting diode,FLED),Miniled,MicroLed,Micro-oLed,量子点发光二极管(quantum dot light emitting diodes,QLED)等。
电子设备100可以通过ISP,摄像头193,视频编解码器,GPU,显示屏194以及应用处理器等实现拍摄功能。ISP用于处理摄像头193反馈的数据。摄像头193用于捕获静态图像或视频。数字信号处理器用于处理数字信号,除了可以处理数字图像信号,还可以处理其他数字信号。视频编解码器用于对数字视频压缩或解压缩。电子设备100可以支持一种或多种视频编解码器。这样,电子设备100可以播放或录制多种编码格式的视频,例如:动态图像专家组(moving picture experts group,MPEG)1,MPEG2,MPEG3,MPEG4等。
摄像头193可以包括1~N个。例如电子设备可以包括2个前置摄像头和4个后置摄像头。
NPU为神经网络(neural-network,NN)计算处理器,通过借鉴生物神经网络结构,例如借鉴人脑神经元之间传递模式,对输入信息快速处理,还可以不断的自学习。通过NPU可以实现电子设备100的智能认知等应用,例如:图像识别,人脸识别,语音识别,文本理解等。
外部存储器接口120可以用于连接外部存储卡,例如Micro SD卡,实现扩展电子设备100的存储能力。外部存储卡通过外部存储器接口120与处理器110通信,实现数据存储功能。例如将音乐,视频等文件保存在外部存储卡中。内部存储器121可以用于存储计算机可执行程序代码,所述可执行程序代码包括指令。处理器110通过运行存储在内部存储器121的指令,从而执行电子设备100的各种功能应用以及数据处理。例如,在本申请实施例中,处理器110可以通过执行存储在内部存储器121中的指令,内部存储器121可以包括存储程序区和存储数据区。其中,存储程序区可存储操作系统,至少一个功能所需的应用程序(比如声音播放功能,图像播放功能等)等。存储数据区可存储电子设备100使用过程中所创建的数据(比如音频数据,电话本等)等。此外,内部存储器121可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件,闪存器件,通用闪存存储器(universal flash storage,UFS)等。
电子设备100可以通过音频模块170,扬声器170A,受话器170B,麦克风170C,耳机接口170D,以及应用处理器等实现音频功能。例如音乐播放,录音等。
音频模块170用于将数字音频信息转换成模拟音频信号输出,也用于将模拟音频输入转换为数字音频信号。音频模块170还可以用于对音频信号编码和解码。扬声器170A,也称“喇叭”,用于将音频电信号转换为声音信号。受话器170B,也称“听筒”,用于将音频电信号转换成声音信号。麦克风170C,也称“话筒”,“传声器”,用于将声音信号转换为电信号。耳机接口170D用于连接有线耳机。
按键190包括开机键,音量键等。按键190可以是机械按键。也可以是触摸式按键。电子设备100可以接收按键输入,产生与电子设备100的用户设置以及功能控制有关的键信号输入。马达191可以产生振动提示。马达191可以用于来电振动提示,也可以用于触摸振动反馈。指示器192可以是指示灯,可以用于指示充电状态,电量变化,也可以用于指示消息,未接来电,通知等。SIM卡接口195用于连接SIM卡。SIM卡可以通过插入SIM卡接口195,或从SIM卡接口195拔出,实现和电子设备100的接触和分离。电子设备100可以支持1个或N个SIM卡接口,N为大于1的正整数。SIM卡接口195可以支持Nano SIM卡,Micro SIM卡,SIM卡等。
以下实施例中的方法均可以在具有上述硬件结构的电子设备100中实现。
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行描述。其中,在本申请的描述中,除非另有说明,“/”表示前后关联的对象是一种“或”的关系,例如,A/B可以表示A或B;本申请中的“和/或”仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况,其中A,B可以是单数或者复数。并且,在本申请的描述中,除非另有说明,“多个”是指两个或多于两个。“以下至少一项(个)”或其类似表达,是指的这些项中的任意组合,包括单项(个)或复数项(个)的任意组合。例如,a,b,或c中的至少一项(个),可以表示:a,b,c,a-b,a-c,b-c,或a-b-c,其中a,b,c可以是单个,也可以是多个。另外,为了便于清楚描述本申请实施例的技术方案,在本申请的实施例中,采用了“第一”、“第二”等字样对功能和作用基本相同的相同项或相似项进行区分。本领域技术人员可以理解“第一”、“第二”等字样并不对数量和执行次序进行限定,并且“第一”、“第二”等字样也并不限定一定不同。同时,在本申请实施例中,“示例性的”或者“例如”等词用于表示作例子、例证或说明。本申请实施例中被描述为“示例性的”或者“例如”的任何实施例或设计方案不应被解释为比其它实施例或设计方案更优选或更具优势。确切而言,使用“示例性的”或者“例如”等词旨在以具体方式呈现相关概念,便于理解。
为了便于理解,以下结合附图对本申请实施例提供的变量读取、写入方法进行具体介绍。
首先,对本申请实施例提供的变量读取、写入方法所涉及到的UEFI变量的类型进行说明。
本申请实施例中,可以将UEFI变量(也可以称为环境变量)分为两种类型,包括第一类型的变量(下文称为通用变量)和第二类型的变量(下文称为私有变量)。通用变量的结构是目前已公开的。私有变量的结构是本申请实施例首次提出的。
如图4中的(a)所示,通用变量可以包括全局唯一标识符(globally uniqueidentifier,GUID)、变量名和净载荷(payload)三个部分。当需要访问通用变量(例如,通用变量可以是风扇转速)时,可以根据GUID和变量名对通用变量的净载荷区域进行读写。其中,通用变量的净载荷区域是可变的长度。
如图4中的(b)所示,基于通用变量的结构,在通用变量的净载荷区域新增头部(header)可以构成私有变量。其中,header包括标记位(signature)、尺寸位(size)、盐值位(salt)和校验位(checksum)等部分。
其中,signature用于指示变量的类型为私有变量,即包含signature的变量为私有变量,不包含signature的变量不为私有变量(即为通用变量)。signature是固定长度且不可变更的。size用于指示私有变量的净载荷的字节数,是固定长度且不可变更的。checksum用于储存校验Data的校验位。salt用于保证checksum校验的复杂度。salt可以是根据时钟信息、电子设备的媒体访问控制(Media Access Control,MAC)地址、应用程序的包名生成的随机数,固定长度且不可变更。header中的signature、size、salt等区域的数据可以采用哈希算法(例如,MD5算法)生成,长度固定但取值随着净载荷区域的更改而变更。
下面,对本申请实施例提供的变量读取、写入方法所涉及到的读取/写入变量调用堆栈(call stack)进行说明。其中,读取变量调用堆栈用于指示读取变量的过程中被调用的函数(接口)以及各个函数的调用关系。写入变量调用堆栈用于指示写入变量的过程中被调用的函数(接口)以及各个函数的调用关系。
如图5中的(a)所示,读取变量调用堆栈可以包括应用层中的应用态过滤Library,系统层中的GetFirmwareEnvironmentVariable(第一函数接口)和HalEfiGetEnvironmentVariable(第二函数接口),以及BIOS层中的gRT->GetVariable(第三函数接口)、BIOS过滤Library和RuntimeServiceGetVariable(第四函数接口)等。
其中,应用态过滤Library可以提供读取UEFI变量的接口,上层应用(即应用层的应用程序,例如,电脑管家应用)可以直接调用应用态过滤Library提供的接口读取UEFI变量,无需专门设计用于读取和写入UEFI变量的接口。GetFirmwareEnvironmentVariable是系统层中的操作系统(例如,Windows)向应用层提供的读取UEFI变量的接口。HalEfiGetEnvironmentVariable是操作系统(例如,Windows)提供的用于从BIOS层获取环境变量值的接口。BIOS层的gRT->GetVariable接口是BIOS层向操作系统提供的用于读取UEFI变量的接口。RuntimeServiceGetVariable是BIOS层中的运行时服务提供的用于从内存中读取UEFI变量的接口。
示例性的,在读取变量(通用变量或私有变量)的过程中,应用层中的上层应用可以调用应用层中的应用态过滤Library获取变量的数据。应用态过滤Library可以调用GetFirmwareEnvironmentVariable获取变量的数据。GetFirmwareEnvironmentVariable可以调用HalEfiGetEnvironmentVariable获取变量的数据。HalEfiGetEnvironmentVariable可以调用BIOS层的gRT->GetVariable获取变量的数据。gRT->GetVariable可以调用BIOS过滤Library获取变量的数据。BIOS过滤Library可以调用RuntimeServiceGetVariable获取变量的数据(在读取UEFI变量时,BIOS过滤Library用于透传UEFI变量的变量名和GUID,不做其他操作)。RuntimeServiceGetVariable用于从内存获取变量的数据。即上层应用在读取变量的时候,需要多个接口相互调用配合才可以获取变量的数据。可以理解的是,只有RuntimeServiceGetVariable可以直接获取到变量的数据。RuntimeServiceGetVariable获取到变量的数据后,可以将变量的数据返回给gRT->GetVariable。gRT->GetVariable可以将变量的数据返回给HalEfiGetEnvironmentVariable。HalEfiGetEnvironmentVariable可以将变量的数据返回给GetFirmwareEnvironmentVariable。GetFirmwareEnvironmentVariable可以将变量的数据返回给应用态过滤Library。应用态过滤Library可以对上层应用读取的变量的类型进行判断。若变量的类型为私有变量(即变量的数据中包括signature),应用态过滤Library还可以对上层应用进行鉴权,即判断上层应用是否对应预设的数字签名。若上层应用对应预设的数字签名,应用态过滤Library可以删除header得到净载荷,将净载荷返回给上层应用,若上层应用不对应预设的数字签名,认为该上层应用可能为恶意程序,应用态过滤Library可以拒绝将变量的净载荷返回给上层应用,避免变量的数据被盗取或篡改。或者,应用态过滤Library可以将净载荷和header一并返回给上层应用,由于恶意程序不清楚校验规则,可以抵御恶意程序对私有变量的篡改。若变量的类型为通用变量(即变量的数据中不包括signature),应用态过滤Library可以直接将变量的数据返回给上层应用。
如图5中的(b)所示,写入变量调用堆栈可以包括应用层中的应用态过滤Library,系统层中的SetFirmwareEnvironmentVariable(第五函数接口)和HalEfiSetEnvironmentVariable(第六函数接口),以及BIOS层中的gRT->SetVariable(第七函数接口)、BIOS过滤Library和RuntimeServiceSetVariable(第八函数接口)等。
其中,应用态过滤Library可以提供写入UEFI变量的接口,上层应用(即应用层的应用程序,例如,电脑管家应用)可以直接调用应用态过滤Library提供的接口写入UEFI变量,无需专门设计用于读取和写入UEFI变量的接口。SetFirmwareEnvironmentVariable是操作系统(例如,Windows)向应用层提供的写入UEFI变量的接口。HalEfiSetEnvironmentVariable是操作系统(例如,Windows)提供的用于向BIOS层写入环境变量值的接口。RuntimeServiceSetVariable是BIOS层中的运行时服务提供的向内存写入变量值的接口。
示例性的,在写入变量(通用变量或私有变量)的过程中,应用层中的上层应用(即应用层的应用程序,例如,电脑管家应用)可以调用应用态过滤Library写入变量。应用态过滤Library可以根据变量的GUID和变量名先读取变量底层存储的变量的数据,并判断变量的数据中是否有signature(即判断待写入变量是否为私有变量),如果有signature,判断其为私有变量,则更新私有变量的header。然后,应用态过滤Library可以调用系统层中的SetFirmwareEnvironmentVariable接口写入更新后的私有变量的数据。然后,SetFirmwareEnvironmentVariable可以调用HalEfiSetEnvironmentVariable写入更新后的私有变量的数据。HalEfiSetEnvironmentVariable可以调用BIOS层的gRT->SetVariable接口写入更新后的私有变量的数据。gRT->SetVariable接口可以调用BIOS过滤Library写入更新后的私有变量的数据。BIOS过滤Library可以判断待写入的数据(即更新后的私有变量的数据)是否存在signature。如果存在,则检查header区域的checksum。如果校验成功,则BIOS过滤Library调用RuntimeServiceSetVariable,将变量写入EDK2的变量区域。即将更新后的私有变量的数据写入EPROM(可擦写可编程只读存储器)或EEPROM(电可擦可编程只读存储器)中的程序。
举例来说,下面对通过读取/写入变量调用堆栈读写变量1的过程进行说明。
如图6a所示,以变量1为私有变量为例对变量1的结构进行说明。变量1的GUID例如可以为:{360D31DE-18F7-49EA-AF52-4B50ADBCA7E8}。变量1的变量名例如可以为:L“TestVariable”。变量1的净载荷例如可以为:char Data[4]={0x01,0x02,0x03,0x04}。变量1的hea der包括signature、size、salt和checksum。变量1的header可以是第一次在BIOS中存储时通过BIOS程序生成的。
变量1的header中的signature,可以占用4个字节,采用ASCII字符。例如signature可以为“$PV$”,其对应的十六进制数据为0x24,0x50,0x56,0x24。通过signature可以判定变量是否为私有变量。携带signature的变量是私有变量,不携带signature的变量是通用变量。head er中的size,可以占用4个字节。若需要储存的数据长度为4,则size部分可填入0x04,0x00,0x00,0x00。header中的salt,占用4个字节,使用随机数生成,确保每个UEFI变量对应的sa lt都不一样。本示例中,salt可以为0x0A,0x0B,0x0C,0x0D。header中的checksum,可以根据消息摘要算法第五版(message digest algorithm 5,MD5)对signature、size和salt进行计算。示例性的,根据MD5算法对signature、size和salt进行计算的代码可以如图6b所示。即对0x24,0x50,0x56,0x24,0x04,0x00,0x00,0x00,0x0A,0x0B,0x0C,0x0D,0x01,0x02,0x03,0x04进行MD5计算,可以得到checksum为b92e3dceaf545378445bf7f73cae9b0b。
如图7所示,第一次写入变量1的过程可以包括步骤701-步骤714。
701、上层应用(第一应用程序)通过应用态过滤Library写入变量1的净载荷(例如,净载荷1)。
上层应用可以向应用态过滤Library发生写入请求,写入请求用于请求写入净载荷1,写入请求可以包括变量1的GUID、变量名和净载荷1。可选的,写入请求还可以包括净载荷1的大小(size)。
702、应用态过滤Library调用SetFirmwareEnvironmentVariable写入变量1的净载荷,并向SetFirmwareEnvironmentVariable发送变量1的GUID、变量名和净载荷。
同时,应用态过滤Library可以向SetFirmwareEnvironmentVariable注册一个回调,该回调用于指示SetFirmwareEnvironmentVariable向应用态过滤Library返回净载荷1是否写入成功的结果。
703、SetFirmwareEnvironmentVariable调用HalEfiSetEnvironmentVariable写入变量1的净载荷,并向HalEfiSetEnvironmentVariable发送变量1的GUID、变量名和净载荷1。
同时,SetFirmwareEnvironmentVariable可以向HalEfiSetEnvironmentVariable注册一个回调,该回调用于指示HalEfiSetEnvironmentVariable向SetFirmwareEnvironmentVariable返回净载荷1是否写入成功的结果。
704、HalEfiSetEnvironmentVariable调用gRT->SetVariable写入变量1的净载荷,并向HalEfiSetEnvironmentVariable发送变量1的GUID、变量名和净载荷1。
同时,HalEfiSetEnvironmentVariable可以向gRT->SetVariable注册一个回调,该回调用于指示gRT->SetVariable向HalEfiSetEnvironmentVariable返回净载荷1是否写入成功的结果。
705、gRT->SetVariable调用BIOS过滤Library写入变量1的净载荷,并向BIOS过滤Library发送变量1的GUID、变量名和净载荷1。
同时,gRT->SetVariable可以向BIOS过滤Library注册一个回调,该回调用于指示BIOS过滤Library向gRT->SetVariable返回净载荷1是否写入成功的结果。
706、BIOS过滤Library生成变量1的头部。
如图6a所示,变量1的头部(header1)可以包括标志位(signature1)、尺寸位(size1)、盐值位(salt1)和校验位(checksum1)等字段。
707、BIOS过滤Library调用RuntimeServiceSetVariable写入变量1的净载荷,并向RuntimeServiceSetVariable发送变量1的GUID、变量名和净载荷1。
同时,BIOS过滤Library可以向RuntimeServiceSetVariable注册一个回调,该回调用于指示RuntimeServiceSetVariable向BIOS过滤Library返回净载荷1是否写入成功的结果。
708、RuntimeServiceSetVariable根据变量1的GUID、变量名确定变量1对应的内存单元,在该内存单元写入净载荷1。
另外,变量1也可以是在电子设备出厂设置中通过BIOS过滤库写入内存中的。
709、RuntimeServiceSetVariable向BIOS过滤Library发送净载荷1是否写入成功的结果。
RuntimeServiceSetVariable可以基于BIOS过滤Library注册的回调向BIOS过滤Library返回净载荷1是否写入成功的结果。
710、BIOS过滤Library向gRT->SetVariable发送净载荷1是否写入成功的结果。
BIOS过滤Library可以基于gRT->SetVariable注册的回调向gRT->SetVariable返回净载荷1是否写入成功的结果。
711、gRT->SetVariable向HalEfiSetEnvironmentVariable发送净载荷1是否写入成功的结果。
gRT->SetVariable可以基于HalEfiSetEnvironmentVariable注册的回调向HalEfiSetEnvironmentVariable返回净载荷1是否写入成功的结果。
712、HalEfiSetEnvironmentVariable向SetFirmwareEnvironmentVariable发送净载荷1是否写入成功的结果。
HalEfiSetEnvironmentVariable可以基于SetFirmwareEnvironmentVariable注册的回调向SetFirmwareEnvironmentVariable返回净载荷1是否写入成功的结果。
713、SetFirmwareEnvironmentVariable向应用态过滤Library发送净载荷1是否写入成功的结果。
SetFirmwareEnvironmentVariable可以基于应用态过滤Library注册的回调向应用态过滤Library返回净载荷1是否写入成功的结果。
714、应用态过滤Library向上层应用发送净载荷1是否写入成功的结果。
应用态过滤Library可以基于上层应用注册的回调向上层应用返回净载荷1是否写入成功的结果,从而上层应用可以得知变量1的净载荷是否写入成功。
如图8所示,读取变量1的过程可以包括步骤801-步骤815。
801、上层应用(第一应用程序)调用应用态过滤Library读取变量1的数据,并向应用态过滤Library发送变量1的GUID和变量名。
检测到用户在上层应用触发的查询变量1的操作,上层应用调用应用态过滤Library读取该变量1的数据。
示例性的,假设变量1为CPU功控表数据,如图9所示,响应于用户在电脑管家应用的硬件检测界面901点击CPU信息902的操作,电脑管家应用可以调用应用态过滤Library读取该变量1的数据。
应用态过滤Library可以提供读取和写入UEFI变量的接口,上层应用可以直接调用应用态过滤Library提供的接口,无需专门设计用于读取和写入UEFI变量的接口。这样,可以减少上层应用读写私有变量的难度,同时兼容更多产品,降低开发难度。该应用态过滤Library受设备厂商(例如,荣耀)独立管控且不对外提供。
同时,上层应用可以向应用态过滤Library注册一个回调,该回调用于指示应用态过滤Library读取到变量1的数据后向上层应用返回变量1的数据。
802、应用态过滤Library调用GetFirmwareEnvironmentVariable读取变量1的数据,并向GetFirmwareEnvironmentVariable发送变量1的GUID和变量名。
同时,应用态过滤Library可以向GetFirmwareEnvironmentVariable注册一个回调,该回调用于指示GetFirmwareEnvironmentVariable读取到变量1的数据后向应用态过滤Library返回变量1的数据。
803、GetFirmwareEnvironmentVariable调用HalEfiGetEnvironmentVariable读取变量1的数据,并向HalEfiGetEnvironmentVariable发送变量1的GUID和变量名。
同时,GetFirmwareEnvironmentVariable可以向HalEfiGetEnvironmentVariable注册一个回调,该回调用于指示HalEfiGetEnvironmentVariable读取到变量1的数据后向GetFirmwareEnvironmentVariable返回变量1的数据。
804、HalEfiGetEnvironmentVariable调用gRT->GetVariable读取变量1的数据,并向gRT->GetVariable发送变量1的GUID和变量名。
同时,HalEfiGetEnvironmentVariable可以向gRT->GetVariable注册一个回调,该回调用于指示gRT->GetVariable读取到变量1的数据后向HalEfiGetEnvironmentVariable返回变量1的数据。
805、gRT->GetVariable调用BIOS过滤Library读取变量1的数据,并向BIOS过滤Library发送变量1的GUID和变量名。
BIOS层过滤Library读取变量的数据的流程是直接透传,不做任何操作。
同时,gRT->GetVariable可以向BIOS过滤Library注册一个回调,该回调用于指示BIOS过滤Library读取到变量1的数据后向gRT->GetVariable返回变量1的数据。
806、BIOS过滤Library调用RuntimeServiceGetVariable读取变量1的数据,并向RuntimeServiceGetVariable发送变量1的GUID和变量名。
同时,BIOS过滤Library可以向RuntimeServiceGetVariable注册一个回调,该回调用于指示RuntimeServiceGetVariable读取到变量1的数据后向BIOS过滤Library返回变量1的数据。
807、RuntimeServiceGetVariable根据变量1的GUID和变量名读取变量1的数据。
RuntimeServiceGetVariable根据变量1的GUID和变量名从存储区域读取变量1的数据,如图6a所示,变量1的数据包括净载荷和头部,头部包括标志位等字段。
808、RuntimeServiceGetVariable向BIOS过滤Library发送变量1的数据。
RuntimeServiceGetVariable可以基于BIOS过滤Library注册的回调向BIOS过滤Library返回变量1的数据。
809、BIOS过滤Library向gRT->GetVariable发送变量1的数据。
BIOS过滤Library可以基于gRT->GetVariable注册的回调向gRT->GetVariable返回变量1的数据。
810、gRT->GetVariable向HalEfiGetEnvironmentVariable发送变量1的数据。
gRT->GetVariable可以基于HalEfiGetEnvironmentVariable注册的回调向HalEfiGetEnvironmentVariable返回变量1的数据。
811、HalEfiGetEnvironmentVariable向GetFirmwareEnvironmentVariable发送变量1的数据。
HalEfiGetEnvironmentVariable可以基于GetFirmwareEnvironmentVariable注册的回调向GetFirmwareEnvironmentVariable返回变量1的数据。
812、GetFirmwareEnvironmentVariable向应用态过滤Library发送变量1的数据。
GetFirmwareEnvironmentVariable可以基于应用态过滤Library注册的回调向应用态过滤Library返回变量1的数据。
813、应用态过滤Library判断变量1的数据存在signature。
814、应用态过滤Library删除变量1的标志位。
由于变量1的数据存在signature,应用态过滤Library可以将变量的数据中的header(包括signature)移除,保留净载荷,并将净载荷向上层应用上报。即可以执行步骤814和步骤815。
在一种可能的设计中,应用态过滤Library还可以对上层应用进行鉴权。应用态过滤库从上层应用接收数字签名,数字签名是第一应用程序根据公钥加密的;应用态过滤库根据私钥对数字签名进行验证;若验证通过,应用态过滤Library可以将变量的数据中的header移除,保留净载荷,并将净载荷向上层应用上报。若验证未通过,认为上层应用是恶意程序,应用态过滤Library可以拒绝将净载荷返回给上层应用,避免变量的数据被盗取或篡改。或者,应用态过滤Library可以将净载荷和header一并返回给上层应用,由于恶意程序不清楚校验规则,可以抵御恶意程序对私有变量的篡改。
另外,若上层应用是从预设的应用商店(例如,荣耀应用商店)下载的,可以认为上层应用是安全的,可以直接将变量的数据中的header移除,保留净载荷,并将净载荷向上层应用上报。
815、应用态过滤Library向上层应用发送变量1的净载荷。
即应用态过滤Library向上层应用发送变量1的净载荷。以便上层应用根据变量1的净载荷进行相应处理。
如图10所示,更新变量1的过程可以包括步骤1001-步骤1026。
1001、上层应用通过应用态过滤Library写入(更新)变量1的数据。
上层应用可以向应用态过滤Library发生写入请求,写入请求用于请求写入变量1的数据,写入请求可以包括变量1的GUID、变量名和待写入的净载荷2(第一净载荷)。可选的,写入请求还可以包括净载荷2的大小(size)。
1002、应用态过滤Library调用GetFirmwareEnvironmentVariable读取变量1的数据(即变量1在先存储在内存的数据(包括净载荷1和头部1)),并向GetFirmwareEnvironmentVariable发送变量1的GUID和变量名。
同时,应用态过滤Library可以向GetFirmwareEnvironmentVariable注册一个回调,该回调用于指示GetFirmwareEnvironmentVariable读取到变量1的数据后向应用态过滤Library返回变量1的数据。
1003、GetFirmwareEnvironmentVariable调用HalEfiGetEnvironmentVariable读取变量1的数据,并向HalEfiGetEnvironmentVariable发送变量1的GUID和变量名。
同时,GetFirmwareEnvironmentVariable可以向HalEfiGetEnvironmentVariable注册一个回调,该回调用于指示HalEfiGetEnvironmentVariable读取到变量1的数据后向GetFirmwareEnvironmentVariable返回变量1的数据。
1004、HalEfiGetEnvironmentVariable调用gRT->GetVariable读取变量1的数据,并向HalEfiGetEnvironmentVariable发送变量1的GUID和变量名。
同时,HalEfiGetEnvironmentVariable可以向gRT->GetVariable注册一个回调,该回调用于指示gRT->GetVariable读取到变量1的数据后向HalEfiGetEnvironmentVariable返回变量1的数据。
1005、gRT->GetVariable调用BIOS过滤Library读取变量1的数据,并向BIOS过滤Library发送变量1的GUID和变量名。
同时,gRT->GetVariable可以向BIOS过滤Library注册一个回调,该回调用于指示BIOS过滤Library读取到变量1的数据后向gRT->GetVariable返回变量1的数据。
1006、BIOS过滤Library调用RuntimeServiceGetVariable读取变量1的数据,并向RuntimeServiceGetVariable发送变量1的GUID和变量名。
同时,BIOS过滤Library可以向RuntimeServiceGetVariable注册一个回调,该回调用于指示RuntimeServiceGetVariable读取到变量1的数据后向BIOS过滤Library返回变量1的数据。
1007、RuntimeServiceGetVariable根据变量1的GUID和变量名读取变量1的数据。
RuntimeServiceGetVariable读取到的变量1的数据可以包括头部1和净载荷1。
1008、RuntimeServiceGetVariable向BIOS过滤Library发送变量1的数据。
RuntimeServiceGetVariable可以基于BIOS过滤Library注册的回调向BIOS过滤Library返回变量1的数据。
1009、BIOS过滤Library向gRT->GetVariable发送变量1的数据。
BIOS过滤Library可以基于gRT->GetVariable注册的回调向gRT->GetVariable返回变量1的数据。
1010、gRT->GetVariable向HalEfiGetEnvironmentVariable发送变量1的数据。
gRT->GetVariable可以基于HalEfiGetEnvironmentVariable注册的回调向HalEfiGetEnvironmentVariable返回变量1的数据。
1011、HalEfiGetEnvironmentVariable向GetFirmwareEnvironmentVariable发送变量1的数据。
HalEfiGetEnvironmentVariable可以基于GetFirmwareEnvironmentVariable注册的回调向GetFirmwareEnvironmentVariable返回变量1的数据。
1012、GetFirmwareEnvironmentVariable向应用态过滤Library发送变量1的数据。
GetFirmwareEnvironmentVariable可以基于应用态过滤Library注册的回调向应用态过滤Library返回变量1的数据。
1013、应用态过滤Library确定变量1的数据存在signature,修改变量1的数据。
应用态过滤Library接收到的变量1的数据中包括头部1和净载荷1。其中,头部1包括signature(signature1)。
由于变量1的数据存在signature,可以认为变量1为私有变量,应用态过滤Library可以重新生成header(header2),header2包括signature2、size2、salt2和checksum2。其中,signature2和salt2是从变量1的数据中的header中继承的,也即signature2和salt2可以分别和signature1和salt1相同。size2是根据净载荷2的字节数确定的。Checksum2是根据哈希算法(例如,MD5算法)对signature2、size2和salt2进行计算得到的。
1014、应用态过滤Library调用SetFirmwareEnvironmentVariable写入变量1的修改后的数据(header2和净载荷2),并向SetFirmwareEnvironmentVariable发送变量1的GUID、变量名和修改后的数据。
同时,应用态过滤Library可以向SetFirmwareEnvironmentVariable注册一个回调,该回调用于指示SetFirmwareEnvironmentVariable向应用态过滤Library返回变量1的修改后的数据是否写入成功的结果。
1015、SetFirmwareEnvironmentVariable调用HalEfiSetEnvironmentVariable写入变量1的修改后的数据,并向HalEfiSetEnvironmentVariable发送变量1的GUID、变量名和修改后的数据。
同时,SetFirmwareEnvironmentVariable可以向HalEfiSetEnvironmentVariable注册一个回调,该回调用于指示HalEfiSetEnvironmentVariable向SetFirmwareEnvironmentVariable返回变量1的修改后的数据是否写入成功的结果。
1016、HalEfiSetEnvironmentVariable调用gRT->SetVariable写入变量1的修改后的数据,并向HalEfiSetEnvironmentVariable发送变量1的GUID、变量名和修改后的数据。
同时,HalEfiSetEnvironmentVariable可以向gRT->SetVariable注册一个回调,该回调用于指示gRT->SetVariable向HalEfiSetEnvironmentVariable返回变量1的修改后的数据是否写入成功的结果。
1017、gRT->SetVariable调用BIOS过滤Library写入变量1的修改后的数据,并向BIOS过滤Library发送变量1的GUID、变量名和修改后的数据。
同时,gRT->SetVariable可以向BIOS过滤Library注册一个回调,该回调用于指示BIOS过滤Library向gRT->SetVariable返回变量1的修改后的数据是否写入成功的结果。
1018、BIOS过滤Library判断变量1的修改后的数据是否包括signature字段,若包括,验证变量1的checksum。
由于变量1的修改后的数据包括signature(signature2)字段,即变量1为私有变量,BIOS过滤Library可以校验变量1的header2中的checksum2字段。若校验checksum2成功,可以执行步骤1019。若校验checksum2不成功,BIOS过滤Library可以向gRT->SetVariable返回变量1的修改后的数据写入失败的结果。由于恶意程序不清楚校验规则,可以抵御恶意程序对私有变量的篡改。
1019、BIOS过滤Library调用RuntimeServiceSetVariable写入变量1的修改后的数据,并向RuntimeServiceSetVariable发送变量1的GUID、变量名和修改后的数据。
同时,BIOS过滤Library可以向RuntimeServiceSetVariable注册一个回调,该回调用于指示RuntimeServiceSetVariable向BIOS过滤Library返回变量1的修改后的数据是否写入成功的结果。
1020、RuntimeServiceSetVariable根据变量1的GUID、变量名确定内存单元,向内存单元写入修改后的数据。
1021、RuntimeServiceSetVariable向BIOS过滤Library发送变量1的修改后的数据是否写入成功的结果。
RuntimeServiceSetVariable可以基于BIOS过滤Library注册的回调向BIOS过滤Library返回变量1的修改后的数据是否写入成功的结果。
1022、BIOS过滤Library向gRT->SetVariable发送变量1的修改后的数据是否写入成功的结果。
BIOS过滤Library可以基于gRT->SetVariable注册的回调向gRT->SetVariable返回变量1的修改后的数据是否写入成功的结果。
1023、gRT->SetVariable向HalEfiSetEnvironmentVariable发送变量1的修改后的数据是否写入成功的结果。
gRT->SetVariable可以基于HalEfiSetEnvironmentVariable注册的回调向HalEfiSetEnvironmentVariable返回变量1的修改后的数据是否写入成功的结果。
1024、HalEfiSetEnvironmentVariable向SetFirmwareEnvironmentVariable发送变量1的修改后的数据是否写入成功的结果。
HalEfiSetEnvironmentVariable可以基于SetFirmwareEnvironmentVariable注册的回调向SetFirmwareEnvironmentVariable返回变量1的修改后的数据是否写入成功的结果。
1025、SetFirmwareEnvironmentVariable向应用态过滤Library发送变量1的修改后的数据是否写入成功的结果。
SetFirmwareEnvironmentVariable可以基于应用态过滤Library注册的回调向应用态过滤Library返回变量1的修改后的数据是否写入成功的结果。
1026、应用态过滤Library向上层应用发送变量1的修改后的数据是否写入成功的结果。
应用态过滤Library可以基于上层应用注册的回调向上层应用返回变量1的修改后的数据是否写入成功的结果,从而上层应用可以得知数据是否写入成功。
本申请实施例提供的变量读取、写入方法既可以防止黑客或者病毒软件篡改重要变量(私有变量)。还可以做到及时发现物理攻击(硬件攻击,例如由于硬件导致的强制位翻转)导致重要变量被篡改的情况,从而可以及时对被篡改的重要变量进行修复。
例如,在一种可能的场景中,若用户在电子设备(例如,笔记本电脑)下载了一个新软件,该软件携带病毒(简称了为病毒软件),可以基于EDK2提供的UEFI变量读写机制读取系统的所有变量,并对重要变量进行恶意篡改。基于本申请实施例提供的方法,可以将重要变量设置为私有变量,上层应用读取变量时,若应用态过滤Library判断待读取的变量为私有变量(即存在signature),应用态过滤Library可以对上层应用进行验证,若验证通过,应用态过滤Library可以从变量的数据中删除header得到净载荷,将净载荷返回给上层应用,若验证不通过,认为该上层应用可能为恶意程序,应用态过滤Library可以拒绝将变量的数据返回给上层应用,避免变量的数据被盗取或篡改。或者,应用态过滤Library可以将净载荷和header一并返回给上层应用,由于恶意程序不清楚校验规则,可以抵御恶意程序对私有变量的篡改。病毒软件写入变量时,BIOS过滤Library可以校验私有变量的header区域中的checksum字段,校验checksum成功,才执行写入动作,否则返回失败。这样,可以避免病毒软件恶意篡改重要变量导致的系统崩溃,不开机等问题。
又例如,在另一种可能的场景中,若竞争对手设计了一个软件(恶意竞争软件),可以基于EDK2提供的UEFI变量读写机制读取系统的所有变量,并读取到我方有竞争力的数据(变量),从而破解我方的商业机密。基于本申请实施例提供的方法,可以将有竞争力的变量设置为私有变量,恶意竞争软件读取私有变量时,若应用态过滤Library判断该恶意竞争软件数字签名校验不通过,可以拒绝将变量的数据返回给上层应用,避免变量的数据被盗取或篡改。或者,应用态过滤Library可以将净载荷和header一并返回给上层应用,由于恶意程序不清楚校验规则,可以抵御恶意程序对私有变量的篡改。恶意竞争软件写入私有变量时,BIOS过滤Library可以校验header区域中的checksum字段,校验checksum成功,才执行写入动作,否则返回失败。这样,可以避免恶意竞争软件读取到我方有竞争力的数据(变量)导致我方的商业机密泄漏的问题。
在又一种可能的场景中,若电子设备遭到物理攻击(硬件攻击,例如由于硬件导致的强制位翻转)导致电子设备中的私有变量被篡改,BIOS过滤Library对该私有变量的checksum验证不通过,从而可以及时对被篡改的重要变量进行修复。
本申请实施例还提供一种芯片系统,如图11所示,该芯片系统包括至少一个处理器1101和至少一个接口电路1102。处理器1101和接口电路1102可通过线路互联。例如,接口电路1102可用于从其它装置(例如,电子设备的存储器)接收信号。又例如,接口电路1102可用于向其它装置(例如处理器1101)发送信号。
例如,接口电路1102可读取电子设备中存储器中存储的指令,并将该指令发送给处理器1101。当所述指令被处理器1101执行时,可使得电子设备(如图3所示的电子设备100)执行上述实施例中的各个步骤。
当然,该芯片系统还可以包含其他分立器件,本申请实施例对此不作具体限定。
本申请实施例还提供一种计算机可读存储介质,该计算机可读存储介质包括计算机指令,当所述计算机指令在电子设备(如图3所示的电子设备100)上运行时,使得电子设备100执行上述方法实施例中电子设备执行的各个功能或者步骤。
本申请实施例还提供一种计算机程序产品,当所述计算机程序产品在计算机上运行时,使得所述计算机执行上述方法实施例中电子设备执行的各个功能或者步骤。
本申请实施例还提供了一种变量读写装置,所述装置可以按照功能划分为不同的逻辑单元或模块,各单元或模块执行不同的功能,以使得所述装置执行上述方法实施例中电子设备执行的各个功能或者步骤。
通过以上实施方式的描述,所属领域的技术人员可以清楚地了解到,可以根据需要而将上述功能分配由不同的功能模块完成,即将装置的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。
在本申请所提供的几个实施例中,应该理解到,所揭露的装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述模块或单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个装置,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是一个物理单元或多个物理单元,即可以位于一个地方,或者也可以分布到多个不同地方。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个可读取存储介质中。基于这样的理解,本申请实施例的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该软件产品存储在一个存储介质中,包括若干指令用以使得一个设备(可以是单片机,芯片等)或处理器(processor)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、ROM、随机存取存储器(random access memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
以上内容,仅为本申请的具体实施方式,但本申请的保护范围并不局限于此,任何在本申请揭露的技术范围内的变化或替换,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应以所述权利要求的保护范围为准。
Claims (25)
1.一种变量读取方法,其特征在于,包括:
第一应用程序向应用态过滤库发送读取请求,所述读取请求用于请求读取第一变量的数据,所述第一请求包括所述第一变量的全局唯一标识符GUID和变量名;
响应于接收所述第一请求,所述应用态过滤库根据所述第一变量的GUID和变量名获取所述第一变量的数据,所述第一变量的数据包括标志位和所述第一变量对应的净载荷;
在所述第一应用程序经过安全校验的情况下,所述应用态过滤库删除所述标志位;
所述应用态过滤库向所述第一应用程序发送所述净载荷。
2.根据权利要求1所述的方法,其特征在于,所述在所述第一应用程序经过安全校验的情况下,所述应用态过滤库删除所述标志位包括:
所述应用态过滤库从所述第一应用程序接收数字签名,所述数字签名是所述第一应用程序根据公钥加密的;
所述应用态过滤库根据私钥对所述数字签名进行验证;
若验证通过,所述应用态过滤库删除所述标志位。
3.根据权利要求1或2所述的方法,其特征在于,所述应用态过滤库根据所述GUID和所述变量名获取所述第一变量对应的数据之后,所述方法还包括:
所述应用态过滤库确定所述第一变量对应的数据是否存在所述标志位。
4.根据权利要求1-3任一项所述的方法,其特征在于,
在所述第一应用程序未经过安全校验的情况下,所述应用态过滤库向所述第一应用程序发送所述净载荷和所述标志位。
5.根据权利要求1-4任一项所述的方法,其特征在于,
所述应用态过滤库位于应用层。
6.根据权利要求1-5任一项所述的方法,其特征在于,
所述标志位为预设字符串。
7.根据权利要求1-6任一项所述的方法,其特征在于,
所述第一变量的数据还包括尺寸位、盐值位和校验位;
其中,所述尺寸位用于指示所述第一变量的数据区域的字节数,所述校验位用于校验所述净载荷,所述盐值位用于保证所述校验位的复杂度。
8.根据权利要求7所述的方法,其特征在于,
所述标志位、所述尺寸位、所述盐值位和所述校验位是根据哈希算法生成的。
9.根据权利要求1-8任一项所述的方法,其特征在于,所述方法还包括:
若所述第一变量的数据不包括所述标志位,所述应用态过滤库直接将所述第一变量的净载荷发送给所述第一应用程序。
10.根据权利要求1-9任一项所述的方法,其特征在于,所述应用态过滤库根据所述第一变量的GUID和变量名获取所述第一变量的数据包括:
所述应用态过滤库调用第一函数接口读取所述第一变量的数据,并向所述第一函数接口发送所述第一变量的GUID和变量名,所述第一函数接口是操作系统向应用层提供的读取变量的接口;
所述第一函数接口调用第二函数接口读取所述第一变量的数据,并向所述第二函数接口发送所述第一变量的GUID和变量名,所述第二函数接口是所述操作系统提供的用于从基本输入输出系统BIOS层读取变量的接口;
所述第二函数接口调用第三函数接口读取所述第一变量的数据,并向所述第三函数接口发送所述第一变量的GUID和变量名,所述第三函数接口是所述BIOS层向所述操作系统提供的用于读取变量的接口;
所述第三函数接口调用BIOS过滤库读取所述第一变量的数据,并向所述BIOS过滤库发送所述第一变量的GUID和变量名,所述BIOS过滤库是所述BIOS层中用于验证待写入数据的接口;
所述BIOS过滤库调用第四函数接口读取所述第一变量的数据,并向所述第四函数接口发送所述第一变量的GUID和变量名,所述第四函数接口是所述BIOS层中的运行时服务提供的用于从内存中读取变量的接口;
所述第四函数接口根据所述第一变量的GUID和变量名从内存中读取所述第一变量的数据;
所述第四函数接口向所述BIOS过滤库发送所述第一变量的数据;
所述BIOS过滤库向所述第三函数接口发送所述第一变量的数据;
所述第三函数接口向所述第二函数接口发送所述第一变量的数据;
所述第二函数接口向所述第一函数接口发送所述第一变量的数据;
所述第一函数接口向所述应用态过滤库发送所述第一变量的数据。
11.一种变量写入方法,其特征在于,包括:
第一应用程序向应用态过滤库发送写入请求,所述写入请求用于请求写入第一变量的数据,所述写入请求包括所述第一变量的全局唯一标识符GUID、变量名和第一净载荷;
在所述第一应用程序是经过安全校验的情况下,所述应用态过滤库根据所述GUID和所述变量名读取所述第一变量对应的数据,所述第一变量的数据包括标志位和所述第一变量对应的第二净载荷;
所述应用态过滤库调用基本输入输出系统BIOS过滤库写入所述标志位、校验位和所述第一净载荷,所述校验位用于校验所述第一净载荷;
所述BIOS过滤库验证所述校验位;
若验证成功,所述BIOS过滤库将所述标志位、所述校验位和所述第一净载荷写入内存。
12.根据权利要求11所述的方法,其特征在于,所述在所述第一应用程序是经过安全校验的情况下,所述应用态过滤库根据所述GUID和所述变量名读取所述第一变量对应的数据包括:
所述应用态过滤库从所述第一应用程序接收数字签名,所述数字签名是所述第一应用程序根据公钥加密的;
所述应用态过滤库根据私钥对所述数字签名进行验证;
若验证通过,所述应用态过滤库根据所述GUID和所述变量名读取所述第一变量对应的数据。
13.根据权利要求11或12所述的方法,其特征在于,
所述应用态过滤库位于应用层,所述BIOS过滤库位于BIOS层。
14.根据权利要求11-13任一项所述的方法,其特征在于,所述应用态过滤库根据所述GUID和所述变量名读取所述第一变量对应的数据之后,所述方法还包括:
所述应用态过滤库确定所述第一变量对应的数据是否存在所述标志位。
15.根据权利要求11-14任一项所述的方法,其特征在于,
所述标志位为预设字符串。
16.根据权利要求11-15任一项所述的方法,其特征在于,所述应用态过滤库调用基本输入输出系统BIOS过滤库写入所述标志位和所述第一净载荷包括:
所述应用态过滤库调用所述BIOS过滤库写入所述标志位、所述校验位、尺寸位、盐值位和所述第一净载荷;其中,所述尺寸位用于指示所述第一数据的字节数,所述盐值位用于保证所述校验位的复杂度。
17.根据权利要求16所述的方法,其特征在于,
所述标志位、所述尺寸位、所述盐值位和所述校验位是根据散列算法生成的。
18.根据权利要求16或17所述的方法,其特征在于,所述BIOS过滤库验证所述校验位包括:
所述BIOS过滤库根据所述标志位、所述尺寸位和所述盐值位验证所述校验位。
19.根据权利要求11-18任一项所述的方法,其特征在于,所述应用态过滤库根据所述第一变量的GUID和变量名获取所述第一变量的数据包括:
所述应用态过滤库调用第一函数接口读取所述第一变量的数据,并向所述第一函数接口发送所述第一变量的GUID和变量名,所述第一函数接口是操作系统向应用层提供的读取变量的接口;
所述第一函数接口调用第二函数接口读取所述第一变量的数据,并向所述第二函数接口发送所述第一变量的GUID和变量名,所述第二函数接口是所述操作系统提供的用于从基本输入输出系统BIOS层读取变量的接口;
所述第二函数接口调用第三函数接口读取所述第一变量的数据,并向所述第三函数接口发送所述第一变量的GUID和变量名,所述第三函数接口是所述BIOS层向所述操作系统提供的用于读取UEFI变量的接口;
所述第三函数接口调用BIOS过滤库读取所述第一变量的数据,并向所述BIOS过滤库发送所述第一变量的GUID和变量名,所述BIOS过滤库是所述BIOS层中用于验证待写入数据的接口;
所述BIOS过滤库调用第四函数接口读取所述第一变量的数据,并向所述第四函数接口发送所述第一变量的GUID和变量名,所述第四函数接口是所述BIOS层中的运行时服务提供的用于从内存中读取变量的接口;
所述第四函数接口根据所述第一变量的GUID和变量名从内存中读取所述第一变量的数据;
所述第四函数接口向所述BIOS过滤库发送所述第一变量的数据;
所述BIOS过滤库向所述第三函数接口发送所述第一变量的数据;
所述第三函数接口向所述第二函数接口发送所述第一变量的数据;
所述第二函数接口向所述第一函数接口发送所述第一变量的数据;
所述第一函数接口向所述应用态过滤库发送所述第一变量的数据。
20.根据权利要求11-19任一项所述的方法,其特征在于,所述应用态过滤库调用BIOS过滤库写入所述标志位、校验位和所述第一净载荷包括:
所述应用态过滤库调用第五函数接口写入所述标志位、校验位和所述第一净载荷,并向所述第五函数接口发送所述第一变量的GUID、变量名、所述标志位、校验位和所述第一净载荷,所述第五函数接口是操作系统向应用层提供的写入变量的接口;
所述第五函数接口调用第六函数接口写入所述标志位、校验位和所述第一净载荷,并向所述第六函数接口发送所述第一变量的GUID、变量名和所述第三数据,所述第六函数接口是所述操作系统提供的用于向基本输入输出系统BIOS层写入变量的接口;
所述第六函数接口调用第七函数接口写入所述标志位、校验位和所述第一净载荷,并向所述第七函数接口发送所述第一变量的GUID、变量名和所述第三数据,所述第七函数接口是所述BIOS层向所述操作系统提供的用于写入变量的接口;
所述第七函数接口调用所述BIOS过滤库写入所述标志位、校验位和所述第一净载荷,并向BIOS过滤库发送所述第一变量的GUID、变量名和所述标志位、校验位和所述第一净载荷。
21.根据权利要求20所述的方法,其特征在于,所述BIOS过滤库写入所述标志位、校验位和所述第一净载荷包括:
所述BIOS过滤库调用第八函数接口写入所述标志位、校验位和所述第一净载荷,并向第八函数接口发送所述第一变量的GUID、变量名和所述标志位、校验位和所述第一净载荷,所述第八函数接口是所述BIOS层中的运行时服务提供的用于向内存中写入变量的接口;
所述第八函数接口根据所述第一变量的GUID和变量名将所述标志位、校验位和所述第一净载荷写入内存。
22.根据权利要求21所述的方法,其特征在于,所述方法还包括:
所述第八函数接口向BIOS过滤库发送所述第一净载荷是否写入成功的结果;
所述BIOS过滤库向第七函数接口发送所述第一净载荷是否写入成功的结果;
所述第七函数接口向所述第六函数接口发送所述第一净载荷是否写入成功的结果;
所述第六函数接口向所述第五函数接口发送所述第一净载荷是否写入成功的结果;
所述第五函数接口向应用态过滤库发送所述第一净载荷是否写入成功的结果;
所述应用态过滤库向第一应用程序发送所述第一净载荷是否写入成功的结果。
23.一种电子设备,其特征在于,所述电子设备包括:无线通信模块、存储器和一个或多个处理器;所述无线通信模块、所述存储器与所述处理器耦合;
其中,所述存储器用于存储计算机程序代码,所述计算机程序代码包括计算机指令;当所述计算机指令被所述处理器执行时,使得所述电子设备执行如权利要求1-10中任一项和/或权利要求11-22中任一项所述的方法。
24.一种计算机可读存储介质,其特征在于,包括计算机指令;
当所述计算机指令在电子设备上运行时,使得所述电子设备执行如权利要求1-10中任一项和/或权利要求11-22中任一项所述的方法。
25.一种芯片系统,其特征在于,所述芯片系统包括一个或多个接口电路和一个或多个处理器;所述接口电路和所述处理器通过线路互联;
所述芯片系统应用于包括通信模块和存储器的电子设备;所述接口电路用于从所述存储器接收信号,并向所述处理器发送所述信号,所述信号包括所述存储器中存储的计算机指令;当所述处理器执行所述计算机指令时,所述电子设备执行如权利要求1-10中任一项和/或权利要求11-22中任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210051767.1A CN115563628B (zh) | 2022-01-17 | 2022-01-17 | 一种变量读取、写入方法和变量读取、写入装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210051767.1A CN115563628B (zh) | 2022-01-17 | 2022-01-17 | 一种变量读取、写入方法和变量读取、写入装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN115563628A true CN115563628A (zh) | 2023-01-03 |
CN115563628B CN115563628B (zh) | 2023-09-22 |
Family
ID=84737532
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210051767.1A Active CN115563628B (zh) | 2022-01-17 | 2022-01-17 | 一种变量读取、写入方法和变量读取、写入装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115563628B (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117763538A (zh) * | 2023-12-22 | 2024-03-26 | 摩尔线程智能科技(北京)有限责任公司 | 动态链接库的注入方法、装置和计算机可读介质 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20150089238A1 (en) * | 2013-09-20 | 2015-03-26 | Insyde Software Corp. | System and method for verifying changes to uefi authenticated variables |
CN106547670A (zh) * | 2016-10-10 | 2017-03-29 | 许昌许继软件技术有限公司 | 远程读、写嵌入式Linux应用程序内存变量值的方法及装置 |
CN107735769A (zh) * | 2015-06-26 | 2018-02-23 | 英特尔公司 | 固件相关事件通知 |
CN107844385A (zh) * | 2017-11-08 | 2018-03-27 | 北京潘达互娱科技有限公司 | 一种基于共享内存的变量读写方法及装置 |
US20190228013A1 (en) * | 2018-01-19 | 2019-07-25 | Wago Verwaltungsgesellschaft Mbh | Automation device and method for optmized access to a variable |
CN113127844A (zh) * | 2021-03-24 | 2021-07-16 | 山东英信计算机技术有限公司 | 一种变量访问方法、装置、系统、设备和介质 |
-
2022
- 2022-01-17 CN CN202210051767.1A patent/CN115563628B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20150089238A1 (en) * | 2013-09-20 | 2015-03-26 | Insyde Software Corp. | System and method for verifying changes to uefi authenticated variables |
CN107735769A (zh) * | 2015-06-26 | 2018-02-23 | 英特尔公司 | 固件相关事件通知 |
CN106547670A (zh) * | 2016-10-10 | 2017-03-29 | 许昌许继软件技术有限公司 | 远程读、写嵌入式Linux应用程序内存变量值的方法及装置 |
CN107844385A (zh) * | 2017-11-08 | 2018-03-27 | 北京潘达互娱科技有限公司 | 一种基于共享内存的变量读写方法及装置 |
US20190228013A1 (en) * | 2018-01-19 | 2019-07-25 | Wago Verwaltungsgesellschaft Mbh | Automation device and method for optmized access to a variable |
CN113127844A (zh) * | 2021-03-24 | 2021-07-16 | 山东英信计算机技术有限公司 | 一种变量访问方法、装置、系统、设备和介质 |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117763538A (zh) * | 2023-12-22 | 2024-03-26 | 摩尔线程智能科技(北京)有限责任公司 | 动态链接库的注入方法、装置和计算机可读介质 |
Also Published As
Publication number | Publication date |
---|---|
CN115563628B (zh) | 2023-09-22 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110113167B (zh) | 一种智能终端的信息保护方法、系统以及可读存储介质 | |
Wang et al. | Exploiting smart-phone usb connectivity for fun and profit | |
CA2795180C (en) | Booting and configuring a subsystem securely from non-local storage | |
JP5061110B2 (ja) | 信頼性のある移動電話のための簡単で、拡張可能で且つ構成可能なセキュアなブート | |
KR101336378B1 (ko) | 애플리케이션 보안을 제공하는 방법, 장치, 및 컴퓨터 프로그램 | |
CN104995629A (zh) | 用于平台引导固件的信任继续 | |
WO2018166109A1 (zh) | 一种终端检测方法及终端 | |
US8369526B2 (en) | Device, system, and method of securely executing applications | |
US11347897B2 (en) | Electronic device and method for transmitting and receiving data on the basis of security operating system in electronic device | |
US7437563B2 (en) | Software integrity test | |
CN110752929A (zh) | 应用程序的处理方法及相关产品 | |
CN115563628B (zh) | 一种变量读取、写入方法和变量读取、写入装置 | |
CN114595437A (zh) | 访问控制方法、电子设备及计算机可读存储介质 | |
US11947709B2 (en) | Electronic device for controlling access to device resource and operation method thereof | |
US8621191B2 (en) | Methods, apparatuses, and computer program products for providing a secure predefined boot sequence | |
CN116669020B (zh) | 一种密码管理方法、系统和电子设备 | |
CN111625846B (zh) | 一种移动终端设备的系统状态记录方法 | |
CN116415247A (zh) | 一种容器安全校验的方法及装置 | |
KR20210142973A (ko) | 블록체인을 이용하는 전자 장치 및 동작 방법 | |
CN115146253A (zh) | 一种移动App登录方法、移动设备及系统 | |
US20240015156A1 (en) | Electronic device for controlling access to device resource and operation method thereof | |
CN116186709B (zh) | 基于虚拟化VirtIO技术卸载UEFI安全启动的方法、装置及介质 | |
CN118484813B (zh) | 动态可信度量实现方法、装置、设备、介质及可信系统 | |
CN118427147B (zh) | 基于eSPI的服务器主板的安全启动方法及相关设备 | |
CN117707629B (zh) | 系统启动方法、可读存储介质和电子设备 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |