【UEFI】---BIOS中UserPassword的重复校验总结
UEFI作为目前较为流行的一套X86架构初始化的标准框架,已受到业界内的广泛认可。而其中很多编程所采用的思想确实值得学习。今天总结下UEFI的框架下修改代码的一点小经验,仅供菜鸟参考。
先列干货,具体的小结后续补充:
1. 明确你要的某个功能的实现逻辑,都需要在哪个位置添加代码。
(很重要,这决定着你的方案是否可行重要前提,一旦此步骤错误,后续的代码实现也会由于代码框架的不合适而完全崩塌)
2. 代码需要良好的封装性,高内聚性,低耦合性。秉着此原则。笔者建议写代码时从最终功能开始写起,用到什么变量,GUID,或者头文件定义,就去添加什么。这样能保证你添加的都是你需要的,且思路不会乱。
3. UEFI框架下经常会涉及到一些GUID,包括跨Pkg的Lib调用,在此也会小结一下。
OK, 干货就这几点,用笔者目前遇到的一个小问题--"BIOS Setup下UserPassWord重复设置密码可以成功的功能"为例进行说明。
1. 流程梳理
a. 密码的存储和校验一般多采用HASH值校验的方式,优点【安全,简单】
b. BIOS下的密码流程:

- 用户输入密码后,BIOS能拿到用户输入的字符串,首先需要对密码的复杂度进行验证。看复杂度是否符合。

- 其次是将当前输入密码与之前的存储过的密码进行对比,若有重复则放弃。密码的存储的和对比一般是使用该字符串的Hash值,非明文存储简单安全。若符合要求,则进一步将密码进行存储
(CRB代码中提供了对AdminPassword的过往三次密码重复校验,其实现的流程比较复杂一些,但是其原理应该是通过对过去三次设置的密码进行Hash值存储校验,且需要按照顺序存储,毕竟只能存储过去的三次。这个地方应该使用了类似队列的方案,先进先出)

- 最后就是在每次存储密码的时候,要把最终保存的Admin的密码的Hash存储到队列里面。原始最早存储的那个密码进行删除,将其后的两个密码Hash按顺序提升一位,然后将最新保存的密码放置在Hash队列中的第三位即可
2. 方案设计
2.1 在最终保存密码的时候,设置一个Variable存储当前UserPassword的Hash
2.2 在输入UserPassword后,读取上一次设置的密码Hash,与当前输入的密码Hash进行对比。判断是否可以被写入
3. 编码实现
3.1 设置保存UserPassword的Hash值,我们仅需要拿到当前输入密码的字符串,然后得到Sha256编值,再通过gRT->SetVariable的服务存储保存即可。初步编写的函数如下:

3.2 用户输入密码后,在做完复杂度校验后,添加UserPassWord的重复验证,代码如下:

3.3 最终将SetVariable的函数添加至BIOS保存退出时,设置密码的位置即可。

