无忧启动论坛

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

[通用版下载]从其它盘直接启动硬盘任意分区的WIN7

[复制链接]
跳转到指定楼层
1#
发表于 2009-11-15 19:51:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
感谢CHENALL,没有他就没有本方法的实现!

CHENALL 为本人定制了一个GRLDR,可以显示和存储分区的offset值,而且可以实现字符替换功能,再也不用手动一个一个的去BCD中找SIGNATURE和分区的OFFSET值了。

注意这个GRLDR是最新版的,什么功能都有,不要理会错了。
===
直接启动WIN7的想法是raycar0在我的《定制NT6.X启动/安装目录》一贴中提出来的,想法非常的好,不依赖硬盘上的启动文件,直接启动硬盘上的WIN7。当时我已经明确的指出,只要我们修改了BCD文件中的磁盘签名(disk signature)和启动分区的偏移(offset),就可以从任何盘启动WIN7。

也正是基于这样一个原理,通过使用grub4dos的ddreplace命令,实现了我们的目标。

一个已安装系统的BCD文件记录了WINDOWS所安装在的磁盘以及哪个分区上,不同电脑的BCD文件是不能通用的,如果想通用,必须解决两个问题,一是代表磁盘的磁盘签名,另外一个是所安装分区的地址偏移。

在BCD文件中,凡是指定PARTITION=X:的项,都记录了磁盘签名。本人统计了一下,一个标准的WIN7,其BCD文件中涉及的签名和OFFSET之处达11处之多,为了完全与硬盘启动WIN7的过程一样,我们需要把这些签名全部修正。

OK,我们开始动手了:

这里我们举的例子是通过grldr加载一个img,再启动里面的bootmgr。下面要建立这个img文件。
建立一个720K的iimg文件,根目录放入bootmgr,建立boot目录,里面放入一个标准的BCD文件。假设名字为openwin7.img。

下面,就是关键内容了,我们需要修改这个img中的BCD文件的磁盘签名,使其与WIN7所在的磁盘签名一致。

假设img文件位于UD中。menu菜单是这样的:
title open win7 directly
map --mem (ud)/openwin7.img (fd0)
find --set-root --ignore-cd --ignore-floppies /windows/system32/winload.exe
map () (hd30)
map --hook
write 0x60004 0
write 0x60000 0
dd if=(hd30)+1 of=(md) bs=1 count=4 skip=0x1b8 seek=0x60000
map (hd30) (hd30) && map --hook
cat --length=0 ()-1
dd if=(md) of=(md) bs=1 count=8 skip=0x8290 seek=0x60008
cat --locate=\xD0\x3F\x06\0 --replace=*0x60000 (fd0)/boot/bcd
cat --locate=\0\x7E\0\0 --replace=*0x60008 (fd0)/boot/bcd
chainloader (fd0)/bootmgr


注意:对于BIOS激活或正版系统,这样操作是没有问题的,对于软激活的系统,可就不是这个样子了,直接引导bootmgr会提示您为"盗版受害者"。

怎么办?把WIN7启动分区根目录的grldr放到img中,先修改BCD文件,再chainloader (fd0)/grldr就行了。

另外,如果不使用本方法直接启动硬盘WIN7,假设WIN7只是没有了BOOTMGR文件,CHENALL提供了简单的指令:chainloader --edx=0080 (fd0)/bootmgr。
当然,如果你的WIN7没有问题,那么你直接find --set-root再chainloader就可以了。


[ 本帖最后由 victor888 于 2009-11-20 15:44 编辑 ]

openwin7.rar

321.08 KB, 下载次数: 924, 下载积分: 无忧币 -2

grldr.rar

107.92 KB, 下载次数: 495, 下载积分: 无忧币 -2

英文版

Chinese_grldr.rar

232.36 KB, 下载次数: 773, 下载积分: 无忧币 -2

中文版(grldr, grub.exe)

2#
发表于 2009-11-15 20:53:19 | 只看该作者
过来踩一下,再给上两个例子。
以下NTLDR和BOOTMGR都不在硬盘上(放在U盘或你能找到的地方),硬盘上只要有启动的配置的文件BOOT.INI 或/BOOT/BCD文件就可以直接启动了。可以在硬盘上的启动文件被删除后启动,当然也可以利用一下,把硬盘上的启动文件明删除了,别人就进不去系统了。

title 1.启动硬盘上的xp/2k3系统(NTLDR)
chainloader /NTLDR
find --set-root --ignore-floppies --ignore-cd /boot.ini
dd if=()+1 of=(md)0x3E+1

