无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站广告联系 微信:wuyouceo QQ:184822951
楼主: wuwuzz
打印 上一主题 下一主题

[分享] 说一种克制Ventoy、fbinst的buggy BIOS。

  [复制链接]
跳转到指定楼层
1#
发表于 2023-10-1 23:22:10 | 显示全部楼层 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 wuwuzz 于 2023-10-1 23:29 编辑



神舟A470、K470系列笔记本所配Phoenix BIOS,其工作方式对Ventoy、fbinst磁盘布局而言是致命的。
这个BIOS今年1月份在量产区讨论过,也知道Ventoy、fbinst引导失败原因。今天有空在这个版块提一下。

这种BIOS所配USB-HDD模块不完整(不完整的原因,推测:一种可能是神船没花钱买;另一种可能源码买了
但被神船改糊了)。它可以正常工作到设备类型判定(U盘被设定为HDD),但紧接着的流程就不按套路了:
不作为固定盘处理,而实际是按移动盘处理

也就是说,BIOS菜单项虽然显示是USB-HDD,但实际是空壳,选中后BIOS是按移动盘处理(最终BIOS盘号
0X00,DOS下A:>),这将导致:MBR最终会被跳过,U盘从PBR引导(其中:LBA0会映射到第1分区第1扇)。

因此,像Ventoy、fbinst的磁盘布局,引导代码将不会被读到,导致引导失败。




评分

参与人数 2无忧币 +10 收起 理由
freesoft00 + 5
wuxin9712 + 5 赞一个!

查看全部评分

2#
 楼主| 发表于 2023-10-2 08:31:34 | 显示全部楼层
补救:
由于BIOS不把控制权交给MBR代码,按照yaya老大的分析,对于fbinst/UD而言,
要想成功启动,就需要把引导代码搬到可见分区,UD隐藏分区的启动菜单及文件
也要搬过去,这样修改后,UD的优点荡然无存。

对于Ventoy,还没有进一步测试,但方向是明确的:在这种BIOS下,要引导成功,
第1分区需要放引导代码。(由于Ventoy磁盘布局是固定设计,这样改会造成什么
不良后果还未知)


评分

参与人数 1无忧币 +5 收起 理由
wuxin9712 + 5

查看全部评分

回复

使用道具 举报

3#
 楼主| 发表于 2023-10-2 09:31:02 | 显示全部楼层
zhxy9804 发表于 2023-10-2 09:17
其实把u盘当hdd处理就很好,非区分usb非usb

BIOS的INT13服务实际就是这样啊,展现给用户的,是统一的调用界面,
屏蔽了USB/IDE...等的区别。(或者说,USB、IDE...的不同驱动,由BIOS在内部自己搞定)

回复

使用道具 举报

4#
 楼主| 发表于 2023-10-2 09:42:41 | 显示全部楼层
邪恶海盗 发表于 2023-10-2 09:28
ZIP模式是否有效???

==============

对USB-ZIP的判定,Phoenix BIOS的算法是严格按照真实Iomega ZIP驱动器特性
来进行的。(也就是狭义的ZIP)。因此,普通U盘(移动介质盘)拿来,是不会被
识别为USB-ZIP的。菜单项不会出现USB-ZIP:某某U盘。
普通U盘将可能被识别为USB-HDD或USB-KEY。


结果是一样的,BIOS盘号0x00,DOS下A:>。USB-HDD在DOS下A:>不是C:>的原因,
我上面说了。





点评

暂时没有碰到这种,没有发言权...  详情 回复 发表于 2023-10-2 10:09
回复

使用道具 举报

5#
 楼主| 发表于 2023-10-2 11:49:25 | 显示全部楼层
本帖最后由 wuwuzz 于 2023-10-2 12:05 编辑
sizhou 发表于 2023-10-2 10:23
http://bbs.c3.wuyou.net/forum.php?mod=viewthread&tid=419727
看下我提的方法怎么样,可能这个bios ...

这就复杂了。

这个帖子,正好我昨天看了几遍,包括机翻的内容,起因是oluolio问
USB-FDD的事情。这里面我最关注的内容就是关于ZIP的叙述(这个是被
搞得最混乱的概念)。

这里有几条前提要事前明说,否则可能会出现“公说公有理、婆说婆有理”
现象:
一、最好了解过BIOS内部USB启动算法代码,知道BIOS的思路。
二、观测手段的改进,眼见不一定为实(例如:直观感受的话,太阳
是围绕地球转的)。最忌讳的就是:我通过测试XX种BIOS,表面发现
YY现象,然后ZZ结论。

