天涯海角1216 发表于 2010-7-27 21:31:12

【教程】fbinst 启动U盘解读(MBR层面).【1楼附录像下载】

一、使用简介(源自百度)
我们知道:
      由于种种复杂原因,不同BIOS对U盘CHS/LBA参数处理结果不尽相同,导致同一个U盘,在一台机器上BOOT成功,在另一台机器上就可能BOOT失败。

  【早期硬盘也有类似问题,但最后通过多个工业标准,已经解决。而USB是万能接口,且有关标准未得到厂商统一遵守,问题更复杂】

  现在开源社区的bean提出了巧妙构思,开发出fbinst,基本解决了BIOS下的CHS/LBA参数适应调整问题,使U盘BOOT成功率大大提高。(除非碰上了极度变态的主板和BIOS)。
——fbinst的巧妙构思  
      预留8M(1-16064扇区)隐藏区,在每个扇区固定位置都写入该扇区在WIN下的LBA值,并在1-63扇区都写入boot code。BIOS启动时,通过boot code读取预先写入的LBA值,并与BIOS识别的LBA值进行比较,找出差距,倒推出当前BIOS对U盘的识别和访问情况,根据这个情况来调整纠正对U盘的访问。
——fbinst隐藏区空闲空间的利用
  fbinst对付BOOT兼容性问题的开发已经完成,目前新版本的开发重点已转向隐藏区的利用。由于8M隐藏区的每个扇区记录LBA时只用了几个字节,且boot code占据空间也不是很大,所以大量扇区空间是空闲的。在这个区域里可以嵌入:

  1。不同版本的grub4dos

  2。grub2

  3。ntldr

  4。1.44M/2.88M启动盘映像

  5。微型Linux

  现在的 fbinst 版本已经可以支持大的隐藏区了,可以装入WinPE或其他DOS工具,用grldr加载引导之。下面有详细说明。

二、MBR结构解析:
【1】主引导代码:
1.高明之一:
      几乎所有写入U盘的其他类主引导记录的都是占用一个扇区(占用0号扇区,如 HDD+,ZIP+,NT5,NT6 等等),而 fbinst 却是在前64个扇区的主引导代码都一样(稍微差异下面解释),BIOS在启动时只是读出一个扇区,但是它可能不是u盘的0扇区,因此引导代码要占多个扇区。以前的测试证明,63个就基本够了,最大只需要255。
不过我的一个U盘启动电脑时,基本扇区数设置为20000才成功启动,否则跳过U盘直接启动本机系统了。



2.高明之二:
      c、h、s(磁头、柱面、扇区)的检测需要更多的空间,至少需要一个柱面(约8M),在主数据区的每个扇区尾部都有该扇区位置代码(占用2个字节),BIOS一读便知此位置。除了位置代码外的其他部分空间就浪费了,因此才把它作为主数据区,从fbinst 1.6版开始最大30M,其间文件不连续(因为每个扇区尾部的绝对扇区地址占用2个字节)。其后再增加的存储启动和维护文件的空间称为扩展数据区,无尾部的绝对扇区地址,其间文件连续。
最小的主数据区必须包含64个主引导代码和fbinst菜单和文件列表。(但是需手动修改)
如下图:











【2】MBR细解,如图示:
      下图中是HDD模式的MBR,偏移00处是跳转指令,EB5E及跳转至偏移0x60处执行,偏移18处表示每磁道扇区数为63(3F),偏移1A处表示磁头数255(FF)



【3】分区表细解:[高明之三]

U盘第1、2扇区分区表位置对比:
1扇区



2扇区


天涯海角1216的理解:
    比如上面第一分区起始位置扇区为 8388608(16进制为00 00 80 00),表示距离第一分区有8388608个扇区,如果此时BIOS读入的是第8号扇区,而此处分区表显示8388600(fbinst 将MBR以后扇区的分区表递减),即距离第一分区有8388600个扇区,且是第8号扇区,BIOS便回读至0号扇区(MBR中有 B9 01 00字符,意思是读入0号扇区),便可以非常准确地知道该扇区位置以及分区表详细信息。(其他分区的分区表也是递减,方法类似)


三、各种模式对比:【高明之四】











四、辅助代码细解:【高明之五-UD区】

fbinst 1.6辅助代码为第65-67号扇区,此为67号扇区。(这个是默认 fbinst 格式化基本扇区数为64的,否则依次增加)

主数据区(包括0扇区和fbinst菜单以及文件列表)和扩展数据区大小设定位置。(64号扇区起始处)






从第68号扇区开始为UD内文件列表,下图








