无忧启动论坛

标题: U+深度隐藏毫无意义 [打印本页]

作者: hhh333    时间: 2013-5-4 10:11
标题: U+深度隐藏毫无意义
本帖最后由 hhh333 于 2013-5-4 10:23 编辑

P大和Z版对这种方式似乎很推崇,近期也拜读了他们的大作,作了一些试验,U+了不知道多少次,经验当然要分享!这里主要讨论U+深度隐藏。因牵涉到grldr,因此还是发在这个区。

1、首先看一下U+的几种隐藏方式有什么特点
隐藏方式
U盘写入的区域
是否分区及DG下可读
大文件是否要求连续
是否支持PXE启动
能否找到外置
隐藏
前端
×
×
×
高端隐藏
后端
×
深度隐藏
前端
×

(这里讲不能找到外置当然是指不额外使用隐藏区挂载工具时的情况)
深度隐藏是没有分区信息的(或者说分区表被移动了),因此会产生严重的问题:
①EZB和Syslinux可以出菜单,但PE1.x启动时会提示ntdetect错误,PE3/4会提示BCD错误,实际就是说setupldr和bootmgr等根本不认这个没有分区信息的分区;
②grldr不经过处理也不能读取这个分区的文件,当然也不能启动;
目前,这种隐藏方式下用EZB和syslinux可以启动DOS映象和Slitaz Linux。

2、对grldr进行一些改造
这是pseudo解决这个问题的思路:
  1. 1、找到隐藏分区的分区表项信息(第97扇区末)
  2. 2、解析分区表项,得到分区起始扇区、总扇区数等信息
  3. 3、将隐藏区映射为一个虚拟软盘
  4. 4、直接访问虚拟软盘上的文件,启动PE
  5. 核心grub4dos代码:
  6. dd if=(hd0)96+1 of=(md)768+1 bs=1 count=8 skip=502
  7. set /a pe=*393216 && set /a ps=*393220
  8. map (128)%pe%+%ps% (17)
  9. map --hook
  10. rootnoverify (17)
  11. #now you can load PE from (fd17)
复制代码
根据这个意思,我对grldr的默认菜单进行了改写:
  1. pxe detect
  2. configfile
  3. default 0
  4. timeout 1

  5. title find /menu.lst, /boot/grub/menu.lst, /grub/menu.lst
  6. errorcheck off
  7. configfile /boot/grub/menu.lst
  8. configfile /grub/menu.lst
  9. if "%@root%"=="(ud)" && calc *0x82A0=*0x82b9&0xff
  10. dd if=(hd0)96+1 of=(md)768+1 bs=1 count=8 skip=502
  11. set /a pe=*393216 && set /a ps=*393220
  12. map (hd0)%pe%+%ps% (fd3)
  13. map --hook
  14. rootnoverify (fd3)
  15. if "%@root:~1,1%"=="f" && find --set-root --devices=f /menu.lst && configfile /menu.lst
  16. find --set-root --ignore-floppies --ignore-cd /menu.lst && configfile /menu.lst
  17. find --set-root --ignore-floppies --ignore-cd /boot/grub/menu.lst && configfile /boot/grub/menu.lst
  18. find --set-root --ignore-floppies --ignore-cd /grub/menu.lst && configfile /grub/menu.lst
  19. errorcheck on
  20. commandline

  21. title commandline
  22. commandline

  23. title reboot
  24. reboot

  25. title halt
  26. halt
复制代码
为了方便阅读和提高兼容性将17改为fd3(不超过有的BIOS实际承认的软驱数),经过这么改造以后,确实多数机器可以出菜单,但我一台i3的挂了两个硬盘的机子,直接死机。出菜单以后的表现与EZB和syslinux相似,PE都不能启动,即控制权转交给setupldr和bootmgr后还是不能读文件!

后又看P大的菜单,用的是整体启动,即映射为软驱后,再将ISO映射为(0xff),之后再启动其上的PE,失去了他原先作品的解开、整体都没有问题的特点。

3、其他两种隐藏方式除nativePE和非RAMPE不能启动外,启动其他形式的PE没有问题,特别是启动阶段加上bootpart工具后找外置也没有问题(基于这个原因我认为U+比UD更具优势)。

通过以上的试验可以得出如下结论:
1、隐藏主要是为了保护启动文件,因此使用一般隐藏和高端隐藏就够了,没必要弄什么深度隐藏,如果只用DOS工具linux可以考虑这种方式(我个人认为一般隐藏应该兼容性更好,因为启动区在U盘前端);
2、即使对grldr默认菜单进行改造,深度隐藏方式的兼容性也是最差的,不用说老机,就是有的较新的机器可能连菜单也出不了;
3、比较切合实际的做维护的办法还是准备2个U盘,容量大的做U+隐藏或高端隐藏,容量小的做UD,前者对付新机,后者对付老机;

以上观点当否,请大家发表意见!


作者: sratlf    时间: 2013-5-4 10:20
对u+隐藏无爱。。。。
作者: Cracada    时间: 2013-5-4 11:05
U+深度隐藏区感觉类似于UD扩展区,但U+启动的兼容性貌似低于UD
我用一块U盘,一块SD卡反复测试了+隐藏/高端隐藏/深度隐藏,在新机器和一台05年的老服务器上反复做过各种测试,现在选用的还是UD+手动添加末端隐藏区的方式

如果UD扩展区可以设置为一般隐藏属性就好了,这样在保留UD高启动成功率的同时可以支持UEFI
作者: David.Z    时间: 2013-5-4 11:16
看来UD开发速度跟不上形式啦!开发者需要大大滴更新呀。不过俺还是用UD,用着方便,一个fbinsttool就能日常够用了。
作者: 不点    时间: 2013-5-4 11:17
我不同意标题的说法。“毫无意义”,这样的词汇,感情的色彩太浓厚了,不冷静。

任何技术,都有其优缺点。不能因为其缺点的存在就否认了其优点的存在,也不能因优点而抹杀缺点。