比较硬核的观察手段就是动用硬件USB协议分析仪(抓包器),它可以
直接监听"看到"UEFI/BIOS与U盘的会话过程,既知道底层细节,也
能够与“一中BIOS算法”相互印证。
================================================================
正题:概念理清。

一、移动、固定

BIOS说的移动、固定,是指驱动器设备,
移动盘设备,将被赋予盘号0X00,表现为DOS下A:>
固定盘设备,将被赋予盘号0X80,表现为DOS下C:>

U盘的移动、固定(在windows中有表现),指的是盘片(介质)
是否可移动,由固件中移动介质位RMB=0/1控制。


U盘存储芯片物理上是固定的,但传统上会把RMB位设置为移动
(没有理由。当然,通过量产工具,可以改为固定)。
有的BIOS算法(比如AMI),有编译选项--是否拿RMB的情况,来作为

判定设备移动、固定的条件之一。

二、ZIP(最混乱的概念)

1.狭义的ZIP,是指Iomega ZIP驱动器,它是一种两栖设备,通过跳线或专用指令,

可以设为固定设备(C:>),也可以是移动设备(A:>)。(机翻内容中,也有这一段例子)。
ZIP驱动器早已消亡,但其“可切换导致CHS和LBA扇区数变动”思路影响到BIOS的汇编
代码编制者。Phoenix BIOS的代码是按这个标准来判定的。

2.其他厂家BIOS对ZIP的判定,由其算法决定。

3.量产工具。SMI量产工具中的USB-ZIP,实际是指RMB位为移动,它就是来捣乱的。

4.关于格式化工具对MBR/PBR之类做手脚、“格式化成ZIP”的说法(包括层主在

linux下对32/64的设定。这种类似操作在更早的时间,victor888就发过帖子,我
也参与过,当然那时对BIOS和ZIP的认识、手段还没有今天这样的水准。这当中,
pendrivelinux的ZIP叙述有重大误导作用),在我看来,要看具体情况,我倾向于
本质上作用不大:
(1)这种操作,对Phoenix BIOS无效。因为Phoenix算法,采信U盘固件信息,不看MBR。
无论怎么改,BIOS无视。
(2)这种操作,会影响特定条件下的AMI BIOS。AMI算法,首先采信U盘固件信息,

但有的早期版本同时也看MBR的情况作为辅助。这时对MBR的操作,会影响AMI的判定结果。
(机翻的帖子中,也谈到了这一点)
(3)pendrivelinux的误导,在于倒果为因。BIOS首先是根据固件信息(主要是容量-

总扇区数),按特定算法把U盘判定为ZIP。然后,再按ZIP MBR-32/64的特性去处理,
这个过程是自动的。而不是反过来,先把U盘MBR参数搞成32/64,然后试图影响
BIOS对ZIP的判定。

点评

是有点复杂,特别是虚拟机,可以改进下,下载的Linux系统可以写入U盘启动,很多Linux都支持live CD启动玩,其实Linux系统只要有哪条命令HARPARM换个别的版本也行的,做1次管终身,其  详情 回复 发表于 2023-10-2 12:28
回复

使用道具 举报

6#
 楼主| 发表于 2023-10-2 13:27:07 | 显示全部楼层
本帖最后由 wuwuzz 于 2023-10-3 10:03 编辑
sizhou 发表于 2023-10-2 12:28
是有点复杂,特别是虚拟机,可以改进下,下载的Linux系统可以写入U盘启动,很多Linux都支持l ...

“不要局限bios识别U盘是什么,要看后续他怎么启动U盘,假设bios认为U盘是ZIP后,后续启动他会做什么,
怎么读U盘开始扇区代码进行启”
====================================================================================

这个倒不是局限,实际上在14楼已经涉及到了。

一、BIOS按自己的算法对DISK进行细分(FDD、ZIP、HDD、LS120等),这一步站在上帝视角来看,
只是中间过渡步骤性质。BIOS要达到的最终目的:要么是移动盘0X00、要么是固定盘0X80。

(为了方便其他读者理解,这里用不精确但直观的描述方式),其实就是:要么作为软盘引导、要么
作为硬盘引导。
剩下的软盘与硬盘引导方式区别、DOS和PE具体怎么引导,就不是BIOS要操心的了。