小结梳理:
最终将SetVariable的函数添加至BIOS保存退出时,设置密码的位置即可。
此Bug梳理之后其实挺简单的,回想自己的解问题思路,应该注意的几个点主要如下:
a. 理清处原有的AdminPassword的检验机制,学习其的一些处理方法
b. 编码时,对GUID和一些Lib库的调用有点不够清晰,也是通过本次整理重新梳理了下GUID的用法和Lib库的调用。(后续着重总结)
c. 有一些过程功能函数,仅限在某个.c文件内部使用,这种情况下,果断考虑重写一套函数供自己使用。不要为了外部调用原有函数而花费过多无用的时间。
d. 最最重要的一点,写代码时一定要明确需求,自己要写什么,在哪个地方写?然后从最根本的需求处入手,需要什么就添加什么,这样才能稳住阵脚,从容应对。
针对此次解决的一些小Bug,做以上总结,给同为程序猿的我们,留下些许的足迹。
【UEFI】---BIOS中UserPassword的重复校验总结的更多相关文章
- GPT vs MBR 分区 ,,, Legacy BIOS vs UEFI BIOS
MBR与GPT两种磁盘分区格式的区别 http://itoedr.blog.163.com/blog/static/120284297201378114053240 GPT Partition Tab ...
- 惠普台式机在UEFI BIOS设置通电自动开机 影响电脑自动重启关不了机设置
设置通电自动开机 影响电脑自动重启关不了机设置 惠普台式机在UEFI BIOS中 1. 开机时不断点击F10键进入BIOS,选择Advanced(高级)然后选择Boot Options,点击回车 ...
- BIOS中的UEFI和Legacy启动模式
BIOS即Basic Input/Output System,翻成中文是"基本输入/输出系统",是一种所谓的"固件",负责在开机时做硬件启动和检测等工作,并且担 ...
- 【UEFI】---BIOS中对Guid的使用以及Lib函数的使用总结
---恢复内容开始--- BIOS发展至今传统的汇编实现早已被抛弃,UEFI作为目前一套主流的标准定义接口,被广泛使用.之前被一些有关GUID和一些Lib函数的使用以及跨Pkg调用给折腾的不行,每次改 ...
- bios中只有windows boot manager下用U盘启动
在重装系统的时候,很多时候都是先进入bios设置成U盘启动项,然后进行安装,如果年代久远一点的,就设置成光驱启动,再进行:随着时间的推行,光驱已经开始淘汰了,也怀念以前的光驱装机的时光!-:) 开始进 ...
- UEFI BIOS模式下Windows系统启动过程以及引导文件修复方法
有关UEFI BIOS基础知识的简介,一年前在网易博客做过详细的概述.鉴于某些网友仍然对UEFI下Windows的启动过程不甚了解,虽然网上有各式各样的启动修复工具,但是对于新手来说,如果不明白其中的 ...
- 对“传统BIOS”与“EFI/UEFI BIOS”的基本认识
硬盘(MBR磁盘)分区基本认识+Windows启动原理 大家常会看到硬盘分区中这样的几种说法:系统分区.启动分区.活动分区.主分区.拓展分区.逻辑分区,MBR.PBR.DPT.主引导扇区等.尤其是看到 ...
- UEFI BIOS Rootkit Analysis
catalog . BIOS简介 . UEFI BIOS . EFI编程简介 . UEFI Rootkit 1. BIOS简介 BIOS("Basic Input Output System ...
- EFI/UEFI BIOS启动
全局唯一标识分区表(GUID Partition Table,缩写:GPT)是一个实体硬盘的分区结构.它是可扩展固件接口标准的一部分,用来替代BIOS中的主开机纪录分区表.但因为MBR分区表不支持容量 ...
随机推荐
- Kafka基本知识入门(一)
1. 基础知识 有关RabbitMQ,RocketMQ,Kafka的区别这个网上很多,了解一下区别性能,分清什么场景使用.分布式环境下的消息中间件Kafka做的比较不错,在分布式环境下使用频繁,我也不 ...
- 最新 Flutter 团队工程师中文演讲 | Flutter 的性能测试和理论
本视频为 Google Flutter 团队的软件工程师 Xiao Yu 在 2018 谷歌开发者大会做的演讲,演讲题目是<Flutter 的性能测试和理论>. 这个视频里将会通过近半个小 ...
- Spring基础笔记
Spring带给了我们什么便利? 注解版本的IOC如何玩? 组件注册 组件注册的过程中有哪些过滤规则? 如何控制组件的作用域(单例多例)? 六种注册组件的方式? 生命周期 什么是bean的生命周期 在 ...
- STL 队列
头文件 #include <queue> 定义 普通队列: queue < int > q; 优先队列: priority_queue < int, vector< ...
- BeautifulSoup 库简单学习使用
from bs4 import BeautifulSoup as BS # 首先是初始化一个BeautifulSoup的对象 soup = BS(text,'lxml') 示例: from bs4 i ...
- Python模块之snmp-cmds,easysnmp
一.简介 snmp-cmds模块通过SNMP与目标设备进行通信,此模块适用于windows,此模块是基于系统已安装了net-snmp环境easysnmp模块通过SNMP与谬表设备进行通信,此模块用于l ...
- Streaming-大数据的未来
分享一篇关于实时流式计算的经典文章,这篇文章名为Streaming 101: The world beyond batch 那么流计算如何超越批处理呢? 从这几个方面说明:实时流计算系统,数据处理模式 ...
- LoRaWAN_stack移植笔记(七)_数据包的接收发送
以下的代码适用于LoRa sx1276点对点的通讯,纯粹的考虑在非发射模式下即为接收模式 配置sx1276的射频参数,并且切换到接收模式 //bandwidth [0:125 1:250 2:500] ...
- @WebInitParam注解
Servlet注解——@WebInitParam多个InitParam的写法 使用@WebInitParam配置多个InitParam,使某些页面不被拦截.在过滤器Filter.java下添加注解:@ ...
- 优化Recorder H5录音:可边录边转码上传服务器,支持微信提供Android IOS Hybrid App源码
Recorder H5 GitHub开源库随着支持功能的增多,音频转码处理效率渐渐的跟不上需求了,近期抽时间对音频转码部分进行了升级优化,以支持更多实用的功能. 另外IOS的Hybrid App也完成 ...