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的重复校验总结的更多相关文章

  1. GPT vs MBR 分区 ,,, Legacy BIOS vs UEFI BIOS

    MBR与GPT两种磁盘分区格式的区别 http://itoedr.blog.163.com/blog/static/120284297201378114053240 GPT Partition Tab ...

  2. 惠普台式机在UEFI BIOS设置通电自动开机 影响电脑自动重启关不了机设置

    设置通电自动开机 影响电脑自动重启关不了机设置   惠普台式机在UEFI BIOS中 1. 开机时不断点击F10键进入BIOS,选择Advanced(高级)然后选择Boot Options,点击回车 ...

  3. BIOS中的UEFI和Legacy启动模式

    BIOS即Basic Input/Output System,翻成中文是"基本输入/输出系统",是一种所谓的"固件",负责在开机时做硬件启动和检测等工作,并且担 ...

  4. 【UEFI】---BIOS中对Guid的使用以及Lib函数的使用总结

    ---恢复内容开始--- BIOS发展至今传统的汇编实现早已被抛弃,UEFI作为目前一套主流的标准定义接口,被广泛使用.之前被一些有关GUID和一些Lib函数的使用以及跨Pkg调用给折腾的不行,每次改 ...

  5. bios中只有windows boot manager下用U盘启动

    在重装系统的时候,很多时候都是先进入bios设置成U盘启动项,然后进行安装,如果年代久远一点的,就设置成光驱启动,再进行:随着时间的推行,光驱已经开始淘汰了,也怀念以前的光驱装机的时光!-:) 开始进 ...

  6. UEFI BIOS模式下Windows系统启动过程以及引导文件修复方法

    有关UEFI BIOS基础知识的简介,一年前在网易博客做过详细的概述.鉴于某些网友仍然对UEFI下Windows的启动过程不甚了解,虽然网上有各式各样的启动修复工具,但是对于新手来说,如果不明白其中的 ...

  7. 对“传统BIOS”与“EFI/UEFI BIOS”的基本认识

    硬盘(MBR磁盘)分区基本认识+Windows启动原理 大家常会看到硬盘分区中这样的几种说法:系统分区.启动分区.活动分区.主分区.拓展分区.逻辑分区,MBR.PBR.DPT.主引导扇区等.尤其是看到 ...

  8. UEFI BIOS Rootkit Analysis

    catalog . BIOS简介 . UEFI BIOS . EFI编程简介 . UEFI Rootkit 1. BIOS简介 BIOS("Basic Input Output System ...

  9. EFI/UEFI BIOS启动

    全局唯一标识分区表(GUID Partition Table,缩写:GPT)是一个实体硬盘的分区结构.它是可扩展固件接口标准的一部分,用来替代BIOS中的主开机纪录分区表.但因为MBR分区表不支持容量 ...

随机推荐

  1. JAVA基础知识(三):input.nextLine() 和input.next()

    next()方法在读取内容时,会过滤掉有效字符前面的无效字符,对输入有效字符之前遇到的空格键.Tab键或Enter键等结束符,next()方法会自动将其过滤掉:只有在读取到有效字符之后,next()方 ...

  2. exe4j打包--exe转安装包

    前面一篇已经详细的说明了打包成exe的步骤了,下面谈谈exe如何压缩成安装文件.这里用到之前的另外一个软件,具体软件看这篇文章 exe4j打包成exe 打开inno 编辑器 打开软件后我们选择 用[脚 ...

  3. Excel批量导入(导出同理)

    在做JavaWeb中添加数据使我们在所难免会遇到的,在大数据的环境下批量添加和批量删除是必须的,而批量删除只需要获取到我们需要删除的ID就可以了,在批量添加中我们就会遇到问题,问题是得到批量的数据,这 ...

  4. Spring参数的自解析--还在自己转换?你out了!

    背景前段时间开发一个接口,因为调用我接口的同事脾气特别好,我也就不客气,我就直接把源代码发给他当接口定义了. 没想到同事看到我的代码问:要么 get  a,b,c  要么  post [a,b,c]. ...

  5. Goland_IDE的护眼、主题、字体等设置

    Goland_IDE的护眼.主题.字体等设置 1.代码格式化 File->Settings->Tools->File Watchers->+->go fmt->将N ...

  6. Linux配置部署_新手向(一)——CentOS系统安装

    目录 前言 VMware 开始安装 系统安装 小结 @ 前言 最近忙过一件人生大事之后,终于稍微有点时间鼓捣东西,之前net core相关的基础已经鼓捣的差不多了,既然net core跨平台,那就来体 ...

  7. 如何使用python records 库优雅的操作数据库

    今天要介绍的这个python第三方库非常厉害,完美操作各种数据库.名字叫 records, 在网上很少有这个库的相关资料,但是在开源社区可是很火热的哦.如果这还不能打消你的顾虑,再告诉你一件事:如果你 ...

  8. vue入门:用户管理demo

    该demo纯前端实现 使用到vue技术点: 1.在该demo中使用到的vue指令:{{}}. v-if. v-model. @click v-for 2.在该demo中使用到的事件修饰符: .prev ...

  9. Jesus Is Here[递推]2015沈阳online

    题目链接https://nanti.jisuanke.com/t/41175 自从百度之星初赛一上自己做出来一道打表找规律的题之后,这种膨胀的感觉让我近乎丧失理智,今天这道题我死死盯了两三个小时硬是没 ...

  10. 《Tomcat和JVM的性能调优你真的学会了吗?》总结篇

    Tomcat性能调优: 找到Tomcat根目录下的conf目录,修改server.xml文件的内容.对于这部分的调优,我所了解到的就是无非设置一下Tomcat服务器的最大并发数和Tomcat初始化时创 ...