深度隐藏是开发者的一个开发实践,目的是提供不同的选择,让用户使用。这与 bean 开发 ud 技术,以及 grub2、syslinux 等等,都是平行的、一样的。


作者: David.Z    时间: 2013-5-4 11:19
对了!要说隐藏还是Ud隐藏的更好吗?
作者: zds1210    时间: 2013-5-4 11:20
U+深度隐藏和UD隐藏,都是抹掉分区表,所以,PE内核一定要打包,不能解开。同时都不能被未来的Uefi引导识别。所以,暂时只能算bios时代的东西。
U+深度隐藏,怎么改进代码,grub似乎兼容性都不太好,实测都能不达到万能启动,除非从grub内核改进支持U+深度隐藏。但自家的easyboot良好兼容U+深度隐藏,bootpart也可挂载U+V2-hdd深度隐藏区,但不能可挂载U+V2-zip深度隐藏区。个人感觉,对于U+深度隐藏,似乎是对新电脑而言,选用easyboot做第一引导,可以放心的深度隐藏,但功能又比grub功能差多了。
最后,个人在想,syslinux能识别并引导U+深度隐藏区,grub内核一定也要改造,让它识别引导。这才是根本。然后等bootpart解决挂载U+V2-zip深度隐藏区区问题,以后U+深度隐藏才会有真正的技术应用。
作者: zds1210    时间: 2013-5-4 11:24
菜单以后的表现与EZB和syslinux相似,PE都不能启动,即控制权转交给setupldr和bootmgr后还是不能读文件!

nt5引导和nt6引导根本不认识这种抹掉分区的隐藏区,UD也是这个样子,你怎么叫他们读取下一个文件,真是强人所难。这种PE,内核打包成iso来map是王道,easyboot中直接run *.iso就行了.
谢谢楼主改进grub对U+深度隐藏的代码,改天测试一下。
作者: zds1210    时间: 2013-5-4 11:28
本帖最后由 zds1210 于 2013-5-4 11:30 编辑

个人并不达到什么狂热的态度,只是希望技术上有 点进步,大家一起来努力,让U+深度隐藏在bios时代达到实用阶段。
但uefi时代来临,UD和U+深度隐藏都是末路了,因为uefi根本不可以识别引导这种抹掉分区的隐藏分区。唉。才是问题的根本。
个人现在比较推荐的是U+B+高端隐藏加uefi双启动技术,立足于bios,面向uefi时候。

作者: David.Z    时间: 2013-5-4 11:36
额!…软件跟不上硬件的发展看来就的淘汰。不过我这些老电脑来说UD就是个宝贝。
作者: 不点    时间: 2013-5-4 11:37
你们都忽略了,不久以前在本版有讨论,说下面这句,在 grub4dos 新版下是错误的:

set /a pe=*393216 && set /a ps=*393220

所谓的“成功率不高”,估计都是由此引起的。

请用正确的写法来写以上这一行。请查找以前的讨论。

也请知道的人,给出正确的语句,避免他人继续使用错误的语句。


作者: 拿铁不加糖    时间: 2013-5-4 12:51
U+高端隐藏支持UEFI启动,这才是他的亮点.
作者: zhaohj    时间: 2013-5-4 14:03
不点 发表于 2013-5-4 11:37
你们都忽略了,不久以前在本版有讨论,说下面这句,在 grub4dos 新版下是错误的:

set /a pe=*393216 && ...


set /a pe=*393216 && set /a ps=*393220
是没有问题的,取地址的值。
(md)768,是否有问题,这块地址能随便写吗?
改成(md)0x200+1

上面地址也相应调整。
作者: chenall    时间: 2013-5-4 15:40
zhaohj 发表于 2013-5-4 14:03
set /a pe=*393216 && set /a ps=*393220
是没有问题的,取地址的值。
(md)768,是否有问题,这块地址 ...

set /a pe=*393216
读出来的数据有可能是64位的,必须考虑这种情况.....




作者: zds1210    时间: 2013-5-4 15:41
不点 发表于 2013-5-4 11:37
你们都忽略了,不久以前在本版有讨论,说下面这句,在 grub4dos 新版下是错误的:

set /a pe=*393216 && ...


是的,经测试,这段代码在新grub失效,希望P大更新。
我用老版的,弄到fd3试一下,能不能解决有一些机子的兼容性问题。
作者: zds1210    时间: 2013-5-4 16:01
本帖最后由 zds1210 于 2013-5-4 16:07 编辑

深度隐藏的PE像U+深度隐藏和UD
优点是明显的:
1.分区信息抹掉了,最安全,最不怕病毒,最能防误删除和误格式化。
2.兼容性不错。UD+grub在一起,有良好的兼容;U+V-hdd深度隐藏引导+easyboot,基本上能在绝大部分机子 上启动,从这个意义上来说,兼容性不错。
缺点也明显的:
1.PE内核一定要打包,会带来种种未知的兼容性问题,特别是NT5PE,ud如此,U+深度隐藏也是这个样子。两者都要加map =n参数解决。
2.因隐藏区不能被uefi识别引导,不管是UD还是U+深度隐藏,不能用于未来的uefi时候,也是这种深度隐藏PE的最大短板。这也决定了它只是bios下的 产物。
3.U+深度隐藏,如果grub做分区引导,目前来看,兼容性并不好,身边好多机子都引导不
了。
目前,准备根据H大的改进代码,推出一个支持U+V2深度隐藏的统一模块,大家来测试改进。如果再不改进,等bios机子再退休了,研究U+V2深度隐藏就没有多大意思了。
作者: 心运动    时间: 2013-5-4 16:02
支持U+B+高端隐藏加uefi双启动技术!!!
作者: zds1210    时间: 2013-5-4 16:08
chenall 发表于 2013-5-4 15:40
set /a pe=*393216
读出来的数据有可能是64位的,必须考虑这种情况.....

请C大帮助修正一下,我等菜菜有福了。
作者: hhh333    时间: 2013-5-4 16:22
zds1210 发表于 2013-5-4 16:08
请C大帮助修正一下,我等菜菜有福了。

