Insyde BIOS@G50-80 继续研究

继续研究发现,计算机的固件真的很有趣。参考了一些重要的资料,比如 http://donovan6000.blogspot.com/2013/06/insyde-bios-modding-advanced-and-power-tabs.html 等,对于IDA的使用也了解了一些。最后,总结一下目前看来可行性的方案:

0. 基础知识储备,包括UEFI BIOS的概念,Insyde BIOS的结构,IDA逆向的基本知识,BIOS-MOD、MDL上关于BIOS修改的基本知识等

明确:本文针对UEFI BIOS尤其是联想平台的某些版本的Insyde BIOS。

BIOS(主要)储存在FLASH芯片中,(相关芯片不止一颗)。通过SMM模式下的SMI指令可以进行读写,通过SPI烧写工具也可以直接进行物理读写。

BIOS变量储存在Nvram里面。

计算机的固件不仅包含BIOS,还有ME、EC等等部分。这些部分在正常的BIOS升级时会一并更新。但是在手动更新时往往关注其中主要的BIOS部分,(某些情况会关心ME,比如超频、解锁、以及最近的漏洞),这些部分的刷新方式、工作方式、储存位置、读写指令、恢复方式、读写性各不相同。

不同厂商的UEFI BIOS实现各具特点,而且指令有很大的不同,这些都是没有公开的资料的!

BIOS版本、主板版本、刷写程序版本需要对应才能成功刷入。一般来说刷写程序可以向下兼容。Insydeflash(Insyde的刷写程序)不能向下兼容,必须和BIOS版本对应。

对我自己的这个平台和BIOS版本来说,(ACLU3/4 ,Insyde BIOS),厂商的更新文件后缀名fd,包含了BIOS、ME等内容。dump出来的时bin格式,只包含BIOS(?)。在WIN平台下,读写性(正常引导后,UEFI出于安全考虑会锁柱某些区域(Region),使得无法通过指令读出、修改、写入)。我自己的平台上,读写性如下:

BIOS access table:

Read Write

Desc Yes No

BIOS Yes Yes

ME No No

GbE Yes Yes

PDR No No  

read意味着可以在WIN平台下dump出来(备份),write意味着可以在WIN平台下normal flash进去。

WIN平台下刷写方式主要为secure flash(安全刷写)和normal flash(手动刷新、强制刷新)

secure flash即(?)capsule方式刷新,所有的内容都可以刷进去,但capsule本身有签名,很难修改。

normal flash即传统的BIOS刷新,直接读写允许write的区域,逐字节写入flash,似乎可以绕过检验(未验证)

1. 从官网下载BIOS升级文件,通过安装、7-zip等方式想办法分离出刷写程序:Insydeflash.exe,platform.ini,iscflash.dll等文件。以及官方升级文件bioss.fd备用

2.修改Platform.ini文件,利用Insydeflash程序备份出现有的BIOS文件dump.bin

3. 使用Andy's Phoenix Tool或UEFITool工具解压并分析dump文件,找到需要修改的部分,使用IDA等工具修改好,重新打包/替换回fd文件

4.修改Platform.ini和Insydeflash.exe文件,强制使用normal flash模式,只刷写BIOS区域,刷入修改后的dumo文件

5. 重启验证

(待续)

6. 研究capsule签名的原理,想办法替换签名根。解析出fd文件结构,找到签名、打包的方法。完美解决secure flash问题

相关文件后续有空发到GitHub上去,待续

EOF

后续:验证太强,即使破解了flash程序,capsule还有一层验证,这个无解,除非找到bypass。

另,编程器真香

猜你喜欢

转载自www.cnblogs.com/B1ue/p/8461720.html