|
本帖最后由 hhh333 于 2013-5-4 10:23 编辑
P大和Z版对这种方式似乎很推崇,近期也拜读了他们的大作,作了一些试验,U+了不知道多少次,经验当然要分享!这里主要讨论U+深度隐藏。因牵涉到grldr,因此还是发在这个区。
1、首先看一下U+的几种隐藏方式有什么特点
(这里讲不能找到外置当然是指不额外使用隐藏区挂载工具时的情况)
深度隐藏是没有分区信息的(或者说分区表被移动了),因此会产生严重的问题:
①EZB和Syslinux可以出菜单,但PE1.x启动时会提示ntdetect错误,PE3/4会提示BCD错误,实际就是说setupldr和bootmgr等根本不认这个没有分区信息的分区;
②grldr不经过处理也不能读取这个分区的文件,当然也不能启动;
目前,这种隐藏方式下用EZB和syslinux可以启动DOS映象和Slitaz Linux。
2、对grldr进行一些改造
这是pseudo解决这个问题的思路:- 1、找到隐藏分区的分区表项信息(第97扇区末)
- 2、解析分区表项,得到分区起始扇区、总扇区数等信息
- 3、将隐藏区映射为一个虚拟软盘
- 4、直接访问虚拟软盘上的文件,启动PE
- 核心grub4dos代码:
- dd if=(hd0)96+1 of=(md)768+1 bs=1 count=8 skip=502
- set /a pe=*393216 && set /a ps=*393220
- map (128)%pe%+%ps% (17)
- map --hook
- rootnoverify (17)
- #now you can load PE from (fd17)
复制代码 根据这个意思,我对grldr的默认菜单进行了改写:- pxe detect
- configfile
- default 0
- timeout 1
- title find /menu.lst, /boot/grub/menu.lst, /grub/menu.lst
- errorcheck off
- configfile /boot/grub/menu.lst
- configfile /grub/menu.lst
- if "%@root%"=="(ud)" && calc *0x82A0=*0x82b9&0xff
- dd if=(hd0)96+1 of=(md)768+1 bs=1 count=8 skip=502
- set /a pe=*393216 && set /a ps=*393220
- map (hd0)%pe%+%ps% (fd3)
- map --hook
- rootnoverify (fd3)
- if "%@root:~1,1%"=="f" && find --set-root --devices=f /menu.lst && configfile /menu.lst
- find --set-root --ignore-floppies --ignore-cd /menu.lst && configfile /menu.lst
- find --set-root --ignore-floppies --ignore-cd /boot/grub/menu.lst && configfile /boot/grub/menu.lst
- find --set-root --ignore-floppies --ignore-cd /grub/menu.lst && configfile /grub/menu.lst
- errorcheck on
- commandline
- title commandline
- commandline
- title reboot
- reboot
- title halt
- 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,前者对付新机,后者对付老机;
以上观点当否,请大家发表意见!
|
|