看了下P大的代码用8个F值相与一下就可以截掉64位数据。
作者: zds1210    时间: 2013-5-4 16:30
本帖最后由 zds1210 于 2013-5-4 16:32 编辑
hhh333 发表于 2013-5-4 16:22
看了下P大的代码用8个F值相与一下就可以截掉64位数据。


我对grub代码不太通 ,都是抄人家用的,你帮我修正一下,我改天用下。
最好分老版本grub和新版本grub啊,分开写。
作者: 阿弥陀佛    时间: 2013-5-4 16:41
确实不能说是毫无意义。专业的维护人员还是多准备一些U盘和PE吧。
作者: David.Z    时间: 2013-5-4 16:59
哇…!这话题很火呀,紧随置顶帖。有要水的没?
作者: zhaohj    时间: 2013-5-4 17:07
本帖最后由 zhaohj 于 2013-5-5 15:00 编辑

grub4dos代码:
dd if=(hd0)96+1 of=(md)0x200+1 bs=1 count=8 skip=502
set /a pe=*0x40000&0xffffffff  && set /a ps=*0x40004&0xffffffff
map (128)%pe%+%ps% (17)
map --hook
rootnoverify (17)

#now you can load PE from (fd17)


作者: zds1210    时间: 2013-5-4 17:11
看来大家对这个U+隐藏还是很关心,建议 楼主把标题改一下,改成“再进一步研究”
作者: zds1210    时间: 2013-5-4 17:26
本帖最后由 zds1210 于 2013-5-4 17:28 编辑
zhaohj 发表于 2013-5-4 17:07
grub4dos代码:
dd if=(hd0)96+1 of=(md)0x200+1 bs=1 count=8 skip=502
set /a pe=*409600&0xffffffff   ...


用最新版的grub,测试失败。

作者: a102135    时间: 2013-5-4 17:36
玩量产还是挺不错的!
作者: hhh333    时间: 2013-5-4 21:20
刚才下掉一个硬盘,原来用不起的i3的机子可以用了。
作者: 风神    时间: 2013-5-4 22:08
拿铁不加糖 发表于 2013-5-4 12:51
U+高端隐藏支持UEFI启动,这才是他的亮点.

难道只有U+高端隐藏才支持支持UEFI启动,普通隐藏不行么
作者: zds1210    时间: 2013-5-4 22:10
风神 发表于 2013-5-4 22:08
难道只有U+高端隐藏才支持支持UEFI启动,普通隐藏不行么

U+不隐藏对uefi兼容性最好,其次是普通隐藏,再次是高端隐藏。稳定性及安全性相反。
作者: 风神    时间: 2013-5-4 22:16
zds1210 发表于 2013-5-4 22:10
U+不隐藏对uefi兼容性最好,其次是普通隐藏,再次是高端隐藏。稳定性及安全性相反。

不知普通隐藏与高端隐藏的区别
作者: 风神    时间: 2013-5-4 22:17
zds1210 发表于 2013-5-4 22:10
U+不隐藏对uefi兼容性最好,其次是普通隐藏,再次是高端隐藏。稳定性及安全性相反。

不知普通隐藏与高端隐藏的区别
作者: 风神    时间: 2013-5-4 22:18
zds1210 发表于 2013-5-4 22:10
U+不隐藏对uefi兼容性最好,其次是普通隐藏,再次是高端隐藏。稳定性及安全性相反。

不知普通隐藏与高端隐藏的区别
作者: 不点    时间: 2013-5-5 05:07
本帖最后由 不点 于 2013-5-5 05:51 编辑
zds1210 发表于 2013-5-4 17:26
用最新版的grub,测试失败。


这显示读软盘fd3时失败。需要确定失败原因。
首先,请用的 cat 命令确定原始的0x80盘,即你的U盘是可以正确读出的,
用cat读这个隐藏分区的第一扇区,然后再读第二扇区,等等,确定最大能读出的扇区数目。

怀疑分区的第一扇区读不出来。可能是因为分区太靠后了,超出了 bios 的访问能力。
如果确实是这样的,那应该重新设置隐藏分区的物理位置,让它位于盘的开头,便于bios 访问它。
这属于grub4dos 的普通问题,很多人都犯这样的错误。
不要试图让bios去访问大的扇区号码。否则,你自己会受到惩罚。调试起来,十分困难。出了问题,莫名其妙,找不到原因。

还有一个问题是,你怎么知道你的u盘一定是硬盘0x80呢?它也有可能被bios识别成软盘fd0啊。假如真的如此,你的代码就失效了。这又是一个很容易犯的普通错误,即,想当然地认为所有的bios都把这个u盘识别为硬盘。

以上两点仅仅是举例,说明很多应用程序的开发者不关心bios问题,因而受到bios的惩罚。自己弄的一头雾水,怀疑grub4dos有大毛病,要求grub4dos应该"改进"。

当然,grub4dos也有可能出问题。那样的话,我们找出bug,为grub4dos再一次作出贡献。
作者: hhh333    时间: 2013-5-5 07:54
不点 发表于 2013-5-5 05:07
这显示读软盘fd3时失败。需要确定失败原因。
首先,请用的 cat 命令确定原始的0x80盘,即你的U盘是可以 ...

不点老大说的对,我的NF3的机器只要一用U+隐藏,即使用HDD+,启动后就认定为zip,以上代码就更不行了。
作者: 不点    时间: 2013-5-5 08:17
hhh333 发表于 2013-5-5 07:54
不点老大说的对,我的NF3的机器只要一用U+隐藏,即使用HDD+,启动后就认定为zip,以上代码就更不行了。

这是小菜一碟,grub4dos 根本不怕识别为 zip 或 fd0 这件事。怕的是没有考虑这种情况,依旧认为 “这个 U 盘必定被 bios 认成 hd0”。