五、引导过程分析:

MBR > UD区 >grldr > PE/IMG/ISO。。。

MBR > UD区 >buldr > PE/IMG/ISO。。。

fbinst 菜单:
1. menu HOTKEY SUBCOMMAND
启动内核的命令都以menu开始,HOTKEY是对应的热键,子命令有

a) grldr FILENAME
启动grldr/ntldr文件

b) syslinux FILENAME
启动ldlinux.bin文件

c) msdos FILENAME
启动io.sys文件
   
d) freedos FILENAME
启动kernel.sys文件

e) chain FILENAME
加载启动扇区文件

f) linux KERNEL INITRD PARAM
启动linux内核

2. text STR
显示一行文字

3. timeout NUM
设置自动启动的时间

4. default NUM
设置自动启动的menu项

5. color FG/BG
设置颜色,前景/背景的格式,颜色值有
暗色:black, blue, green, cyan, red, magenta, brown, light-gray,
亮色:dark-gray, light-blue, light-green, light-cyan, light-red, light-magenta, yellow, white

背景只能使用暗色。也可以用normal来表示普通色,它相当于light-gray/black。

举例:

timeout 1
default 0
color red
text "                        fbinst v1.6 menu by bean"
text "                        --------------------"
color green
text "                        Press F1> GRLDR"
menu F1 grldr "grldr"
color red
text "                        --------------------"
color green
text "                        Press F2> WDC-SYSLINUX"
menu F2 syslinux "ibmlinux.bin"
color red
text "                        --------------------"
color green
text "                        Press F3> MSDOS 7.1"
menu F3 msdos "io.sys"
color red
text "                        --------------------"
color green
text "                        Press F4> SKTQB"
menu F4 grldr "SKTQB"
color red
text "                        --------------------"
color green
text "                        Press F5> MaoTao WinPE"
menu F5 grldr "LDRXPE"
color red
text "                        --------------------"
color green
text "                        Press F6> XORLDR"
menu F6 chain "XORLDR.MBR"
color red
text "                        --------------------"
color green
text "                        Press F7> BULDR"
menu F7 grldr "BULDR"
color red
text "                        --------------------"
color green
text "                        Press F8> CJJJP"
menu F8 grldr "CJJJP"
color red
text "                        --------------------"
color green
text "                        Press F9> NTLDR"
menu F9 grldr "NTLDR"
color red
text "                        --------------------"
color green
text "                        Press F10 > BOOTMGR"
menu F10 grldr "BOOTMGR"
color red
text "                        --------------------"
color green
text "                        Press F11 > PLoP Boot Manager"
menu F11 chain "plpbt.bin"
color red
text "                        --------------------"
color green
text "                        Press F12 > GMYghost.img"
menu F12 linux "memdisk" "GMYghost.img" "c=142 h=4 s=36 floppy"

也即进入grldr引导后,再加载ISO\IMG\MBR等文件,从而完成你需要的启动过程!


(未完待续,错误之处,请各位批评指正,大家用 winhex 打开磁盘,秘密便真相大白,否则只能跟着别人走。)

录像下载地址:http://115.com/file/d2s5ovh2#FBINST_解读MBR.rar

[ 本帖最后由 天涯海角1216 于 2011-10-19 18:06 编辑 ]

天涯海角1216 发表于 2010-7-27 21:32:51

先引用一下,我再慢慢分别讲述,各位见谅。
很多,需要花时间呀。。。

天涯海角1216 发表于 2010-7-27 21:34:07

再占用一层,准备图文并茂!

vod1234567 发表于 2010-7-28 06:46:48

占个沙发学习先,不错

19720205 发表于 2010-7-28 07:18:35

MBR一片空白,期待楼主的教程.

Plantsoot 发表于 2010-7-28 08:34:27

这个帖子要顶,底层理论。
早就想跟天涯大大学学磁盘扇区和启动原理方面的知识,终于有你的教材了。

[ 本帖最后由 Plantsoot 于 2010-7-28 10:37 编辑 ]

Plantsoot 发表于 2010-7-28 10:43:07

我也用winhex研究过,也得到点东西,尤其是文件列表中的规律,
当我发现里面的日期的格式的时候,还挺开心的。我当时还试图直接用软件读取文件列表16进制的数据,分析后可以直接读取ud内的数据,当时因为主分区的数据不连续(现在也不连续),所以我嫌麻烦就没继续下去了。看了教程后我想还是要直接读取16进制数据,这样有时候不需要借助fbinst.exe的支持,比较方便。

