|
上网搜了好多帖子,目前只实现了更改 \boot\bcd 中最后的2个字符“CD”,限制还是很大的,也不够完美。
经过一个星期专研,我最终实现可以更改 \boot\bcd 中任意字符,方法见下。
0. bootmgr 说明
bootmgr 版本必须用 vista sp0, 即原始的,没打过补丁的 vista 的 bootmgr
原因:
目前bootmgr的版本有
Window 7 sp1 CRC32:DE51A3C4
Window 7 sp0 CRC32:EE471B58
Vista sp2 CRC32:E6CDE422
Vista sp1 CRC32:6442A4AD
Vista sp0 CRC32:543E715A
Vista sp0的bootmgr由2部分组成,16位的引导,和32位的bootmgr.exe
vista sp1,sp2,Window 7 sp0,sp1的bootmgr由3部分组成,16位的引导,32位的资源,32位的bootmgr.exe,而且,关键的是,这个32位的bootmgr.exe是经过压缩的,也因此大家最多只能改 \boot\bcd 中最后的2个字符“CD”,其他的字符经过压缩算法,早已面目全非。MS 使用的压缩算法是其内部算法,非公开,目前没有找到能 uncompress/compress 的程序。所以,不能使用这几个版本的 bootmgr
而 Vista sp0 的 bootmgr 中的 bootmgr.exe 是非压缩的,可以清楚看到 \boot\bcd 字样,可以任意更改这几个字符。
1. 文件
将所有W7PE的文件放到目录下
我的目录是 \W7PE
BCD
bcdedit.exe
BOOT.SDI
BOOT.WIM
BOOTMGR
MEMTEST.EXE
2. Vista sp0 的 bootmgr 的修改
a. 去除 checksum
位置 0xE28 ,将 7403 改为 EB08
b. \boot\bcd 路径
位置 0x54B6C ,随意改,但需注意,其字符是unicode编码,显示为".",16进制值为"00"的地方不能改
例如,我的改为 \W7PE\BCD
3. 修改 BCD 的内容
注意,如果只做了第2步,没有做这步,仍然不能启动成功
bcdedit /store bcd /enum all 先查看一下配置,然后依次更改
a. 去除签名
bcdedit /store BCD /set {bootmgr} nointegritychecks yes
b. boot.sdi位置
bcdedit /store BCD /set {your_sdi_id} ramdisksdipath \W7PE\boot.sdi
c. device 和 osdivice
bcdedit /store BCD /set {default} device ramdisk=[boot]\W7PE\boot.wim,{your_sdi_id}
bcdedit /store BCD /set {default} osdevice ramdisk=[boot]\W7PE\boot.wim,{your_sdi_id}
最后运行bcdedit /store bcd /enum all 检查
4. 我用的syslinux引导
LABEL W7PE
MENU LABEL Win7 PE
KERNEL chain.c32 ntldr=/W7PE/BOOTMGR
完成
5. 限制
区域语言限制:
在bootmgr中,MUI文件的位置为"%s\$s\%s.mui",其真实路径是动态生成的,目前没有找到好的更改方法,所以,bootmgr的多语言问题无法解决。
但可以显示中文字符:
a. bootmgr的0x56EF0处,默认为en-US,改为中文zh-CN
b. bootmgr的0x56804处,各种字体的位置,直接改\boot\fonts
通过这种方法,bootmgr默认菜单是英文的,但自己的菜单,可以显示中文字符
5.1 bootmgr 区域语言限制更改 - 突破限制:
将默认英文区域改成中文,启动盘中需要fonts目录,不需要zh-cn目录
a. 资源文件
用reshacker打开bootmgr相同版本的bootmgr.exe.mui文件,另存为bootmgr.exe.zh.res
用winhex打开bootmgr文件,查找ASCII码MZ,第二个位置,字符为“MZ\90”,将此位置前面部分存为0.bin,将此位置后面部分,包括“MZ\90”,存为bootmgr.exe
用reshacker打开bootmgr.exe,菜单“操作->添加一个新资源”,“打开新资源文件”,选择bootmgr.exe.zh.res,将res文件中的资源一个一个都添加进去,然后将资源文件中所有1033部分删除,只保留2052部分,存盘退出。
合成新的中文版的bootmgr, 命令 “copy 0.bin /b + bootmgr.exe /b bootmgr /b”
注意:bootmgr.exe 和 bootmgr.exe.mui 必须是相同版本的,可以在资源文件中的版本信息看到
b. 语言设置
bootmgr的0x56EF0处,默认为en-US,改为中文zh-CN
c. 字体路径
bootmgr的0x56804处,各种字体的位置,直接改\boot\fonts
5.2 memtest.exe 区域语言限制更改 - 将默认英文区域改成中文:
a. 资源文件
用reshacker打开 memtest 相同版本的 memtest.exe.mui文件,另存为 memtest.exe.zh.res
用reshacker打开 memtest.exe,菜单“操作->添加一个新资源”,“打开新资源文件”,选择 memtest.exe.zh.res,将res文件中的资源一个一个都添加进去,然后将资源文件中所有1033部分删除,只保留2052部分,存盘退出。
注意:memtest.exe 和 memtest.exe.mui 必须是相同版本的,可以在资源文件中的版本信息看到
b. 语言设置
memtest的0x4BAB0处,默认为en-US,改为中文zh-CN
c. 字体路径
memtest.exe 的0x4B55C处,各种字体的位置,直接改\boot\fonts
d. PE文件检验和
更新memtest.exe文件的PE校验和,我用的是stud_pe
e. 去除memtest.exe的签名
bcdedit /store BCD /set {memdiag} nointegritychecks yes
我已经做好的中文版bootmgr和memtest.exe
bootmgr_zh.7z.001.7z
(97.66 KB, 下载次数: 972)
bootmgr_zh.7z.002.7z
(97.66 KB, 下载次数: 996)
bootmgr_zh.7z.003.7z
(97.66 KB, 下载次数: 802)
bootmgr_zh.7z.004.7z
(67.25 KB, 下载次数: 761)
因要求附上 vista sp0的bootmgr
BOOTMGR.7z.001.7z
(97.66 KB, 下载次数: 767)
BOOTMGR.7z.002.7z
(92.27 KB, 下载次数: 677)
下载后,去除最后的.7z,然后用7zip解压
中文版的bootmgr和memtest.exe 截图
[ 本帖最后由 liuyug 于 2011-7-14 11:21 编辑 ] |
评分
-
查看全部评分
|