只要思维当中没有盲区、误区,就不会遇到实质的问题。办法总比问题多。这与 U+ 这种技术无关,与 UD 无关,与 syslinux 无关,与 grub4dos 无关。对于任何技术,遇到问题之后,都有解决问题的办法。办法是各种各样的。有的需要改进代码,有的仅仅需要改进使用的方式、方法。

U+、UD、syslinux、grub2、grub4dos,诸如此类,都是好软件,都是有用的软件。








作者: hhh333    时间: 2013-5-5 08:47
不点 发表于 2013-5-5 08:17
这是小菜一碟,grub4dos 根本不怕识别为 zip 或 fd0 这件事。怕的是没有考虑这种情况,依旧认为 “这个 U ...

刚才又试了一下,虽然在启动菜单中识别为ZIP,但启动后我查看了%?_BOOT%,还是(hd0,3),这就是说hdd+方式会固定为hd0,3,那么写成hd0就没有错。
作者: 不点    时间: 2013-5-5 08:55
hhh333 发表于 2013-5-5 08:47
刚才又试了一下,虽然在启动菜单中识别为ZIP,但启动后我查看了%?_BOOT%,还是(hd0,3),这就是说hdd+方式 ...

那还真不一定。

需要看 grldr 是被谁加载的。加载 grldr 的软件,能够决定启动盘是什么。如果加载 grldr 的软件没有正确设置 grldr 的启动设备,那就有可能出现意想不到的效果,启动设备可能是不准确的。


作者: zhaohj    时间: 2013-5-5 09:58
本帖最后由 zhaohj 于 2013-5-5 14:59 编辑

那把代码改一下,启动设备改成读0x8280的值
set /a boot=*0x8280&0xffffffff
dd if=(%boot%)96+1 of=(md)0x200+1 bs=1 count=8 skip=502
set /a pe=*0x40000&0xffffffff  && set /a ps=*0x40004&0xffffffff
map (%boot%)%pe%+%ps%  (17)
map --hook
rootnoverify (17)


作者: 不点    时间: 2013-5-5 10:34
我在 37 楼提到的问题也很关键:grldr 是被谁加载的?是谁最后直接启动了 grldr?

这是一个焦点。没准问题的症结就在此处:即,加载 grldr 的程序(或软件)没有设置正确的启动设备,比如说,假如它总是设置 hd0 为启动设备,那么这却不一定反映实际的 bios 的情况,导致后续一连串的错误。

我觉得这是最值得怀疑的地方了。所以,请一定注意 37 楼所提到的这个问题。


作者: hhh333    时间: 2013-5-5 11:03
本帖最后由 hhh333 于 2013-5-5 11:05 编辑
zhaohj 发表于 2013-5-5 09:58
那把代码改一下,启动设备改成读0x8280的值
set /a boot=*0x8280&0xffffffff
dd if=(%boot%)96+1 of=(md) ...


这句不对吧:set /a pe=*409600&0xffffffff  && set /a ps=*409604&0xffffffff
(md)0x200=(md)512而pe应该从512*512=262144=0x40000这个地方取值吧?

如果前面用0x200后面应该是:set /a pe=*262144&0xffffffff  && set /a ps=*262144&0xffffffff

P大原来的地址应该没什么问题,不用改吧。
作者: hhh333    时间: 2013-5-5 11:17
本帖最后由 hhh333 于 2013-5-5 11:19 编辑
不点 发表于 2013-5-5 10:34
我在 37 楼提到的问题也很关键:grldr 是被谁加载的?是谁最后直接启动了 grldr?

这是一个焦点。没准问 ...


我这台NF3的机器反正是有问题,目前U+只能用USBHDD+方式就能正确识别为HDD,其它的任何组合如V2或隐藏等,在BIOS启动顺序中都识别为ZIP,深度隐藏即使加代码也不行,syslinux干脆就来个boot error根本进不了。

但HDD+不隐藏不V2就一切OK。这个是不是不点老大讲的情况。
作者: 不点    时间: 2013-5-5 11:38
hhh333 发表于 2013-5-5 11:17
我这台NF3的机器反正是有问题,目前U+只能用USBHDD+方式就能正确识别为HDD,其它的任何组合如V2或隐藏等 ...

完全不是你说的那样。你只要能够启动 grldr,那就表明你没有遇到实质性的困难。

如果有实质性的困难,BIOS 故意设置障碍,让 dos、syslinux、ud、grub4dos 等无法进入,那么你根本就不能进入 grub4dos 的环境。

只要能够进入 grub4dos 的环境,那就说明,谢天谢地,这里没有根本性的问题,全都是可以解决的。虽然有某些问题,但那都属于小毛病,通过认真设置、完善,都是可以解决的。当然,前提是,你想去解决。如果你选择放弃,那当然就是无解了。


作者: David.Z    时间: 2013-5-5 12:09
哇!看贴长知识呀。虽然有些听不懂…
作者: Xongkoro    时间: 2013-5-5 14:09
于夜大一样“对u+隐藏无爱。。。。”
作者: zhaohj    时间: 2013-5-5 15:02
本帖最后由 zhaohj 于 2013-5-5 15:05 编辑
hhh333 发表于 2013-5-5 11:03
这句不对吧:set /a pe=*409600&0xffffffff  && set /a ps=*409604&0xffffffff
(md)0x200=(md)512而pe ...


抱歉,确实换算错误了。
我还是改成16进制,看着明白多了。
grub4dos没有说(md)768的地址段是给用户使用的,改成0x40000~0x44fff空间保险一点。
作者: hhh333    时间: 2013-5-5 15:24
zhaohj 发表于 2013-5-5 15:02
抱歉,确实换算错误了。
我还是改成16进制,看着明白多了。
grub4dos没有说(md)768的地址段是给用户使 ...