Plantsoot 发表于 2010-7-28 12:11:30

不知道1.6的文件列表结构和1.5的一样不是一样,晚上回去研究下。

2010yes 发表于 2010-7-30 00:36:07

版大这样详尽的教程---网上哪里有?,只能生于无忧----我们菜鸟有福了!
哦,还有百草霜大大也是一位写教程的大家----我们菜鸟有福了!

教程至少对于我们菜鸟极端重要--尤其是象版大等的优秀教程----
大大们长年累月奋斗的心血全贡献给了我们菜鸟!---高速地缩短了莱鸟在黑喑中无休止的摸索时间!

[ 本帖最后由 2010yes 于 2010-7-30 00:46 编辑 ]

oneuu 发表于 2010-7-30 06:24:21

学习太费力了。。。可能是这些知识太贫的原因。。
期待楼主完成这帖再认真读下。
谢天涯斑主。。。。

songhuirong1 发表于 2010-7-30 08:54:35

不错呀。学习了。支持下。

woshi_1001 发表于 2010-7-30 09:49:33

优秀的教程!但我这样的菜鸟看不太懂!

ToxicL 发表于 2010-7-30 10:37:52

mark。
感谢楼主整理,学习了。

ypy121 发表于 2010-7-30 14:38:55

学些了解了。。 天涯就是这方面的高手啊!

forumuser 发表于 2010-7-31 19:41:23

分2个区,1个小区引导进入dos及PE,一个大区装pe应用程序及当普通u盘使用,可否?

天涯海角1216 发表于 2010-7-31 19:44:51

回复 #15 forumuser 的帖子

当然可以,不过还是用fbinst的UD区最安全

2010jeak 发表于 2010-7-31 20:22:32

这么好咱就没人顶呢

forumuser 发表于 2010-7-31 21:08:09

原帖由 天涯海角1216 于 2010-7-31 19:44 发表 http://bbs.wuyou.net/images/common/back.gif
当然可以,不过还是用fbinst的UD区最安全

ud区就是最前面留空的7.9M的空间吗?我用PQ 805分区时,为什么最小的单位就是7.9M?

jdcgzb 发表于 2010-7-31 21:10:03

支持楼主继续推出好教材。

天涯海角1216 发表于 2010-7-31 21:10:09

回复 #18 forumuser 的帖子

一个柱面的大小呀

forumuser 发表于 2010-7-31 21:12:08

是否硬盘也可以用这个软件操作?方便以后安装多系统使用?我看了好几个帖子,头昏眼花的,感觉就在门口边,就是没法进去,似懂非懂的。。。

哪个帖子里有最新的fbinst软件下载呢?很想动手学习啊!

ud区就是最前面留空的7.9M的空间吗?


记录1:http://bbs.wuyou.net/forum.php?mod=viewthread&tid=172811&highlight=u%2B%B7%D6%C7%F8

工具和PE.iso都放到一个ISO文件中,,如果工具放在U盘中。启动PE后,由于是隐藏分区,工具无法使用。
如果采用工具内置到PE中,又影响启动速度。

一、用DiskGenius将U盘(或储存卡)分区。由于windows只支持给第一个分区分配盘符。自然第二个分区是隐藏的。
      分区时留给第二分区100M左右空间放PE启动文件。激活第二分区。
二、用bootice工具主引导记录(建议用windows NT5)写入U盘(或储存卡), 将分区引导记录(grub4dos)写入第二分区。
三、用DiskGenius将PE启动文件copy到第二分区。



20100826记录2:

http://bbs.wuyou.net/forum.php?mod=viewthread&tid=172811
打造另类的usb隐藏分区pe启动盘(支持U盘、储存卡)

http://bbs.wuyou.net/forum.php?mod=viewthread&tid=142426&extra=page%3D1&page=1
万能启动fbinst.exe已升级到1.6,支持WIN7下强行格式化,喜欢尝新的朋友不要错过。

http://bbs.wuyou.net/forum.php?mod=viewthread&tid=159603&pid=2027609&page=1&extra=#pid2027609
GRUB启动另一分区的ISO?求助。

http://bbs.wuyou.net/forum.php?mod=viewthread&tid=159185&highlight=%B7%D6%C7%F8%2Biso
Fbinst 怎么样可以做到引导U盘可以见分区的iso

Victoria硬盘修复

关于各种USB启动模式的解读 MBR、PBR

63扇区的FBINST

http://bbs.wuyou.net/forum.php?mod=viewthread&tid=150449&extra=page%3D1&page=1
引导扇区、启动扇区与mbr的区别与联系

