820 G2 BIOS密码忘记了,怎么清除?

商务笔记本、消费类笔记本、移动工作站讨论区

版主: xyevolve

版面规则
1. 本版是定位于惠普笔记本电脑的技术讨论区。
2. 本版鼓励发帖共同讨论技术问题,不鼓励站内信件私下交流,独知知不如众知知。
3. 本版允许转贴或引用他人的作品,但必须声明原作者信息。
4. 本版禁止发表出售、求购、或其他非技术讨论等帖子。
5. 本版宁缺毋滥,严禁灌水,包括但不限于任何与所讨论主题无关的回复,无意义字符,直接复制其他回复等。
6. 本站附件仅限个人使用,请在下载后24小时内删除,本站不对其造成的结果负任何责任,请自行评估风险。
回复
gavingou
注册用户
帖子: 1
注册时间: 2020年 2月 1日 10:57 星期六

820 G2 BIOS密码忘记了,怎么清除?

帖子 gavingou » 2020年 2月 1日 11:02 星期六

820 G2 BIOS密码忘记了,怎么清除?
现在装系统经常间歇性蓝屏,怀疑是不是BIOS设置问题,想重新设置一下BIOS试试。

头像
MUDBOY
创始人
帖子: 3877
注册时间: 2010年 12月 28日 21:17 星期二

Re: 820 G2 BIOS密码忘记了,怎么清除?

帖子 MUDBOY » 2020年 2月 3日 15:52 星期一

bios密码现在比较难破解了,没有现成的工具,联系售后解决吧。

不过蓝屏的问题应该不会和bios太相关,试试清理下灰尘或者更新驱动应该更合适。
提倡分享之精神, 技术问题请在相关版面直接发帖, 站内短信恕不答复.
I don't answer private messages on topics of public interest, because it defeats the whole purpose of a message board.

archlinux
注册用户
帖子: 5
注册时间: 2015年 8月 14日 13:02 星期五

Re: 820 G2 BIOS密码忘记了,怎么清除?

帖子 archlinux » 2020年 4月 7日 08:10 星期二

我之前刚好做过去除8560W密码的工作,可以参考一下,对于密码存在BIOS芯片里面的机器都可以试试。
https://github.com/mytbk/firmware_notes ... ssword.rst

头像
MUDBOY
创始人
帖子: 3877
注册时间: 2010年 12月 28日 21:17 星期二

Re: 820 G2 BIOS密码忘记了,怎么清除?

帖子 MUDBOY » 2020年 4月 7日 18:10 星期二

谢谢楼上分享!

我引用过来了
去除 EliteBook 的 BIOS 密码

大概是去年我入了台 EliteBook 8560w. 当时我很快就给它移植了 coreboot 并刷了进去,之后就一直没刷回原厂固件。但是最近我需要卖掉这机器,留着 coreboot 可能就不太合适,所以我就把原厂固件刷了回去,顺便把白名单去了。但是接下来发现了一个问题,这份原厂固件是有 BIOS 密码的,这使得我没法设置系统,这样给买家也不合适。

我看了一下机器的 BIOS 版本,和 HP 网站提供的 BIOS 版本比较了一下,发现 HP 网站的 BIOS 更新。于是我下一份新 BIOS,把它拼到机器的 BIOS 里面。这里顺便提一句,HP 网站下的 EliteBook 的 BIOS 更新程序,是一个可以用 unar 解包的 exe 文件,里面的 Rompaq 目录下有一个几兆大小的 BIN 文件,用 UEFITool 打开可以发现里面是个 UEFI Image. 这个文件其实就是一份可以使用的固件,只是去除了 Intel 的 flash descriptor, ME 固件和 GbE 固件,把这个 BIN 文件替换掉用编程器读取出来的 ROM 里面的末尾部分就行了。我把拼接出来的 BIOS 刷进去,启动后发现 BIOS 密码没了,说明 BIOS 密码是存在 flash 里面,而不是什么安全芯片里面的。一般来说,保存 BIOS 设置的这个区域成为 NVRAM. 但是这样做有一个副作用,就是机器的 Product Number, Serial Number, UUID 等信息都没了。