16进制确实直观多了,我现在将grldr的默认菜单改成如下形式:
  1. pxe detect
  2. configfile
  3. default 0
  4. timeout 1

  5. title find /menu.lst, /boot/grub/menu.lst, /grub/menu.lst
  6.         errorcheck off
  7.         configfile /boot/grub/menu.lst
  8.         configfile /grub/menu.lst
  9.         if "%@root%"=="(ud)" && calc *0x82A0=*0x82b9&0xff
  10.         if "%@root:~1,1%"=="f" && find --set-root --devices=f /menu.lst && configfile /menu.lst
  11.         find --set-root --ignore-floppies --ignore-cd /menu.lst && configfile /menu.lst
  12.         find --set-root --ignore-floppies --ignore-cd /boot/grub/menu.lst && configfile /boot/grub/menu.lst
  13.         find --set-root --ignore-floppies --ignore-cd /grub/menu.lst && configfile /grub/menu.lst

  14.         #----U+DEEPHIDE----
  15.         set /a boot=*0x8280&0xffffffff
  16.         dd if=(%boot%)96+1 of=(md)0x200+1 bs=1 count=8 skip=502
  17.         set /a pe=*0x40000&0xffffffff  && set /a ps=*0x40004&0xffffffff
  18.         map (%boot%)%pe%+%ps% (fd3)
  19.         map --hook
  20.         set pe= && set ps= && set boot=
  21.         rootnoverify (fd3) && configfile /menu.lst

  22.         errorcheck on
  23.         commandline

  24. title commandline
  25.         commandline

  26. title reboot
  27.         reboot

  28. title halt
  29.         halt
复制代码
应该没什么问题吧?
作者: 不点    时间: 2013-5-5 16:37
本帖最后由 不点 于 2013-5-5 17:12 编辑

46 楼的菜单代码,确实完善了不少。我粗略看过之后,没发现问题。

但正如前面解释的,最关键的焦点在于,grldr 是谁启动的,grldr 被启动的时候,需要设置正确的启动盘到 DL 寄存器。如果没有正确设置,那么启动盘的盘号就可能是错的,即,0x8280 处的值并非表示真正的、由 BIOS 所给予的 U 盘的盘号。那么,上述经过诸位辛辛苦苦好不容易完善了的菜单,也就 “无用武之地” 了。

再补充一点。

按照传统 dos 的规范,启动盘只有两种可能:软盘 0x00 和 硬盘 0x80。

所以,为了能够容错起见,诸位也可以继续完善菜单。

比如说,首先假定 U 盘是 0x80,然后去读 0x80 的扇区内容。当发现 0x80 符合 U+ 深度隐藏的特征的时候,就放心地把 0x80 强制设置为启动盘(即 boot 盘)和 当前工作盘(即 root 盘)。

否则,当 0x80 不是 U 盘的时候,此时 U 盘一定是软盘 fd0 了。由于你事先已经知道,启动盘必定是 U 盘,所以,当 0x80 不是 U 盘的时候,0x00 就一定是 U 盘。光盘启动以及 USB-CDROM 启动的情况,启动盘的盘号在 0x81 至 0xFF 之间变动,此处不讨论它们。

确定了启动盘是软盘 fd0 之后,同样地,可以强制把启动盘和当前工作盘都设置为软盘 fd0。

以上这段讨论,是假定没有 USB-CDROM 参与启动的情况。如果有 USB-CDROM 参与启动,那么情况会复杂一些。请诸位自己分析那样的场景。


作者: zds1210    时间: 2013-5-5 18:36
弱弱的说一句,下载P大的最新OPE,不解开部署到U+V2-zip深度隐藏,外置加载成功。相当牛。实测对新版grub的深度隐藏代码相当成功。其核心代码如下:

dd if=(hd0)96+1 of=(md)768+1 bs=1 count=8 skip=502
set /a pe=*393216&4294967295 && set /a ps=*393220&4294967295
write 393216 0
write 393220 0
map (128)%pe%+%ps% (17)
map --hook
set pe= && set ps=
set eb=17
rootnoverify (17)
希望大家在最新版grub中更新这段代码,再来说兼容性。
还有两点问题:
1.
write 393216 0
write 393220 0
2.set eb=17
这三句起什么作用,如果精简了行吧?


作者: hhh333    时间: 2013-5-5 19:39
本帖最后由 hhh333 于 2013-5-5 19:46 编辑
不点 发表于 2013-5-5 16:37
46 楼的菜单代码,确实完善了不少。我粗略看过之后,没发现问题。

但正如前面解释的,最关键的焦点在于, ...


usbcdrom可以不考虑,因为这个不是U+产生的。U+的U盘我看到的都是hd0,3。
另外,上面这行       rootnoverify (fd3) && configfile /menu.lst
应该可以改成          rootnoverify (fd3) && configfile          更简洁一点




作者: 糊涂    时间: 2013-5-6 08:00
本帖最后由 糊涂 于 2013-5-6 08:10 编辑
hhh333 发表于 2013-5-5 11:17
我这台NF3的机器反正是有问题,目前U+只能用USBHDD+方式就能正确识别为HDD,其它的任何组合如V2或隐藏等 ...


NF3及K8类的板子是一批较特殊的板子

除了这些板子,其他大部分加载U+V2没问题

希望老师们找到解决这个问题的方案
作者: zds1210    时间: 2013-5-6 13:24
糊涂 发表于 2013-5-6 08:00
NF3及K8类的板子是一批较特殊的板子

除了这些板子,其他大部分加载U+V2没问题

这个应该是UI官方升级考虑的问题,大家可以发帖子到它的官方论坛去。
作者: 讯极天度    时间: 2013-5-6 16:48
阿弥陀佛 发表于 2013-5-4 16:41
确实不能说是毫无意义。专业的维护人员还是多准备一些U盘和PE吧。

对头,多做几个U,爱咋咋滴!
作者: 讯极天度    时间: 2013-5-6 16:50
hhh333 发表于 2013-5-4 21:20
刚才下掉一个硬盘,原来用不起的i3的机子可以用了。

您的意思是说双硬盘U+深度不能启动吗?

如果是的话,那么在我的机器上爽硬盘是可以启动!