title 2.启动硬盘上的VISTA/WIN7系列系统(BOOTMGR)
chainloader /BOOTMGR
find --set-root --ignore-floppies --ignore-cd /boot/bcd
dd if=()+1 of=(md)0x3e+1

[ 本帖最后由 chenall 于 2009-11-15 20:54 编辑 ]
回复

使用道具 举报

3#
发表于 2009-11-15 21:25:17 | 只看该作者
你修改的bcd文件有多大?

bcd一般有256K或者十几KB的两种。
回复

使用道具 举报

4#
发表于 2009-11-15 21:27:56 | 只看该作者
win7爬窝如果是winload.exe出错的话,这个方法还有用吗?
如果是bootmgr等被删,或引导方式被改,宁愿修复。
因为既然win7的引导方式可以被改,那么grub4dos也有被干掉的可能,并非是grub4dos就被特别优待。
在此要控告微软,出了这么多系统让我们折腾

[ 本帖最后由 yaojy 于 2009-11-15 21:31 编辑 ]
回复

使用道具 举报

5#
发表于 2009-11-15 21:40:29 | 只看该作者
原帖由 yaojy 于 2009-11-15 21:27 发表
win7爬窝如果是winload.exe出错的话,这个方法还有用吗?
如果是bootmgr等被删,或引导方式被改,宁愿修复。
因为既然win7的引导方式可以被改,那么grub4dos也有被干掉的可能,并非是grub4dos就被特别优待。
...

我认为大大们研究的目的并不只是为了修复WIN7的引导,主要目的还是在于多引导与合盘,
回复

使用道具 举报

6#
发表于 2009-11-15 21:50:33 | 只看该作者
如果bootmgr/bcd失效了。
最简单的方法还不如先进入dos,直接往windows所在分区拷贝bootmgr和boot\bcd两个文件,其中bcd只包含启动nt 6.x一个项,device和osdevice都设成boot。然后运行grub.exe并加载windows分区根目录下的bootmgr就行了。
回复

使用道具 举报

7#
发表于 2009-11-15 23:01:49 | 只看该作者
看到那么多0X就头痛,我还是不试了,等最终研究成果……
回复

使用道具 举报

8#
发表于 2009-11-15 23:15:58 | 只看该作者
软激活的工具这么多,它们的GRLDR文件都通用的吗...
回复

使用道具 举报

9#
发表于 2009-11-16 04:16:18 | 只看该作者
@ Victor888

Hello Dear,

ii just need to ask some points ,

why we need to have

dd if=(hd1)+1 of=(md) skip=0x1b8 bs=1 count=4 seek=0x60000
dd if=(md) of=(fd0)/boot/bcd skip=0x60000 bs=1 count=4 seek=0x3434

while actually , we can load win 7 all right from floppy image even if we deleted first bootmgr and boot/bcd files from hard disk . , then why using all these lines , ?

also it seems that the above example was when you boot from usb and select this image , thats why you used hd1 . so from cd , we ll use hd0 ?

and is your approach similar to the following that we have in NT5 based System , where we make img file with ntldr ,ntdetect.com , boot.ini .

and boot.ini like below ,

multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP Professional" /noexecute=optin /fastdetect

multi(0)disk(0)rdisk(0)partition(2)\WINDOWS="Microsoft Windows XP Professional" /noexecute=optin /fastdetect

multi(0)disk(0)rdisk(0)partition(3)\WINDOWS="Microsoft Windows XP Professional" /noexecute=optin /fastdetect

multi(0)disk(0)rdisk(1)partition(1)\WINDOWS="Microsoft Windows XP Professional" /noexecute=optin /fastdetect

and so on ....

can we use same approach for NT6 based OS too ? where setup will search for winload.exe on every partition of every attached hdd ?

thanks ,

Regards,
Maanu from Pakistan
回复

使用道具 举报

10#
 楼主| 发表于 2009-11-16 09:02:04 | 只看该作者
回复3楼:
我修改的是28K的BCD,256K的没有见过,但修改原理应该是一样的。

回复4楼:
WINLOAD出错不知道是什么样子,我觉得这种直接启动方式也可以直接启动WIN7,也WINLOAD无关,因为正确的WINLOAD路径在BCD中已经指明了。

回复5楼:
这个与合盘没有关系,不过是启动WIN7的一种方式而已。

回复7楼:
如果说恢复WIN7系统,最好的工具当属recenv.exe,我们没有必要进入DOS去操作,更没有必要进WIN去操作。其实如果手动恢复WIN7的话,可以在PE下把IMG中的BOOTMGR和“使用DD命令直接修改”的BCD拷贝过去就行了。