二、Phoenix ZIP之所以要费口舌,是因为它存在不确定性。既可能是软盘、也可能是硬盘。要看具体是

哪一种,然后根据实际,BIOS设定的CHS和LBA参数不一样,这将影响后续引导软件读盘位置
(进而可能引导成功或失败)。

三、其他补遗
1、AMI BIOS有捞过界的容错代码,有对FreeDOS引导失败的补丁(按说,这种琐碎事,不是BIOS的职责)。
2、Phoennix BIOS中,对同一个U盘,不同算法规则同时运算,可能会得到互斥结果。此时固定盘、移动盘
选择权会交给用户来选
,即在设备菜单条目后有F/R选择标志。

点评

你哪里有8G的U盘不,请用HP格式化工具弄下,看可以启动DOS不,在你这台神舟A470、K470系列笔记本所配Phoenix BIOS上,至于这台机子的bios是识别你U盘是0x00/0x80,还是启动后提示A:\//c:\已经不重要了  详情 回复 发表于 2023-10-2 15:32
bios识别你的U盘是FDD模式0X00,你按HDD0X80做的,最后能启动了,还介意什么  发表于 2023-10-2 15:27
回复

使用道具 举报

7#
 楼主| 发表于 2023-10-2 15:54:54 | 显示全部楼层
不同容量U盘,在我这里是可以启动到DOS A:>的,我自己用没问题。
因为已经知道失败原因。


发帖说这个BIOS,主要是它对Ventoy、Fbinst等复杂磁盘布局格式
的盘不友好,Ventoy、Fbinst会引导失败。


点评

如果感觉启动DOS不好的话,可以试下MBR设置为NT6,PBR设置为BOOTMGR,把基本的启动PE10/11文件放进U盘看可以启动不,  详情 回复 发表于 2023-10-2 16:49
回复

使用道具 举报

8#
 楼主| 发表于 2023-10-2 17:18:25 | 显示全部楼层
我用的G4D,启动PE/Linux没问题。

之所以从咸鱼淘这个机子来,就是因为顶楼说的原因,保留BUG样本。

回复

使用道具 举报

9#
 楼主| 发表于 2023-10-3 12:29:14 | 显示全部楼层
本帖最后由 wuwuzz 于 2023-10-3 12:32 编辑
不点 发表于 2023-10-3 08:16
我以前开发的 multimbr,就是专门对付一楼这种的情况的(就是,跳过 MBR 直接走 PBR),wuwuzz 不妨试试。w ...

  热烈欢迎不点老大前来指导!

  一、我2022年那个发言与multimbr主题无关,主要是讲观测UEFI/BIOS手段的改进。当时
发言时还是想法,后来我就真正付诸实施了,并且在2023年1月的神舟K470测试中发挥了重要
作用。
  二、K470 BIOS以前已经做过的测试
  真正的功臣是yaya、求道者,我是做后勤的伸手党。这个事的最初动机,源于网上零碎
发言,说是A470/K470不支持USB-HDD,勾起了求道者和我的兴趣,随后我从二手市场买了
一台。具体测试过程详见:
  http://bbs.wuyou.net/forum.php?m ... ra=page%3D1&page=10
从283#开始。
  期间:ventoy、fbinst、wee等都测试了,multimbr在355楼由sunsea提了一句,但当时
正好是yaya已经做出了分析结论,multimbr被自然忽略了。当时yaya的2段重要分析结论,
供读者参考:
  1.经过BIOS自己的判断,认为U盘是可移动介质(此处应该是移动设备,而不是介质-wuwuzz注),
因此分配盘符A,隐藏第一个分区之前的扇区,修改(确切地说是减少)总扇区数,修改第一个分区
(PBR)的参数表(BPB),具体是修改偏移0x1c处的4字节隐藏分区值。以求道者的UD为例,是将
0x4000修改为0。然后把控制权移交给PBR代码。此时,使用int13/ah=42读LBA(0),由于隐藏了
第一个分区之前的扇区,现在LBA(0)指向第一个分区(PBR),因而不是返回MBR代码,而是返回
PBR代码。BIOS根本就没有把控制权移交给MBR的代码,因此UD的引导代码没有起作用,隐藏分区的
启动菜单及文件也没有使用。UD启动失败。
    ....
   2. 判断为可移动时,也就是判断为软盘时,减少1磁头,隐藏第一分区之前的扇区,逻辑0扇区