如果我理解错了,请无视啦!
作者: zds1210    时间: 2013-5-6 16:51
也不能说U+深度隐藏的兼容性不好。如果大家用easyboot做分区引导,估计出不了菜单的机子就没有几个了。本来要上传一个U+深度隐藏模式给大家测试,包括老版和新版本的grub,但又要出差了,过段时间吧。
作者: hhh333    时间: 2013-5-6 17:06
讯极天度 发表于 2013-5-6 16:50
您的意思是说双硬盘U+深度不能启动吗?

如果是的话,那么在我的机器上爽硬盘是可以启动!

可能是我的那块硬盘有问题,已经带病在坚持工作,前次弄了一个1.5T的盘,原盘了没有卸下来,现在干脆干掉算了。
作者: hhh333    时间: 2013-5-6 17:11
zds1210 发表于 2013-5-6 16:51
也不能说U+深度隐藏的兼容性不好。如果大家用easyboot做分区引导,估计出不了菜单的机子就没有几个了。本来 ...

出菜单是一回事,其他的工具等能够不出问题地使用才是硬道理。有一般隐藏和高端隐藏就够了,我想绝大多数人不会用这个来做U盘维护。对于比较大的ISO做整体启动也不一定好。离开了整体启动,这种方式真的是我标题说的了。

不过做一下技术探讨与研究是可以的。
作者: hhh333    时间: 2013-5-6 17:16
zds1210 发表于 2013-5-6 13:24
这个应该是UI官方升级考虑的问题,大家可以发帖子到它的官方论坛去。

大家应该没听说过,不隐藏来不了,隐藏后可以来的机器吧?而反之已经有一批实例的机子了,你觉得谁的兼容性更强呢。

我想UI官方也不存在什么再升级让这些板子可以来,你不隐藏已经没有问题了,那你就不隐藏嘛!
作者: zds1210    时间: 2013-5-6 17:40
hhh333 发表于 2013-5-6 17:11
出菜单是一回事,其他的工具等能够不出问题地使用才是硬道理。有一般隐藏和高端隐藏就够了,我想绝大多数 ...

外置打包,直接map,不算整体启动吧。
easyboot菜单运行 PE和dos工具并没有问题。
作者: hhh333    时间: 2013-5-6 20:10
zds1210 发表于 2013-5-6 17:40
外置打包,直接map,不算整体启动吧。
easyboot菜单运行 PE和dos工具并没有问题。

我确实有点纳闷,为什么非得深度隐藏,明显降低了兼容性并且有其他隐藏方式也可以保护文件,我真的不知道它的优势在什么地方。

作者: xyxb    时间: 2013-5-7 08:20
一直使用
作者: zds1210    时间: 2013-5-14 01:12
本帖最后由 zds1210 于 2013-5-14 01:15 编辑

最近测试一批原来不能U+深度隐藏的机子,居然最后通过了,发现如下规则:
1.要出grub菜单,一定要从bios里把软驱关闭,否则有一部分机子可能不能出grub菜单,从而卡起。
2.把17改为fd3后,不知道有没有作用,兼容性会不会提高,没有对比。因为测试都是把软驱关闭和改成fd3两个改进一起的,才成功,不知道是哪个起作用,改天测试看看。
3.bios下实际软驱不超过四个,在grub4dos等dos下只能AB两软驱,所以,深度隐藏后,隐藏区映射为一个软盘,已经占一个了,外置串口驱动只能用dpms,因它只模拟出一个盘;像饭大的srs就不能用了,它模拟了两个盘,所以,加载串口硬盘失败。
4.深度隐藏后,U盘加速失效,无法返回主菜单,原因不知。
5.不同grub版本代码似乎不同,所以,出问题,也可能是代码与grub版本不配引导的。不同版本的grub,代码要怎么写,希望P大说出一个规则来。
作者: 不点    时间: 2013-5-14 02:19
zds1210 发表于 2013-5-14 01:12
最近测试一批原来不能U+深度隐藏的机子,居然最后通过了,发现如下规则:
1.要出grub菜单,一定要从bios里 ...

错误的菜单命令,导致死机或长时间无响应(即“假死”),是已知的常见错误。

如果菜单健壮,基本上是不会出现 “不出菜单” 的情况的。

你的菜单一定有访问 fd0 的步骤。去掉那些有可能访问 fd0 的语句或命令,这个问题即可彻底解决。


作者: zds1210    时间: 2013-5-14 02:26
不点 发表于 2013-5-14 02:19
错误的菜单命令,导致死机或长时间无响应(即“假死”),是已知的常见错误。

如果菜单健壮,基本上是 ...

能不能说详细一些,哪些命令是?
作者: 不点    时间: 2013-5-14 03:25
哪些命令读软盘,你自己应该也知道啊。比如,find 命令就可能读软盘,它要在软盘上找文件。

如果你用 ls 之类的命令访问 (fd0)/ ,那不就是要读软盘吗?


作者: zds1210    时间: 2013-5-14 07:34
find --set-root,如果忽略软盘,就好了吧?
作者: 不点    时间: 2013-5-14 09:16
zds1210 发表于 2013-5-14 07:34
find --set-root,如果忽略软盘,就好了吧?

最好连光盘一起忽略,只访问硬盘,安全系数就比较高了。

你可以考虑如下的思路:grub4dos 公开发布的内置菜单,那是带有一般性的,应该适应于所有的硬件,至少可以说,是适应性比较高的。你研究一下内置菜单为什么要那样写,为什么要带那样的参数,就可以发现一些秘密。那个内置菜单不是随便改改就行了的。它的秘密就在于,能够适应于所有的 BIOS 环境。否则的话,早就有人来报告 bug 了。为什么 pseudo 的系统不出现这样那样一些看似稀奇古怪的问题?那是因为,pseudo 紧跟 grub4dos 内核的开发,把已经暴露出来的问题都做了处理。据我观察,pseudo 与 grub4dos 的开发者一样,是战战兢兢在做启动,是严肃认真在做启动,是一丝不苟在做启动。对每一个菜单命令都要仔细推敲,并反问自己:“这样做好吗?这样做安全吗?有没有更好的做法?” 工作做到这种程度,想让它垮掉都难。
作者: zds1210    时间: 2013-5-14 11:13
本帖最后由 zds1210 于 2013-5-14 11:16 编辑
不点 发表于 2013-5-14 09:16
最好连光盘一起忽略,只访问硬盘,安全系数就比较高了。