其实反过来年讲,如果我们能从其它盘启动WIN7,我们完全可以按F8进入修复模式,再运行recenv.exe就可以了,BCDBOOT不用着,因为这个工作只是修复WIN7的启动,而前者可以把硬盘所有安装的系统都一次性找出来。
回复

使用道具 举报

11#
 楼主| 发表于 2009-11-16 09:15:32 | 只看该作者
hi, Maanu, you this lovely foreign guy.

I try to answer your question now.
why we need to have
dd if=(hd1)+1 of=(md) skip=0x1b8 bs=1 count=4 seek=0x60000
dd if=(md) of=(fd0)/boot/bcd skip=0x60000 bs=1 count=4 seek=0x3434
while actually , we can load win 7 all right from floppy image even if we deleted first bootmgr and boot/bcd files from hard disk . , then why using all these lines , ?

Different installed NT6.X systems write disk signature and partition offset in BCD files. So BCD file is usually not compitalbe to other pcs. We must change disk signature and partition offset in BCD file for starting different system.

The reason I use above dd line is that I must consider the booting speed. You can see that IMG was mapped into memory, and HD signature was written to memory at 0x60000 either.

also it seems that the above example was when you boot from usb and select this image , thats why you used hd1 . so from cd , we ll use hd0 ?

You are right. I will revise GRLDR command and make it more comatible to recognize which disk and which partition windows 7 has been installed. That is we need not to consider HD1 of HDX.

and is your approach similar to the following that we have in NT5 based System , where we make img file with ntldr ,ntdetect.com , boot.ini .
..

Explanied above, BCD is not similiar to boot.ini because of the disk signature and partition offset.

[ 本帖最后由 victor888 于 2009-11-16 09:24 编辑 ]
回复

使用道具 举报

12#
发表于 2009-11-16 09:27:19 | 只看该作者
原帖由 xuxuezeng 于 2009-11-15 21:40 发表

我认为大大们研究的目的并不只是为了修复WIN7的引导,主要目的还是在于多引导与合盘,

不知道是我理解有误,还是LZ表述不当。
帖子一开始就说当win7爬窝...,用PE修复很麻烦...,言下之意是这个东西修复更方便。
其实,把这个东西作为启动win7的一种方式来研究,那也是不错的。
比如有人喜欢这样绕圈子:先引导到DOS,再从DOS引导grub4dos,最后由grub4dos引导xp/2003/vista/win7
回复

使用道具 举报

13#
 楼主| 发表于 2009-11-16 10:15:43 | 只看该作者
我认为楼上说的话对于本主题讨论的内容一点关系没有,如果通读全文,不会有这样的误解。我也不想和你进行任何的争论,请注意我的签名。
回复

使用道具 举报

14#
发表于 2009-11-16 16:12:17 | 只看该作者
post # 11

ok i got it . i ll wait for your next grub4dos more universal approach to load the img document from memory . i mean to boot windows 7 which is on hdd .

and are  you experimenting with latest 14th november rellease of grub4dos ?

one last question , if you dont mind ,

i see that there are different memory addresses you mentioned in seek=xxxx .  are they all possible memory addresses where bcd or bootmgr files can be found on hard disk or what ?

Thank you so much for the reply .

Regards,
Maanu from Pakistan
回复

使用道具 举报

15#
 楼主| 发表于 2009-11-16 18:06:03 | 只看该作者

#14 maanu

Those address belong to  BCD file not to memory. The img file is just mapped into memory.

The BCD file is just one of standard Chinese windows 7 ultimate edition. So if someone want to revise BCD, it is strongly recommended to check disk signature addresses in BCD file by hex edit tool.

I haven't test the newest grub4dos and also don't know what  new features have been added.
回复

使用道具 举报

16#
发表于 2009-11-16 20:16:49 | 只看该作者
原帖由 victor888 于 2009-11-16 10:15 发表
我认为楼上说的话对于本主题讨论的内容一点关系没有,如果通读全文,不会有这样的误解。我也不想和你进行任何的争论,请注意我的签名。

我也认为争论下去只会增加更多的“误解”
回复

使用道具 举报

17#
 楼主| 发表于 2009-11-16 20:50:00 | 只看该作者

回复 #16 yaojy 的帖子

我有点偏激了,我现在去请求把你的帐号恢复,SORRY。

[ 本帖最后由 victor888 于 2009-11-17 10:23 编辑 ]
回复

使用道具 举报