那么更新固件会发生什么结果呢?我把原来的 ROM 刷回去,在 Windows 下用 BIOS 更新的 exe 程序更新固件。重启之后发现序列号那些信息都在,但密码也还在。于是我把这份固件读出来作为新的原版固件进行研究。同时我发现了一个事实,就是我之前 去白名单 的时候,把 PEI 模块 SecureUpdating 删了,更新了固件之后虽然白名单回来了,但是这个模块还是不存在。这说明 HP 的固件更新过程并不会更新 BIOS 区域所有的部分,当然了,NVRAM 里的信息也没有更新(我没有比对过前后两份 NVRAM,不知道有没有什么地方更新了),所以密码还在。

那么没办法,我只好想办法破解或者去掉这个密码。首先,进入 BIOS 设置的时候,HP 的设置程序给出了一个用户名,这个可以作为一个线索。我用 UEFITool 打开最早备份出来的 ROM,搜索这个用户名,果然搜到了这样一个 Unicode 字符串,它在一个 GUID 为 FFF12B8D-7696-4C8B-A985-2747075B4F50 [1] 的 Volume 里面,这应该就是 NVRAM 区域,总大小为 32KiB.

我把 BIOS 更新里面的 BIN 文件的这个 Volume 替换掉 ROM 里面的这个,刷进去,结果密码没了,但是序列号那些东西也没了,说明序列号那些信息也在 NVRAM 里面。

那么就想办法破解吧。我用这份 NVRAM 信息为空的固件启动系统,进入 BIOS 设置添加了一个用户,并设上密码。然后把 ROM 读出来。再把密码改一下,读 ROM. 然后把两份 ROM 的 NVRAM 读出来进行比较。

结果我发现 HP 的固件在我更改密码的时候,是在 NVRAM 里面追加了一些信息,从而 NVRAM 里面原本为 0xff 的区域(flash 在被擦除之后每个比特变成1,从而每个字节的值是 0xff)变成了非 0xff 的数据。每修改一次密码,在新的 NVRAM 搜我的用户名,会多出一条对应的记录。我对比了我的用户名字符串周围的数据,感觉密码可能是以某种散列的形式存放的,但是用几种散列算法都算不出 ROM 里面的数据,于是我就放弃破解密码的思路。

既然不能破解密码,能不能把这些用户记录都抹掉呢?我把最早的 ROM 拿出来,在它的 NVRAM 里面定位到用户名那里,在它之前用一个 Unicode 字符串 "USER". 我猜测固件查询 NVRAM 就和使用 EFIVAR 一样,把 NVRAM 当成某种数据库(事实上 EFIVAR 也存在 NVRAM 里面),里面存了一堆键值对,那么它就会用 "USER" 来查询用户名,只要我把这个字符串破坏了,那么固件就查不到任何用户了。我把 "USER" 字符串里面的一个字符改为 0x00, 然后把这份 NVRAM 存到新的 ROM 里面,刷进机器。启动后发现,BIOS 密码没了,同时序列号那些信息也没丢失,密码破解成功!
[1] 后来我用使用新引擎的 UEFITool NE 看了一下,这个 GUID 被称为 EfiSystemNvDataFvGuid,这个 Volume 的 Subtype 就是 NVRAM.
提倡分享之精神, 技术问题请在相关版面直接发帖, 站内短信恕不答复.
I don't answer private messages on topics of public interest, because it defeats the whole purpose of a message board.

xtom
注册用户
帖子: 3
注册时间: 2015年 12月 9日 09:33 星期三

Re: 820 G2 BIOS密码忘记了,怎么清除?

帖子 xtom » 2020年 4月 7日 19:39 星期二

学习了 感谢,正好这方面需要

回复