你可以考虑如下的思路:grub4dos 公开发布的内 ...


出现哪些问题,是深度隐藏才出现,其它部署都很正常人,似乎并无什么问题。杏大的内置菜单及外置菜单一直都是这个样子,我在其它部署中也没有发现问题,就是深度隐藏后有问题,关闭掉软驱和17改成fd3正常了。
作者: 不点    时间: 2013-5-14 11:21
zds1210 发表于 2013-5-14 11:13
出现哪些问题,是深度隐藏才出现,其它部署都很正常人,似乎并无什么问题。杏大的内置菜单及外置菜单一 ...

只略微提醒一下,别的不多说。你关掉软驱正常了。这事就完了吗?别人没关掉软驱的,怎么办?你是不是打算一一告知他们,让他们都关掉软驱?


作者: zds1210    时间: 2013-5-14 11:39
不点 发表于 2013-5-14 11:21
只略微提醒一下,别的不多说。你关掉软驱正常了。这事就完了吗?别人没关掉软驱的,怎么办?你是不是打算 ...

好的,grub方面不是太了解,都是抄人家的脚本,套用了。谢谢大师的指点,小的感觉非常高兴,有大师的指点,我们才能慢慢进步。
准备做一个详细的测试,看一下是什么原因?
是17代码要改为fd3?bios规范下只能四个软驱
是因为找了软驱,而死机?
还是一定要关软驱,dos只能两个软驱。
要准备一个详细的测试,回来给各位太太报告一下。
作者: 不点    时间: 2013-5-14 11:46
zds1210 发表于 2013-5-14 11:39
好的,grub方面不是太了解,都是抄人家的脚本,套用了。谢谢大师的指点,小的感觉非常高兴,有大师的指点 ...

话不能这么说。我也只是了解一星半点的知识,而且不一定都对。不是谁指点谁的问题,而是互相交流、互相了解的问题。论坛这个平台很重要,其重要性就在于,这是交流的平台。都是来学习的,都是同学。
作者: zds1210    时间: 2013-5-14 21:43
不点 发表于 2013-5-14 11:46
话不能这么说。我也只是了解一星半点的知识,而且不一定都对。不是谁指点谁的问题,而是互相交流、互相了 ...


谢谢大师指点,今晚全面测试,问题所在找到了,原来内置菜单grldr中find set root忽略软驱查找,原来在bios中不关闭软驱就深度隐藏后出不了菜单的情况,现在不关闭也可以出菜单了。
还有几个问题;
1.内置菜单中find set root忽略软驱查找,,外置菜单中是否要忽略软驱查找?
2内置菜单中ls (fd3),这句是否会查找软驱,要不要关闭?
3.外部命令前要不要加command,如command dpms,加与不加有什么不同?
谢谢大师指点,经过 这次教训后,还是要好好看一下内置菜单,按内置菜单来定制一下。其它PE高手的修正并不一定是正确的
作者: 不点    时间: 2013-5-14 22:10
1、 内置菜单中find set root忽略软驱查找,,外置菜单中是否要忽略软驱查找?

首先得明白,为什么要忽略软驱?那是因为,在某些有 bug 的 BIOS 下,一旦访问软驱,就出现死机或假死。你想啊,在那样的 BIOS 之下,这软驱是不敢碰的,一碰就死机或长时间无响应了。所以,无论内置菜单还是外置菜单,或者是手动敲入命令,都同样不敢访问软驱。此处所说的软驱,仅仅是指 BIOS 赋予的 fd0 软驱。用户自己虚拟出来的软驱,不在此列。因为用户自己虚拟出来的软驱,是完全可以访问的介质,比如,它实际上是硬盘上的一个 IMG 文件。如果介质不可访问,那根本就不能成功虚拟出来。所以,虚拟出来之后,一般就是可以访问的了。并非所有的 BIOS 都有这毛病。有的 BIOS 很健壮,没有这类五花八门的死机、假死的毛病,因此,在那些 “好” 的 BIOS 下,你访问软驱就没问题。

2、 内置菜单中ls (fd3),这句是否会查找软驱,要不要关闭?

刚才解释了,这是你自己虚拟出来的软驱,你完全可以访问它。它不是 BIOS 制造出来的虚假软驱。BIOS 由于某种原因(故意的,或者是 bug)制造出来一个虚假的软驱,一访问它就死机。你想啊,一访问就死机的设备,那肯定不是真正的软驱。它是一个虚假的软驱。是 bug ?还是故意弄出来的?此处不多讨论了。

3、 外部命令前要不要加command,如command dpms,加与不加有什么不同?

加不加 command,都能执行外部命令。如果你有一个外部命令,正好与某个内部命令是一样的名字,而你又不希望运行内部命令,那么,你肯定得加上 command 才行。否则的话,内部命令就抢先执行了。

加上 command 之后,整个命令被认为是 “启动敏感的”。
不加上 command ,整个命令被认为是 “启动不敏感的”。
作者: zds1210    时间: 2013-5-15 00:42
谢谢不点,看来内置菜单还是不要乱改为好,紧急修正内置菜单后,好像也解决了U+深度隐藏后U盘加速后卡死的问题。。
作者: 不点    时间: 2013-5-15 09:18
zds1210 发表于 2013-5-15 00:42
谢谢不点,看来内置菜单还是不要乱改为好,紧急修正内置菜单后,好像也解决了U+深度隐藏后U盘加速后卡死的问 ...

我以前说过,只要能够进入 grub4dos 的环境,即,只要 grldr 能够被启动,问题都不严重,所有的问题都可以通过调整设置而获得解决。真正无法解决的问题是,当你根本不能启动 GRLDR 的时候。

