mytbk / firmware_notes

some notes about firmware(BIOS,UEFI,coreboot,routers,embedded system,etc.)
Creative Commons Zero v1.0 Universal
99 stars 25 forks source link

请问您对Thinkpad系列的BIOS刷新时的校验有了解吗? #2

Open Yangff opened 7 years ago

Yangff commented 7 years ago

听说刷的时候会有RSA校验,又不想撸下来刷,于是就想看看它的校验是怎么做的。但是SystemFlashUpdateDriverDex里面并没有和RSA校验有关的代码好像…… 至少我没有看到明显是Bignum之类的东西…… 能问一下现在新的bios直接刷改过的是会什么校验失败?还是别的什么原因导致一定要硬刷?

mytbk commented 7 years ago

一般就是数字签名吧,弱一点的话就是只有散列。

Yangff commented 7 years ago

@mytbk 主要是我把整个Flash Bios的流程看了一遍,似乎没有签名相关的代码,以及针对签名错误的错误信息…… 除了一个比较奇怪的Oem check……

主要是窝不知道啥时候手贱升级了bios,现在刷只能看到ERROR 182 - BIOS image is equal or older than ROM!

mytbk commented 7 years ago

flash的流程是怎样的? 我对私有刷写协议不了解,只会用flashrom.

Yangff commented 7 years ago

好吧,我可能找到了…… 藏得真深……

@mytbk 在我这里是这样的,各个平台上的winflash最后会调用到SystemFlashUpdateDriverDex的+448这个函数,这部分具体的原理我不大清楚,反正那个模块最后会调用到这个函数上

然后显示各种欢迎信息,帮助什么的……

如果参数是write或者embedded_microcontroller (em)的话,大概不是这个模块负责的,会走一个和正常刷写无关的流程。

否则的话,会开始读当前的flash module

然后开始读当前的(读出来的)bios的信息,build date time,build date time info,SMBIOS information什么的,还有是否允许rollback

然后是读取参数并且根据参数做的一系列合法性检查。

然后开始读要写入的image

然后取出要写的那部分

然后又是一堆检查,各个参数的合法性检查,从错误号来看都不大重要……

比较让人注意的就是一个security_bios的全局变量,(因为我没有刷成功过改过的)我不知道刷改过的bios会出什么错,但是这个属性会导致Error 233,Only secured capsule is allowed on a SecureFlash system, 但是这玩意又只是检查了一些属性,并没有实际意义……

然后就是实际flash的流程……

在我这里是+0EEA9,这里对flash做了进一步校验,SecureFlash verification fail就是它产生的反正,以及往esp分区写入.cap数据

其中SecureFlash verification fail, 具体是+0E8BB这个函数搞出来的,如果这个就是签名校验失败时候的错误的话就是在这里面了…… (但这里面好像也只有校验…… 可能我看错了吧)

Yangff commented 7 years ago

DUMP.zip

-然而并不行-