http://bbs.wuyou.net/forum.php?mod=viewthread&tid=140075
PE DIY、grub4dos/easyboot多PE合盘制作、U盘安装

http://bbs.wuyou.net/forum.php?mod=viewthread&tid=149159
U盘 FBINST 多分区启动!

http://bbs.wuyou.net/forum.php?mod=viewthread&tid=158564&extra=page%3D1
小巧精干的WINPE3.0(内核51.1M,256M内存可启动)

http://bbs.wuyou.net/forum.php?mod=viewthread&tid=138738&extra=page%3D1
可在PE直接运行的杀毒WIM映像:卡巴、江民、大蜘蛛、ESET、小红伞(8月20日)

http://bbs.wuyou.net/forum.php?mod=viewthread&tid=174225&extra=&highlight=pe%2B7&page=1
Windows PE 【31M】【37M】全内置维护系统 U盘&硬盘版

http://bbs.wuyou.net/forum.php?mod=viewthread&tid=171167&highlight=pe%2B7
0825修正发布WIN7 PE3.1完美不管网络版(全面支持QQ、飞信.在线听音乐.电影)

http://bbs.wuyou.net/forum.php?mod=viewthread&tid=171800&highlight=pe%2B7
32位/64位二合一的Win7PE第三版(x86/x64二合一的WinPE3.0

http://bbs.wuyou.net/forum.php?mod=viewthread&tid=143924&extra=page%3D1
全藏入(ud)的PE ★一格一拖:启动U盘制作方法、DIY例(2010.8.26)

[ 本帖最后由 forumuser 于 2010-8-28 16:09 编辑 ]

天涯海角1216 发表于 2010-7-31 21:21:02

回复 #21 forumuser 的帖子

完全可以安装在硬盘使用的,http://bbs.wuyou.net/forum.php?mod=viewthread&tid=164120&highlight=。

最新软件在:http://bbs.wuyou.net/forum.php?mod=viewthread&tid=169595&highlight=

最新制作过程和方法在:http://bbs.wuyou.net/forum.php?mod=viewthread&tid=170034&extra=page%3D1

仔细再搜搜帖子吧,有些东西亲身实践得到的会很深刻的,呵呵

forumuser 发表于 2010-7-31 22:44:28

连续、反复读帖子。。。@@@@@

fbinst 的主分区、扩展分区与通常意义的硬盘的主分区扩展分区有区别吧?能否给说明一下?

关于扇区的数字经常容易混乱,63扇区指的是第63扇区(1,2,3......63,日常计数是从1开始)还是编号为63的扇区(0,1,2...63,计算机术语中计数是从0开始的吧?)???

[ 本帖最后由 forumuser 于 2010-7-31 23:05 编辑 ]

viniko 发表于 2010-7-31 22:57:47

看到这些..只能承认自己太菜了..

天涯海角1216 发表于 2010-8-1 06:07:21

回复 #23 forumuser 的帖子

1. fbinst 的主分区、扩展分区 > 其中主分区是指在每个扇区尾部,写入扇区地址的区域,至少一个柱面(约8M),便于便于BIOS识别硬盘或U盘的C、H、S(磁头、柱面、扇区),除了位置代码外的其他部分空间就浪费了(每个扇区只用2个字节地址,其余510个字节),因此才把它作为主数据区,而扩展分区是指存储启动和维护文件的区域。

2. 对于BIOS和WINHEX等软件,识别扇区是从0、1、2.开始的,而我们习惯从1、2、3开始的。

[ 本帖最后由 天涯海角1216 于 2010-8-1 06:41 编辑 ]

2010ftrain 发表于 2010-8-2 23:33:22

不知道看完这个对自己有什么用,都还是看了。看完后,不懂。呵呵。。留一脚印。

heximing 发表于 2010-8-6 08:57:37

什么时候再更新呢……

intellect 发表于 2010-8-6 09:06:58

新版本的FBINST可以做到在拷贝数据时优先使用8M剩下的空间,然后再放到扩展区。又是一大改进。呵呵

jhzhrx 发表于 2010-8-8 16:13:47

fbinst 启动U盘解读

板主:这些看不懂啊,能使多数人能看懂的教程就好了。

forumuser 发表于 2010-8-26 22:43:27

另一帖子5楼的问题

可否解答一下?
http://bbs.wuyou.net/forum.php?mod=viewthread&tid=159603&pid=2027609&page=1&extra=#pid2027609
页: [1] 2 3 4 5
查看完整版本: 【教程】fbinst 启动U盘解读(MBR层面).【1楼附录像下载】