新版 grub4dos 还特别显示一条信息如下:

Running menu commands(hangup means you have a problematic config)...

只要能显示这条信息,就证明 GRLDR 成功获得了控制。如果在此处死机,那就证明,是菜单的错误引起的,几乎可以说是毫无疑问的。

这条信息是强制显示的,也是一种努力来帮助用户自己排查错误。开发者本来就应该替用户着想,减少用户发生错误的几率,而当真正的错误发生时,又能提醒用户,让用户知道大致的原因在哪里。

有些人千方百计地想去掉这些调试信息,以为那样就“干净”了。殊不知,开发者不会吃饱了撑的,添加一些无用的信息。
作者: zds1210    时间: 2013-5-15 19:00
通过菜单的改进,U+对grub的兼容性又增强了不少,实测和UD兼容性差不多。加上U+对easyboot的兼容性刚刚的,楼主说U+深度隐藏无意思,这个说法行不通。
作者: hhh333    时间: 2013-5-16 18:04
本帖最后由 hhh333 于 2013-5-17 11:13 编辑
zds1210 发表于 2013-5-15 19:00
通过菜单的改进,U+对grub的兼容性又增强了不少,实测和UD兼容性差不多。加上U+对easyboot的兼容性刚刚的, ...


我不是说隐藏无用,而是认为深度隐藏相对于高端隐藏或者隐藏似乎确实没什么用。如果LS能够证明,有的时候只有深度隐藏能够用,而另外两种不能用,则我的无用说就显然说不过去了;而相反的情况确实又有许多,因此我的无用说就成立了。深度隐藏有点搬起石头砸自己的脚的味道。况且,在Windows下,这个深度隐藏区是一个自由空间,跟其他的自由空间也不好区分,很容易被误删格式化。
作者: 风神    时间: 2013-5-17 09:05
普通隐藏就很好了
作者: zds1210    时间: 2013-11-30 18:56
本帖最后由 zds1210 于 2013-11-30 18:59 编辑

这个帖子很有意义,经过大师们的指点,我的U+深度隐藏PE兼容性提高了不少,基本上UD能启动,我的U+深度隐藏也能启动;有时候UD启动不了(估计没有加chs),U+深度隐藏刚刚的
最新发现在新老版uI在深度隐藏的问题:9.5版能bootpart能挂载usb-hdd+v2深度隐藏区,但挂载不了zip深度隐藏;
9.6新版刚好相反,能挂载zip深度隐藏,不能挂载hdd深度隐藏。问题不是出在bootpart上,而是在U+隐藏的写入下。只有等官方升级修正了。
现在我制作了一个UI新老便捷合体版,暂解决了问题,usb-hdd+v2深度隐藏区用老版制作,zip深度隐藏及其它隐藏用 新版制作,实测同一PE
挂载外置成功。
准备更新我的支持U+深度隐藏的PE,同时出一个教程,让大家合理的玩U+深度隐藏zip或hdd,目前感觉这样子比较完美了。哈哈。这个教程,对于p大的ope也是适用的。
作者: shan    时间: 2013-12-3 01:23
hhh333 发表于 2013-5-6 17:16
大家应该没听说过,不隐藏来不了,隐藏后可以来的机器吧?而反之已经有一批实例的机子了,你觉得谁的兼容 ...

很有道理,兼容性高于一切才是硬道理!
作者: mdyblog    时间: 2014-3-16 11:34
本帖最后由 mdyblog 于 2014-3-29 12:49 编辑
Cracada 发表于 2013-5-4 11:05
U+深度隐藏区感觉类似于UD扩展区,但U+启动的兼容性貌似低于UD
我用一块U盘,一块SD卡反复测试了+隐藏/高 ...


新的 UD+(MBROS) 已经支持你的要求 , UD区同时可一般隐藏或不隐藏。
还支持GPT分区。此时是默认只读+一般隐藏。更安全了。
作者: 2012wzc332    时间: 2014-3-19 18:44
UD对老一点的机子,成功率较高。
作者: 2011aaaaa0808    时间: 2014-4-8 18:39
从来不隐藏,最多对iso进行碎片整理
作者: shinobiyan    时间: 2014-7-21 18:02
提示: 作者被禁止或删除 内容自动屏蔽
作者: 不点    时间: 2014-7-21 19:27
主要是身体不好,不能写博客。QQ 从来都没使用过。抱歉让您失望。我的大部分发言,都在时空论坛和无忧启动论坛。时空论坛不能访问了,很可惜。不过,无忧论坛也可以找到我。

我已经退出 grub4dos 的开发和维护。目前由 chenall 负责维护,而且 chenall 有自己的博客,很好。bean,Roy 和 yaya 以及其他许多技术强人都曾经或正在协助 chenall。有问题就问他们吧。


作者: zds1210    时间: 2014-10-30 22:22
本帖最后由 zds1210 于 2014-10-30 22:29 编辑

支持UEFI的U+深度隐藏三分区法和分区表项法已经创立成功了,bios/uefi双启成功了。
和UD三分区法一样,U深三分区法充分利用了U盘前端bios启动兼容性好,U盘高端隐藏uefi启动兼容性好
作者: zds1210    时间: 2014-11-1 11:12
U深三分区法测试成功,兼容bios/uefi。用事实来证明U+深度隐藏还是有意思的。
偶喜欢新玩法。
http://bbs.wuyou.net/forum.php?m ... &extra=page%3D1
作者: JCDN    时间: 2016-8-2 11:13
学习


作者: JCDN    时间: 2016-8-12 14:03
此帖可仔细读一下,值得学习
作者: 红毛樱木    时间: 2016-10-9 16:42
试了下这种方式,BOOTMGR访问不了这个分区,不能直接用BOOTMGR启动NT6.X的PE
作者: cbl    时间: 2020-2-23 11:06





欢迎光临 无忧启动论坛 (http://bbs.c3.wuyou.net/) Powered by Discuz! X3.3