18#
发表于 2009-11-16 21:25:04 | 只看该作者
原帖由 victor888 于 2009-11-16 20:50 发表
我看到了垃圾!
我看到了垃圾!
我看到了垃圾!
我看到了垃圾!
我看到了垃圾!
我看到了垃圾!
========
我不怕把这个主题变成一个吵架的地方,因为我痛恨垃圾,WUYOU的回帖有一半以上是垃圾, ...

实在抱歉!让LZ满口都是垃圾了...
回复

使用道具 举报

19#
发表于 2009-11-16 22:43:34 | 只看该作者
楼主提供了一个因为几个启动文件导致在硬盘启动WIN7失效后通过其它方式启动win7的方法,大家知道,win7对文件的加密是牛B的,如果无法启动硬盘上的系统而且又没备份数字证书导致重要数据丢失,那可要完蛋了。我发现在某些winpe3.0的boot目录中有20K的BCD文件,某些却是256K,某些win7多版本整合盘里也是256K大小的BCD
回复

使用道具 举报

20#
 楼主| 发表于 2009-11-17 03:22:44 | 只看该作者
deleted.

[ 本帖最后由 victor888 于 2009-11-17 10:23 编辑 ]
回复

使用道具 举报

21#
 楼主| 发表于 2009-11-17 10:30:50 | 只看该作者

#14 maanu

You are right, new GRUB4DOS provides us with rew command -replace which enable us to fulfill the repalce task by a single line. It is no longer neccessary to find all disk signatures in BCD file.

==
chenall told me it is impossible to deliver the variance.

[ 本帖最后由 victor888 于 2009-11-17 11:25 编辑 ]
回复

使用道具 举报

22#
发表于 2009-11-17 11:32:10 | 只看该作者
我怀疑WIN7可能有点模仿MAC BOOTCAMP,很多咚咚可能和那个200M的隐藏分区/卷有莫大关系,如果把那个分区/卷的内容清空会跑出“BOOTMBR is missing”。当然这仅仅是个人猜测,并未对其内容进行具体分析,本人没有发言权。
回复

使用道具 举报

23#
发表于 2009-11-17 12:39:46 | 只看该作者
原帖由 ones 于 2009-11-16 22:43 发表
楼主提供了一个因为几个启动文件导致在硬盘启动WIN7失效后通过其它方式启动win7的方法,大家知道,win7对文件的加密是牛B的,如果无法启动硬盘上的系统而且又没备份数字证书导致重要数据丢失,那可要完蛋了。我 ...


256K的挂到注册表后再导出就可以得到比较小的了。20KB左右吧。
回复

使用道具 举报

24#
发表于 2009-11-17 16:37:45 | 只看该作者
原帖由 netwinxp 于 2009-11-17 11:32 发表
我怀疑WIN7可能有点模仿MAC BOOTCAMP,很多咚咚可能和那个200M的隐藏分区/卷有莫大关系,如果把那个分区/卷的内容清空会跑出“BOOTMBR is missing”。当然这仅仅是个人猜测,并未对其内容进行具体分析,本人没有 ...

没有什么关系,那个隐藏分区只不过是把启动文件bootmgr/bcd等全放进去了而已,相当于很多linux的boot分区。

而且严格来说,那个启动分区根本不是隐藏分区,只不过系统默认没有分配盘符。
回复

使用道具 举报

25#
 楼主| 发表于 2009-11-19 19:19:26 | 只看该作者
最后顶起。
回复

使用道具 举报

26#
发表于 2009-11-20 12:13:08 | 只看该作者
能不能也提供GRUB.EXE文件
回复

使用道具 举报

27#
发表于 2009-11-20 12:28:31 | 只看该作者
版主,不知现在通用的grub 2009-11-14由不点上传的grldr可否用在你的大作上。因为如果是订制的话,实在不方便。
回复

使用道具 举报

28#
 楼主| 发表于 2009-11-20 12:42:05 | 只看该作者
grub.exe我向chenall要了,等回音呢。

chenall给我的版本,就是基于不点最新版弄的,什么功能全有,不知道为什么要换呢?
回复

使用道具 举报

29#
发表于 2009-11-20 13:48:21 | 只看该作者
版主:我看过Vista与win7的bcd是一样的,不一样的是bootmgr.

用CHENALL的方法可以启动vista(有bcd,用的是Vista的bootmgr)

用你的方法启动到cat --length=0 ()-1
就显示文件名错,按任意键退出。

不知哪里出错?可否帮忙分析一下。你的方法很好
回复

使用道具 举报

30#
发表于 2009-11-20 13:49:30 | 只看该作者
呵呵

不错啊

.....
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-9-23 00:26

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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