指向PBR。这对于通常形态的启动模式(即读MBR,查找活动分区,然后把控制权交给PBR),没有影响。
然而对于UD形态的启动模式(即读MBR,在隐藏分区读文件,进入菜单。不交权,与PBR启动代码完全
无关),实在是灾难。因为根本就没有把代码控制权交给他。
   三、关于再次测试
   (一)不存在物质条件障碍,而且,相对于以前的测试环境,这次完全不同了,鸟枪
换炮,我们测试者的力量增强了:
   1、观测手段改进,BIOS黑箱被击破。我们有硬件USB协议分析仪,通过抓包,可以
直接监听看到BIOS-U盘间的会话过程,时间精确到毫秒,知道BIOS读了LBA什么位置,读
的扇区内容。
   2、有完整版BIOS源码做参照。神舟以前流出过phoenix BIOS源码,本次A470、K470
系列BUG机正好吻合这个流出的BIOS源码版本。只不过源码是完整版,而A470、K470的上的
BIOS是阉割版。
   3、掌握了欺骗phoenix BIOS的技巧,能够制作出满足其要求的USB设备类型。

   (二)但时机不巧, 本人工作单位面临机构改革,人心惶惶,所有人无心工作,都在
忙着复习应付考试。真要测试的话,至少要延后数月,待机构尘埃落定心静之后了。

点评

在下已经退出所有的开发了。有您、yaya、求道者、sunsea 等各位大神在继续探索,非常期待。 我只是随便逛逛,偶尔说点什么。最近两年来,在大多数情况下,我说的都是与开发无关的话题。  详情 回复 发表于 2023-10-3 13:07
回复

使用道具 举报

10#
 楼主| 发表于 2023-10-3 12:52:20 | 显示全部楼层
不是一台不支持,而是两类BUG机型成百上千台不支持。
如果不想获取更深层次原因和知识,那确实也没什么大不了的。


回复

使用道具 举报

11#
 楼主| 发表于 2023-10-3 13:53:55 | 显示全部楼层
邪恶海盗 发表于 2023-10-3 13:05
不用隐藏分区,直接整个U盘FAT32写个Grub4DOS引导,丢个GRLDR可否启动成功?

可以的。只要PBR上放想要的内容(G4D、WEE、FB等)就可以了。
这个BIOS的特点就是无论是啥USB存储设备,最后都(因为Fixed属性被阉割)
而被作为软盘对待,从PBR上引导。

PS:通过分析仪监听知道,此BIOS下,U盘的MBR内容会被读,但真正引导时
不起作用,最终是从PBR引导。

点评

有没有试过老版本的FbinstTool,我的印象中好像有USB-FDD模式,不知道记错没有...  详情 回复 发表于 2023-10-3 14:39
回复

使用道具 举报

12#
 楼主| 发表于 2023-10-3 14:03:00 | 显示全部楼层
不点 发表于 2023-10-3 13:07
在下已经退出所有的开发了。有您、yaya、求道者、sunsea 等各位大神在继续探索,非常期待。

您太谦虚了。
我也是年龄大了,有点絮絮叨叨,力不从心。我不是大神,只是对USB有
兴趣而自学、做点力所能及工作的后勤人员。现实所从事工作也非IT相关。
在无忧发帖,只是希望自己的经验能为读者提供点借鉴和帮助。

点评

发自内心,我已变成伸手党。所以,非常羡慕您几位。您几位,在我看来,毫无疑问,都是大神。  详情 回复 发表于 2023-10-3 17:17
回复

使用道具 举报

13#
 楼主| 发表于 2023-10-3 14:59:04 | 显示全部楼层
本帖最后由 wuwuzz 于 2023-10-3 15:01 编辑
邪恶海盗 发表于 2023-10-3 14:39
有没有试过老版本的FbinstTool,我的印象中好像有USB-FDD模式,不知道记错没有...

ZIP选项。没试。

我很久以前就不用FB了,语法全忘,测试用的FBA还是求道者提供的。
事实上,所有从MBR/PBR层面动手、试图影响BIOS判定的软件,我兴趣
都不是很大了。


因为我知道:BIOS看重的是U盘固件参数,而不是MBR/PBR方面的
内容。所以后来都是在固件参数知识储备、调整措施方面下功夫。


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2024-5-10 03:37

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表