无忧启动论坛

标题: 更新:制作显隐藏分区功能的软盘镜像文件工具,真正启动隐藏分区里的操作系统 [打印本页]

作者: turboy    时间: 2005-8-26 11:57
标题: 更新:制作显隐藏分区功能的软盘镜像文件工具,真正启动隐藏分区里的操作系统
[这个贴子最后由turboy在 2006/01/19 10:45pm 第 9 次编辑]

【程序的历史】
  这帖子最早发在DOS联盟论坛上,后来无忧的 hnlyzhd 版主转了过来。http://bbs.wuyou.net/cgi-bin/top ... topic=10153&show=75
  原因是这样的:我曾帮一个卖电脑的朋友做过类似一键恢复的程序,就是用WBAT等批处理工具来包装Ghost,把备份保存在最后一个分区的\SYSBCK目录下,备份和恢复一次只要几分钟。我给他演示的时候效果还不错,但不久他就沮丧地告诉我:“客户在F盘发现了一个隐藏的大文件夹,里面的文件双击又不能打开,就当垃圾文件删掉了!”--我真是欲哭无泪!我已经作了隐藏,用户手册上也写了,但客户还是会自作聪明地去删掉它--看来客户的问题的确是千奇百怪。后来我想能否有这样一种方法,就是划出一个分区来单独保存系统备份,在备份完成后将此分区隐藏。这样客户的操作系统启动后怎么也看不到备份盘了,这就避免了备份被删除的尴尬。用我们的系统恢复盘启动时,这个备份分区又可见了,一切就和没有隐藏一样,可以恢复也可以更新备份。这样不就方便、安全多了。当时我把这个想法放在论坛里给大家讨论。http://www.cn-dos.net/forum/viewthread.php?tid=12660&fpage=1
  事隔一年了,一直没人写类似的程序,只好自己来写。由于我对DOS的细节还是不清楚,就写个引导程序来做了。自己努力了一阵子终于有了结果,在Bochs-2.1.1和VMWare以及我管理的二十多台清华同方P4电脑里测试通过,能够欺骗DOS在启动后为11、14、16、1B和1C、1E格式的隐藏分区分配盘符。
【程序说明】
  这是一个用来引导系统备份/恢复光盘的程序,将会放在启动软盘镜像的第一个扇区内。此程序引导系统时,出现一个提示,用户可选择按任意键启动工具软盘,也可以在等待8秒后引导硬盘上的操作系统。在选择由工具软盘启动DOS后,在MBR中隐藏的主分区将会分配盘符变得可见,这就可以用常规工具来做备份了!如果不用这个工具启动,这些备份分区就不可见,这样普通用户就无法删除备份数据了。
[UploadFile=yrt1_1125109743.jpg]
[UploadFile=yrt2_1125109806.jpg]
[UploadFile=yrt3_1125109867.jpg]
注意:上面的截图是7月23日版的,只支持FAT32隐藏分区(1B/1C),8月23日版本已经可支持FAT32/FAT16所有(01-11,04-14,06-16,07-17,0B-1B,0C-1C,0E-1E)分区类型了。
【使用方法】
  1. 在硬盘上划分出一个新的主分区(FAT16/FAT32类型),可用PQMAGIC或GDISK来做(微软的FDISK不允许创建两个主分区)。通常这个新的主分区在启动后会被分配为最后一个盘符——这可供做备份工具的朋友们参考。
  2. 用PQMAGIC或GDISK将这个新建的主分区隐藏,达到DOS正常启动后无法看到的目的。
  3. 准备一个1.44M启动软盘的镜像文件,如DOS.IMG。要确保此镜像可以启动DOS。
  4. 运行我提供的MAKEIMG.EXE制作出具备可以显隐藏分区功能的启动盘镜像NEWDOS.IMG,命令如下:
    MAKEIMG  DOS.IMG  NEWDOS.IMG
  5. 将生成的NEWDOS.IMG写入软盘或作为光盘的启动镜像或在虚拟机中直接启动,就可以看到那个被隐藏的主分区已经被分配了盘符。余下的就是向里面复制软件、备份数据等自己的事儿了。
【查找此分区的方法建议】
  方法一:在备份分区的根目录下建一个特殊名字的文件,然后用IF EXIST 命令来判断。
  方法二:用GDISK 1 /STATUS来得到分区状态,然后用程序分析。
【特别提醒】
  我保证程序中没有写硬盘MBR的代码,可是难保一切意外的发生,最好用没保存重要数据的真实硬盘测试通过后正式使用!
【目前最新版本:2008年10月21日编译】
  HFBOOT.ASM还是9月1日的,MAKEIMG.EXE在9月5日新增选项后编译
  hnlyzhd版主所提出启动安装在隐藏分区内的操作系统的功能现在终于真正实现了,新程序在启动时出现的8秒等待中如果按了F7键(或自定义的键),则会从第一个隐藏主分区启动,此盘分配为C:。目前我只测试了DOS7.1(Win98启动盘),我想应该也能启动WIN98。WinXP启动后会将隐藏分区变成非隐藏,用硬盘重启后仍是可显示的,肯定时WinXP在什么时候更新过MBR。LINUX没有试。
  目前使用本程序启动后,可以成功令DOS为隐藏分区分配盘符。
  在MS-FDISK、FREE-FDISK、AEFDISK、PQMAGIC、Acronis Disk Editor等大多数程序中隐藏分区都会以正常分区显示,但GDISK却可以看出此分区为隐藏分区,GDISK一定有超越BIOS中断的独特存取硬盘方法。
  crshen朋友帮我发现了几处严重的BUG,这些BUG由于DOS启动时根本没有用到所以我以前没发现。
  新加入一个功能ESC键:可以不加载本程序,正常从硬盘盘启动,。
  新加入一个功能F5键:可以不加载本程序,正常从软盘盘启动,用于需要正确查看实际分区时。
  MAKEIMG.EXE的命令行选项可以忽略大小写了。
  新的命令行如下:
  MAKEIMG  源镜像文件名  [目的镜像文件名] [选项]
   源镜像文件名  用来制作显隐藏分区功能的软盘镜像文件
   目的镜像文件名 将要生成的带显隐藏分区功能的软盘镜像文件,可省略,默认值为YISIR.IMG
  可选参数:
   /f       生成的程序在计算机启动时直接从软盘启动。
   /b       生成的程序在计算机启动时直接激活隐藏分区并启动。(注意隐藏分区中必须已安装了操作系统,此功能也未写MBR)
  无 /f 和 /b 参数时将出现提示并等待8秒,这期间按任意键从软盘启动,否则从硬盘启动且不加载显隐藏分区功能。
   /k:n      n=1-4,6-12。设置直接激活隐藏分区并启动时用的按键,可以是F1-F4、F6-F12
     /p:nn=0 - 255 ,自定义构成进度条的字符,默认是62即“>”,象219(实心方块)、220、223也挺好看
     /r:nn=1 - 24 ,自定义提示信息的在屏幕中的开始行,默认是21行,即在21行显示提示,22行显示进度条。
   /u       卸载本程序,将由本程序生成的镜像文件还原,结果保存成一个镜像文件。
希望下载和使用了这个软件的朋友跟帖或到我的小站留言谈一下看法。
2008年10月31日
  应天风、紫狐的要求又翻出源程序来,加上了对0x12->0x0c分区的映射。MAKEIMG.EXE现在是用VC6编译的Windows控制台程序了。
这里是最新的软件: BootHide.rar (30.53 KB, 下载次数: 439)
20050905的版本在这里[UploadFile=boothide060119_1137658632.zip]
新加入一个配套程序UNLOAD.COM,用于还原程序所修改的INT13中断为系统原值。
[UploadFile=screen_1137681571.gif]

[ 本帖最后由 turboy 于 2008-10-31 15:59 编辑 ]

BootHide.rar

30.53 KB, 下载次数: 482, 下载积分: 无忧币 -2

BootHide Build20081021


作者: wang6610    时间: 2005-8-26 15:02
标题: 更新:制作显隐藏分区功能的软盘镜像文件工具,真正启动隐藏分区里的操作系统
好东东谢谢楼主提供!
作者: 斯文败类07    时间: 2005-8-26 20:29
标题: 更新:制作显隐藏分区功能的软盘镜像文件工具,真正启动隐藏分区里的操作系统
不错,真是好东西啊
作者: cqcbc    时间: 2005-8-26 20:55
标题: 更新:制作显隐藏分区功能的软盘镜像文件工具,真正启动隐藏分区里的操作系统
不错,我正需要呢..
作者: jrws520    时间: 2005-8-26 20:59
标题: 更新:制作显隐藏分区功能的软盘镜像文件工具,真正启动隐藏分区里的操作系统
好东西!
作者: ning    时间: 2005-8-26 21:38
标题: 更新:制作显隐藏分区功能的软盘镜像文件工具,真正启动隐藏分区里的操作系统
学习,试用
作者: 赌东道    时间: 2005-8-26 23:50
标题: 更新:制作显隐藏分区功能的软盘镜像文件工具,真正启动隐藏分区里的操作系统
下了一个.楼主辛苦.
作者: jssyq    时间: 2005-8-27 09:47
标题: 更新:制作显隐藏分区功能的软盘镜像文件工具,真正启动隐藏分区里的操作系统
楼主功力厉害,不服不行
作者: szy106    时间: 2005-8-27 11:46
标题: 更新:制作显隐藏分区功能的软盘镜像文件工具,真正启动隐藏分区里的操作系统
强人!学习收藏ing
作者: turboy    时间: 2005-8-29 00:18
标题: 更新:制作显隐藏分区功能的软盘镜像文件工具,真正启动隐藏分区里的操作系统
[这个贴子最后由turboy在 2005/09/02 02:43am 第 1 次编辑]

8月28日最新更新:实现了启动安装在隐藏分区内的操作系统
  我和hnlyzhd版主交流时他提出个建议:能否启动安装在隐藏分区内的操作系统。
  现在实现了,新程序在启动时出现的8秒等待中如果按了F7键(我用BOCHS调试的,它不准我用F11、F12),则会从第一个隐藏主分区启动,此盘分配为C:。
  目前我只测试了DOS7.1,不知道能不能启动WIN98。但WIN2K和XP或LINUX不用试肯定不行,它们都不依赖BIOS读盘。
  真心希望各位下载试过了的朋友能回复这个新加功能的稳定性。
在这里下载:老版本已删除
  新的命令行如下:
  MAKEIMG  源镜像文件名  [目的镜像文件名] [/f | /b | /u]
   源镜像文件名  用来制作显隐藏分区功能的软盘镜像文件
   目的镜像文件名 将要生成的带显隐藏分区功能的软盘镜像文件,可省略,默认值为YISIR.IMG
  可选参数:
   /f       生成的程序在计算机启动时直接从软盘启动。(f为小写字母)
   /b       生成的程序在计算机启动时直接激活隐藏分区并启动。(b为小写字母,注意隐藏分区中必须已安装了DOS操作系统,此功能也未写MBR)
  无 /f 和 /b 参数时将出现提示并等待8秒,这期间按任意键从软盘启动,否则从硬盘启动且不加载显隐藏分区功能。
   /u       卸载本程序,将由本程序生成的镜像文件还原。(u为小写字母)

作者: xiaoyuan0417    时间: 2005-8-29 09:52
标题: 更新:制作显隐藏分区功能的软盘镜像文件工具,真正启动隐藏分区里的操作系统
与 IBM 的隐藏分区跳转功能有啥区别?
作者: turboy    时间: 2005-8-29 10:08
标题: 更新:制作显隐藏分区功能的软盘镜像文件工具,真正启动隐藏分区里的操作系统
[这个贴子最后由turboy在 2005/08/29 10:15am 第 1 次编辑]
下面引用由xiaoyuan04172005/08/29 09:52am 发表的内容:
与 IBM 的隐藏分区跳转功能有啥区别?
原理上是一样的,可是比IBM的要安全一些。因为IBM的还要安装到MBR里面,用户的很多操作都可能会破坏掉它(一个FDISK /MBR就完了)。而我的这个是放到系统启动光盘或软盘里面,是不会被无意破坏的。而且,程序在运行时也不会向MBR里写任何东西!
另外,我想做的并不是说做一个什么“一键恢复”的启动盘,而是提供一个通用的支持程序。每个人都可以利用它的支持简单、安全的自己DIY出自己的系统恢复工具——这才是我写这个程序真正希望看到的啊!
我先整理一下,后面我还会帖出一些和它相关应用方法的例子,抛砖引玉,让大家能认识它的用法。
作者: xiaoyuan0417    时间: 2005-8-29 10:29
标题: 更新:制作显隐藏分区功能的软盘镜像文件工具,真正启动隐藏分区里的操作系统
下面引用由turboy2005/08/29 10:08am 发表的内容:
原理上是一样的,可是比IBM的要安全一些。因为IBM的还要安装到MBR里面,用户的很多操作都可能会破坏掉它(一个FDISK /MBR就完了)。而我的这个是放到系统启动光盘或软盘里面,是不会被无意破坏的。而且,程序在 ...
期待中......
作者: turboy    时间: 2005-8-29 11:04
标题: 更新:制作显隐藏分区功能的软盘镜像文件工具,真正启动隐藏分区里的操作系统
[这个贴子最后由turboy在 2005/08/29 11:15am 第 1 次编辑]

应用之一
这是我曾写过的一个用于新硬盘自动分区的程序,将自动创建一个3GB的隐藏的备份分区:
这里如何用我这个程序:
用刚才的程序做一个启动盘启动,用SYS G:(隐藏分区的的盘符)使它可以启动,将GHOST.EXE等程序复制到G:,安装系统后再把系统备份也放到G:,写好G:\AUTOEXEC.BAT。以后在用此启动盘启动时按F7,系统就会从隐藏的备份分区中启动,自动执行AUTOEXEC.BAT,进行系统恢复/备份工作。
这不是一个很好的“一键恢复”吗?
@ECHO OFF
rem FILENAME: AUTOHIDE.BAT
rem PROGRAM: Yisir
rem 用来全自动分区,公式  C:8GB + 3GB(隐藏分区) + D:40%% + E:30%% + F:30%%
:L_CCDOS
XZL
CLS
REM 检查硬盘参数
CALL HDSTATUS.BAT
ECHO             *------------------------------------------------*
ECHO             *     易老师自动分区工具 1.1   2005-5-20          *
ECHO             *     (此版程序自动创建一个3GB的备份分区)        *
ECHO             *------------------------------------------------*
ECHO             此计算机中所安装硬盘信息如下:
ECHO                     硬盘编号: %HD%
ECHO                       总容量: %HDSIZE%
ECHO                   现有分区数: %PARTS%
ECHO             警告:
ECHO                 分区是一个危险的操作, 下面的程序将导致硬盘中的
ECHO             所有数据丢失。故此程序只供专业技术人员装机时使用,
ECHO             其他人员错误操作造成的损失与作者无关!
ECHO                                     http://yisir.9126.com
ECHO             *------------------------------------------------*
ECHO             全自动分区公式  C:8GB + 3GB + D:40%% + E:30%% + F:30%%
ECHO             注:那个3GB的主分区是供备份用的隐藏分区
REM 计算各分区大小
STRINGS EXTSIZE= SUB %HDSIZE%,11000
STRINGS EXTSIZE= DIV %EXTSIZE%,10
STRINGS HDPARTD= MUL %EXTSIZE%,4
STRINGS HDPARTE= MUL %EXTSIZE%,3
STRINGS HDPARTF= SUB %HDSIZE%,8000,%HDPARTD%,%HDPARTE%
ECHO         当前方案 %HDSIZE%= C:8GB + 3GB + D:%HDPARTD%M + E:%HDPARTE%M + F:%HDPARTF%M
ECHO             *------------------------------------------------*
ECHO                 输入“auto”开始全自动分区
ECHO                 输入“hand”开始手动分区
ECHO                 输入其他值退出
ECHO             *------------------------------------------------*
STRINGS CHOICE= ASK ------------请慎重考虑后再输入你的选择:
STRINGS CHOICE= UPPER %CHOICE%
IF %CHOICE%#==AUTO# GOTO AUTO
IF %CHOICE%#==HAND# GOTO HAND
GOTO END
:AUTO
GDISK %HD% /DEL /ALL
GDISK %HD% /CRE /PRI /SZ:8000 /FOR /Q /V:SYSTEM
GDISK %HD% /CRE /PRI  /SZ:3000 /FOR /Q /V:SYS_BACKUP
GDISK %HD% /CRE /EXT /FOR /Q /V:SYS_BACKUP
GDISK %HD% /CRE /LOG /SZ:%HDPARTD% /FOR /Q /V:DATA
GDISK %HD% /CRE /LOG /SZ:%HDPARTE% /FOR /Q /V:OTHER
GDISK %HD% /CRE /LOG /FOR /Q /V:BACKUP
GDISK %HD% /HIDE /P:2
SET HDPARTD=
SET HDPARTE=
SET HDPARTF=
GOTO OK
:HAND
REM C盘
STRINGS HDPARTC= ASK 请输入%PCHAR%盘容量(最大%hdsize%MB):
GDISK %HD% /DEL /ALL
GDISK %HD% /CRE /PRI /SZ:%HDPARTC% /FOR /Q /V:SYSTEM
GDISK %HD% /CRE /EXT
REM D盘、E……
SET PNO=68
STRINGS MAXSIZE= SUB %HDSIZE%,%HDPARTC%
:P2_LOOP
STRINGS PCHAR= CHAR %PNO%
STRINGS ASKSIZE= ASK 请输入%PCHAR%盘容量(单位MB,直接回车建最大%MAXSIZE%):
IF %ASKSIZE%#==# GOTO P2_OK
GDISK %HD% /CRE /LOG /SZ:%ASKSIZE% /FOR /Q /V:LOG_%PCHAR%
STRINGS MAXSIZE= SUB %MAXSIZE%,%ASKSIZE%
STRINGS PNO= ADD %PNO%,1
GOTO P2_LOOP
:P2_OK
GDISK %HD% /CRE /LOG /FOR /Q /V:LOG_%PCHAR%
SET ASKSIZE=
SET MAXSIZE=
SET PNO=
SET PCHAR=
SET HDPARTC=
GOTO OK
:OK
GDISK %HD% /ACT /P:1
GDISK %HD% /MBR
ECHO 分区完成!请启动计算机,安装操作系统。
SET HDSIZE=
SET HDPART=
PAUSE>NUL
XZL /Q
GOTO END
:END
ECHO 已退出
这是它调用的用来得到硬盘号(HD)、已有分区数(PARTS)、容量(HDSIZE)的批处理
@ECHO OFF
rem FILENAME: HDSTATUS.BAT
rem PROGRAM: Yisir
rem 用来得到硬盘号(HD)、已有分区数(PARTS)、容量(HDSIZE)
IF %1#==SETVAR# GOTO SETVAR
REM 临时文件存在虚拟盘中
STRINGS TMPS= RIGHT %RAMDRIVE%,1
SET TMPFILE=\HDSTATUS.TXT
IF %TMPS%#==\# SET TMPFILE=HDSTATUS.TXT
SET TMPS=%RAMDRIVE%%TMPFILE%
SET TMPFILE=
SET LL=1
GDISK /STATUS>%TMPS%
:LOOP
  STRINGS HDS= READ %TMPS%,%LL%
  STRINGS TMPSTR= MID %HDS%,1,4
  STRINGS LL= ADD %LL%,1
  IF ';%TMPSTR%';==';Disk'; GOTO FOUND
  GOTO LOOP
:FOUND
STRINGS HDS= READ %TMPS%,%LL%
SET TMPSTR=
SET TMPS=
SET LL=
CALL %0 SETVAR %HDS%
GOTO END
:SETVAR
SET HDS=
SET HD=%2
SET PARTS=%3
SET HDSIZE=%7
:END
这是XZL.EXE和STRINGS.COM[UploadFile=tools_1125284541.zip]
GDISK太大了不能上传。
作者: crshen    时间: 2005-8-29 19:01
标题: 更新:制作显隐藏分区功能的软盘镜像文件工具,真正启动隐藏分区里的操作系统
看到《易老师自动分区工具》才知道原来 turboy 就是易老师,这个东东很早以前就在你的个人网站上下载收藏了,真是久仰久仰,哈哈。
看样子宣传还不够,帮忙贴一下你的网站吧:http://yisir.softhome.cn/yiarticle/index.php
作者: turboy    时间: 2005-8-30 02:04
标题: 更新:制作显隐藏分区功能的软盘镜像文件工具,真正启动隐藏分区里的操作系统
我在不同的机器环境测试了一下,现在自报一下BUG:如果隐藏分区位于硬盘前8G以内,在启动时按F7就可以从隐藏分区启动。但如果是在前8G以后,就不行了。
我想这应该是标准MBR引导程序的局限,就算是用GDISK把隐藏分区直接激活也没办法从中启动。还要再想想有没有办法来解决它……
作者: 紫狐    时间: 2005-8-30 15:32
标题: 更新:制作显隐藏分区功能的软盘镜像文件工具,真正启动隐藏分区里的操作系统
下面引用由turboy2005/08/30 02:04am 发表的内容:
我在不同的机器环境测试了一下,现在自报一下BUG:如果隐藏分区位于硬盘前8G以内,在启动时按F7就可以从隐藏分区启动。但如果是在前8G以后,就不行了。
我想这应该是标准MBR引导程序的局限,就算是用GDISK把隐藏 ...
是不是使用dos论坛那个精简了的IO.SYS?是的话替换微软原来的就可以解决,Wengier精简的版本会出现这个问题。
作者: jcc    时间: 2005-8-30 23:53
标题: 更新:制作显隐藏分区功能的软盘镜像文件工具,真正启动隐藏分区里的操作系统
能否放入U盘使用
作者: turboy    时间: 2005-8-30 23:58
标题: 更新:制作显隐藏分区功能的软盘镜像文件工具,真正启动隐藏分区里的操作系统
下面引用由jcc2005/08/30 11:53pm 发表的内容:
能否放入U盘使用
U盘目前还不能直接用,也许可以用NTLDR或GRUB载入一个软盘镜像的方式来使用。
作者: hjr0713    时间: 2005-8-31 00:43
标题: 更新:制作显隐藏分区功能的软盘镜像文件工具,真正启动隐藏分区里的操作系统
谢谢楼主
作者: crshen    时间: 2005-8-31 08:22
标题: 更新:制作显隐藏分区功能的软盘镜像文件工具,真正启动隐藏分区里的操作系统
[这个贴子最后由crshen在 2005/08/31 08:27am 第 1 次编辑]
下面引用由turboy2005/08/30 02:04am 发表的内容:
我在不同的机器环境测试了一下,现在自报一下BUG:如果隐藏分区位于硬盘前8G以内,在启动时按F7就可以从隐藏分区启动。但如果是在前8G以后,就不行了。
我想这应该是标准MBR引导程序的局限,就算是用GDISK把隐藏 ...
有关BUG的问题,请看下面,程序是以前的Build0826版反汇编得到的,相信0828版可能在这部分未作修改,根本原因就在于老的INT13只支持8G以内,而程序中的扩展int 13的42号子功能无论如何不能被执行。
作者: crshen    时间: 2005-8-31 08:24
标题: 更新:制作显隐藏分区功能的软盘镜像文件工具,真正启动隐藏分区里的操作系统
干脆直接贴过来算了:
0100        jmp 013C        
013C        cli        
013D        xor ax, ax        
013F        mov ds, ax        
0141        mov es, ax        
0143        mov ss, ax        
0145        mov ax, 7C00        
0148        mov sp, ax        
014A        sti        
014B        push ax        
014C        mov ax, 1301        
014F        mov bx, 000A        
0152        mov cx, 0068             //字符串长度
0155        mov dx, 1500        
0158        mov bp, 7D94             //字符串地址为7D94-7c00+100=294,即文末
015B        int 10                     //显示字符串及属性
015D        mov ah, 01        
015F        mov cx, 2000        
0162        int 10                     //设置光标形状
0164        mov si, 046C             //BIOS数据区0040:006c存放着定时器的计数值
0167        mov edx, [si]        
016A        mov ecx, edx        
016D        add edx, 0000009F    //设置等待时间

0174        mov ah, 01        
0176        int 16                     //判断字符是否存在
0178        je 0183                     //没有则跳转
017A        mov ah, 00        
017C        int 16                   //如有则读字符,限83键盘,ah=10时支持扩展键盘
017E        xor dx, dx          //如果有按键,则dx=0
0180        jmp 01A0        

0183        cmp ecx, [si]
0186        jnb 0195        
0188        test cl, 01        
018B        je 0195        
018D        mov ax, 0E3E        
0190        mov bx, 0004        
0193        int 10                   //显示字符0x3E ">"

0195        mov ecx, [si]        
0198        cmp edx, ecx          //定时器是否到时
019B        jnb 0174        
019D        mov dx, FFFF          //规定时间内无按键,则dx=0xFFFF

01A0        mov ah, 01
01A2        mov cx, 0D0E
01A5        int 10
01A7        mov bx, 0413
01AA        mov ax, [bx]
01AC        dec ax          //直接减少0040:0013处的值, 减少可用内存的容量
01AD        cmp dx, FFFF  
01B1        je 01B5
01B3        mov [bx], ax     //保存基本内存容量

01B5        shl ax, 06
01B8        mov es, ax             //算出减1K后的高端段址
01BA        pop si                 //si=7C00,ds:si(0000:7C00)
01BB        push es
01BC        xor di, di             //目的地址es:di(es:0000)
01BE        cld
01BF        mov cx, 0100             //0x100个字,即本程序512字节搬移
01C2        repnz
01C3        movsw                   //字符移动
01C4        mov si, 004C           //取中断向量表中,INT 13H的偏移位置
01C7        mov di, 0109           //即下面的0209,更改jmp 0000:0000为jmp 真正INT13地址
01CA        mov eax, [si]
01CD        mov es:[di], eax       //保存原INT 13H的偏移位置
01D1        cmp dx, FFFF
01D5        je 01E3               //如果从硬盘启动则跳转,即不接替INT 13
01D7        push es
01D8        pop ax
01D9        shl eax, 10
01DD        mov ax, 011B
01E0        mov [si], eax         //更改INT 13H的偏移位置为下面的021B

01E3        push ds
01E4        pop es
01E5        mov bx, 00EA
01E8        push bx
01E9        retf              //ip=00EA,cs=es,实际为执行下面的01EA

01EA        cmp dx, FFFF
01EE        je 01F9
01F0        mov cx, 4F12
01F3        mov dx, 0100         //从软盘启动,0面79道18扇区
01F6        jmp 01FF

01F9        mov cx, 0001          //从硬盘启动,0面0道1扇区
01FC        mov dx, 0080

01FF        mov ax, 0201
0202        mov bx, 7C00          //读1个扇区到7C00
0205        pushf
0206        push ds              //ds=0000
0207        push bx              //bx=7C00,INT 13返回后跳转到0000:7C00

0208        jmp 0000:0000        //01CD处修改后成为INT 13
020D-021A 11 01 14 04 16 06 17 07 1B 0B 1C 0C 1E 0E  //分区类型表
021B        cmp ah, 02        //老的读扇区功能
021E        jne 0231
0220        cmp dx, 0080
0224        jne 0231
0226        cmp cx, 0001
022A        je 024F          //读硬盘BOOT扇区
022C        cmp ah, 42       //扩展读功能,×××这里似乎不可能到达×××
022F        je 0234

0231        jmp 0208

0234        push eax
0236        xor eax, eax
0239        cmp [di+08], eax
023D        jne 024A
023F        cmp [di+0C], eax
0243        jne 024A
0245        pop eax
0247        jmp 024F

024A        pop eax
024C        jmp 0231

024F        pushf
0250        push cs
0251        call 0208
0254        jb 0293
0256        push es
0257        push ds
0258        push ax
0259        push bx
025A        push cx
025B        push cs
025C        pop ds
025D        cmp ah, 42          //扩展读功能
0260        jne 026B
0262        mov bx, [di+04]
0265        mov es, [di+06]
0268        jmp 026B

026B        add bx, 01C2  
026F        mov cx, 0004       //4个主分区
0272        mov si, 010D      //分区类型表地址020D-021A

0275        cld
0276        lodsw             //ds:si到ax,ds=cs代码段址
0277        cmp si, 011B
027B        jnb 0288          //直到类型表比较完成
027D        cmp es:[bx], al   //比较是否为隐藏分区
0280        jne 0275
0282        mov es:[bx], ah   //将隐藏分区改为非隐藏
0285        jmp 0275

0288        add bx, 0010      //第个分区表0x10字节
028C        loop 0272         //4个分区表逐一检查
028E        pop cx
028F        pop bx
0290        pop ax
0291        pop ds
0292        pop es

0293        iret
Yisir Restore Tool Loader, yisir.9126.com
Press any key to load RESTORE DISK or BOOT from HARDDISK...
0x00 0x00 0x55 0xAA
---------------------------------------
建议版主以后直接发带注释的源程序,以便大家完善,看汇编代码本来就很费神,我都没这么好的耐心,相信别人也不轻松。
另外
0208        jmp 0000:0000        //01CD处修改后成为INT 13
020D-021A 11 01 14 04 16 06 17 07 1B 0B 1C 0C 1E 0E  //分区类型表
021B        cmp ah, 02        //老的读扇区功能
021E        jne 0231
0220        cmp dx, 0080
0224        jne 0231
0226        cmp cx, 0001
022A        je 024F          //读硬盘BOOT扇区
022C        cmp ah, 42       //扩展读功能,×××这里似乎不可能到达×××
022F        je 0234
0231        jmp 0208
请楼主看一下,从021B处判断ah是否为02号功能,不是则执行int 13,是则往下执行,但ah不可能变成42h吧,那022C处岂不有问题?
----------------------------------
020D-021A 11 01 14 04 16 06 17 07 1B 0B 1C 0C 1E 0E  为分区类型表
026F        mov cx, 0004       //4个主分区
0272        mov si, 010D      //分区类型表地址020D-021A
0275        cld
0276        lodsw             //ds:si到ax,ds=cs代码段址
0277        cmp si, 011B
027B        jnb 0288          //直到类型表比较完成
027D        cmp es:[bx], al   //比较是否为隐藏分区
0280        jne 0275
0282        mov es:[bx], ah   //将隐藏分区改为非隐藏
0285        jmp 0275
0288        add bx, 0010      //第个分区表0x10字节
028C        loop 0272         //4个分区表逐一检查
从026F起检查分区表类型,个人认为只要检测最后一个分区即可,很少有人将中间的分区隐藏的。
从分区表类型看,隐藏与非隐藏差别为bit4,所有类型可合并为一种,即:
if (al and 0xF0)=0x10 then 分区类型=(al and 0x0F)
作者: crshen    时间: 2005-8-31 08:34
标题: 更新:制作显隐藏分区功能的软盘镜像文件工具,真正启动隐藏分区里的操作系统
0174        mov ah, 01        
0176        int 16                     //判断字符是否存在
0178        je 0183                     //没有则跳转
017A        mov ah, 00        
017C        int 16                   //如有则读字符,限83键盘,ah=10时支持扩展键盘
017E        xor dx, dx          //如果有按键,则dx=0
0180        jmp 01A0
int 16的00、01功能只能用83键,而10、11号功能都支持扩展键盘,你的程序不能用F11,是否与此有关?
作者: turboy    时间: 2005-8-31 09:51
标题: 更新:制作显隐藏分区功能的软盘镜像文件工具,真正启动隐藏分区里的操作系统
[这个贴子最后由turboy在 2005/08/31 10:21am 第 1 次编辑]

谢谢crshen的关注。
下面引用由crshen2005/08/31 08:34am 发表的内容:
0174        mov ah, 01        
0176        int 16                     //判断字符是否存在
0178        je 0183                     //没有则跳转
017A        mov ah, 00        
...
你分析得挺完善的,肯定是熬夜奋战了。不能用F11的确是这个原因,好久没用汇编了。只记得00,01这几个功能调用了,要修改也是容易的事。
不过按F7和F11的区别也不大,不如再给MAKEIMG加一个选项,可以选择热键吧。
021B        cmp ah, 02        //老的读扇区功能
021E        jne 0231
0220        cmp dx, 0080
0224        jne 0231
0226        cmp cx, 0001
022A        je 024F          //读硬盘BOOT扇区
022C        cmp ah, 42       //扩展读功能,×××这里似乎不可能到达×××
022F        je 0234
谢谢指出。这里的确是无法到达的,正在改。但程序无法启动8G后的分区和这里无关,我只管主分区表数据区,后面完全是跳到系统的MBR里去运行的。但程序一直没有问题则说明至少DOS是只用02号功能来读MBR和主分区表的。
从026F起检查分区表类型,个人认为只要检测最后一个分区即可,很少有人将中间的分区隐藏的。
从分区表类型看,隐藏与非隐藏差别为bit4,所有类型可合并为一种,即:
if (al and 0xF0)=0x10 then 分区类型=(al and 0x0F)
只检测最后一个分区是不负责任的,并非所有的隐藏分区都在最后,如果有一个遗漏了,都是严重的BUG,是不应该的。
隐藏与非隐藏差别为bit4,我也看出来了。可是我为什么不只判断bit4呢,为了程序可以继续扩充。因为分区类型不止只有FAT16/32这么几种,所谓“隐藏分区”也无非只是一个习惯的叫法——只要是DOS不能管理的都是DOS的隐藏分区(MS FDISK里叫非DOS分区),11、14、16、1B、1C……不过是前面的PQMAGIC等软件用这个方案,我们只能接受罢了。我们完全可以将一个FAT分区的类型标志域改成一个其他值,这样同样也能对操作系统隐藏该分区,可是这种做法我不提倡——可能会使事情变得越来越乱。所以我选择了查表方式。
建议版主以后直接发带注释的源程序,以便大家完善,看汇编代码本来就很费神,我都没这么好的耐心,相信别人也不轻松。
对于源代码的问题,源代码迟早会公开的,我目前只是更想知道除了我个人想要的之外,大家更想要些什么功能。当它完善一些后,我会整理代码并公开文档。
这个程序完全是用NASM汇编写的,可是汇编语言和硬盘操作这些知识并不是每一个电脑用户都懂也一定要弄懂的,我们只要能提供一个安全好用的功能就可以了。这个程序也只是我遇到的问题所想到的解决方法,我早就已经在一年前的帖子中说到了这个思路,懂汇编的用一段时间都可以写出来。你已经完整的反汇编了全部代码,对它理解的也很正确。手工写的汇编代码的反汇编结果本来也不难读,可是这不是问题的关键,关键的是现在程序面向的对象不是研究者而是使用者。LINUX是公开源代码的,可是我看不懂,更谈不上改进它,不过是改改配置文件来更好使用它了。
正向前面我说的,我写得时候必须考虑使程序能在任何机器上正常工作,而且不能突破512字节,这让我煞费苦心。本来打算用纯8086汇编的,有些操作代码太长而使用了386寄存器,有些数据直接嵌到了指令中间……这些怪招都是当年跟一些病毒学的,可是这些方法不规范,代码一长就不好控制了,而且在CPU保护模式下这些都没用了。
再次感谢crshen的关注。
作者: 天风    时间: 2005-8-31 10:06
标题: 更新:制作显隐藏分区功能的软盘镜像文件工具,真正启动隐藏分区里的操作系统
关注一下!
作者: 紫狐    时间: 2005-8-31 17:36
标题: 更新:制作显隐藏分区功能的软盘镜像文件工具,真正启动隐藏分区里的操作系统
我一般安装的机器的隐藏分区都在第二个分区。
作者: turboy    时间: 2005-9-2 02:20
标题: 更新:制作显隐藏分区功能的软盘镜像文件工具,真正启动隐藏分区里的操作系统
  8月28日无法从后面的隐藏分区启动的问题解决了,现在已经可以正常启动隐藏主分区中的操作系统。其实是程序本身的问题,程序虽然在启动后把隐藏分区向其他程序报告为正常分区,但在自己完工后把控制权交还MBR时却忘了改。结果MBR还是装入了原来的激活分区引导程序,但在那个操作系统启动时读到的激活分区却是那个已经显示出来的隐藏分区了。所以当两个系统都是DOS或Win98时由于启动文件一样所以是正常的,两个系统不同时就有异常了。
  新程序在启动时出现的8秒等待中如果按了F7键(或自定义的键),则会从第一个隐藏主分区启动,此盘分配为C:。目前我只测试了DOS7.1(Win98启动盘),我想应该也能启动WIN98。WinXP启动后会将隐藏分区变成非隐藏,用硬盘重启后仍是可显示的,肯定时WinXP在什么时候更新过MBR。LINUX没有试。
  新加入一个功能键ESC:可以不加载本程序,正常从硬盘盘启动,。
  新加入一个功能键F5:可以不加载本程序,正常从软盘盘启动,用于需要正确查看实际分区时。
  MAKEIMG.EXE的命令行选项可以忽略大小写了。
  修正了几个大BUG。
  新的命令行如下:
  MAKEIMG  源镜像文件名  [目的镜像文件名] [/f | /b | /u | /k:n]
   源镜像文件名  用来制作显隐藏分区功能的软盘镜像文件
   目的镜像文件名 将要生成的带显隐藏分区功能的软盘镜像文件,可省略,默认值为YISIR.IMG
  可选参数:
   /f       生成的程序在计算机启动时直接从软盘启动。
   /b       生成的程序在计算机启动时直接激活隐藏分区并启动。(注意隐藏分区中必须已安装了操作系统,此功能也未写MBR)
  无 /f 和 /b 参数时将出现提示并等待8秒,这期间按任意键从软盘启动,否则从硬盘启动且不加载显隐藏分区功能。
   /k:n      n=1-4,6-12。设置直接激活隐藏分区并启动时用的按键,可以是F1-F4、F6-F12
   /u       卸载本程序,将由本程序生成的镜像文件还原,结果保存成一个镜像文件。
[UploadFile=build050901_1125598678.zip]
作者: crshen    时间: 2005-9-2 20:55
标题: 更新:制作显隐藏分区功能的软盘镜像文件工具,真正启动隐藏分区里的操作系统
恭喜恭喜,改了很多代码,等我下次上夜班时再研究研究。
作者: turboy    时间: 2005-9-2 23:11
标题: 更新:制作显隐藏分区功能的软盘镜像文件工具,真正启动隐藏分区里的操作系统
下面引用由crshen2005/09/02 08:55pm 发表的内容:
恭喜恭喜,改了很多代码,等我下次上夜班时再研究研究。
  9月1日的程序的确调整了很多,除了功能增加了之外,流程理得更清晰,比起以前更好看懂了——当然指令行数也增加了。你已经反汇编过一次了,用引导扇区格式来反汇编,开始时用一个寄存器做标志来判断如何安装和引导……还是先让你自己看看吧,说多了就没意思了。
  现在程序已经很接近512字节了,除非删掉所有的提示信息,否则不能再加新的功能了,也算基本完善了。以前还想加上能处理逻辑分区的功能,可是至少需要一两百字节,看来是没法挤进去了。你先跟踪看看现在的这个还有什么BUG,完了我再发源程序给你对照。
  你再来时留个Email,以后好交流。
作者: crshen    时间: 2005-9-3 17:15
标题: 更新:制作显隐藏分区功能的软盘镜像文件工具,真正启动隐藏分区里的操作系统
刚下班,顺便看了一下,还没测试:
1. 安装程序有点问题,只能认1.44M的映像,如果<1.44则自动扩展为1.44(以00填充),如果>1.44,则截掉一半,看现在的光盘上,映像大小各异,好像不太好吧。
2. 最好做成Windows图形界面的安装程序,过两天我有空倒可以做一个,或者你自己搞一个吧。
3. 为方便别人一起分析,将提取引导文件方法介绍如下:
利用安装程序制作1.44M启动映像
利用WinHex打开上面生的映像,将开始的512字节(0000-01FF)“编辑”-“复制扇区”-“进入新文件”-填写文件名即可。
三种安装生成的文件差异如下:
偏移(16进制)  无参        /b         /f
    74         B4         31         31
    75         11         D2         D2
    76         CD         E9         E9
    77         16         1B         41
    78         74         00         00
5 差异 发现。
作者: crshen    时间: 2005-9-3 18:15
标题: 更新:制作显隐藏分区功能的软盘镜像文件工具,真正启动隐藏分区里的操作系统
[这个贴子最后由crshen在 2005/09/05 08:29am 第 3 次编辑]

为了让地址从7C00开始,只有用DEBUG这个老工具,可惜不支持386指令,下面的反汇编程序已修正为386指令,并大体上整理了一下,尽量注释完整了。
我的E-mail:[color=#DC143C]crshen@tom.com
0AFC:7C00 EB3A          JMP  7C3C
MSDOS5.0
YISIR_LOADERFAT12
0AFC:7C3C FA            CLI
0AFC:7C3D 31C0          XOR  AX,AX
0AFC:7C3F 8ED8          MOV  DS,AX
0AFC:7C41 8EC0          MOV  ES,AX
0AFC:7C43 8ED0          MOV  SS,AX
0AFC:7C45 B8007C        MOV  AX,7C00
0AFC:7C48 89C4          MOV  SP,AX
0AFC:7C4A FB            STI
0AFC:7C4B 50            PUSH  AX
0AFC:7C4C B80113        MOV  AX,1301
0AFC:7C4F BB0A00        MOV  BX,000A
0AFC:7C52 B92D00        MOV  CX,002D      //字符串长度
0AFC:7C55 BA0015        MOV  DX,1500
0AFC:7C58 BDD07D        MOV  BP,7DD0      //文末字符串地址
0AFC:7C5B CD10          INT  10           //显示字符串及属性
0AFC:7C5D B401          MOV  AH,01
0AFC:7C5F B90020        MOV  CX,2000
0AFC:7C62 CD10          INT  10          //设置光标形状
0AFC:7C64 BE6C04        MOV  SI,046C     //BIOS数据区0040:006c存放着定时器的计数值
0AFC:7C67 668B14        mov edx, [si]
0AFC:7C6A 6689D1        mov ecx, edx
0AFC:7C6D 6681C29F000000  add edx, 0000009F  //设置等待时间159/18.1=8.8秒
//----------------------规定时间内等待按键循环开始-----------------------------//
0AFC:7C74 B411          MOV  AH,11
0AFC:7C76 CD16          INT  16             //判断字符是否存在
0AFC:7C78 7422          JZ  7C9C            //没有则跳转
0AFC:7C7A B410          MOV  AH,10          //如有则读字符
0AFC:7C7C CD16          INT  16
0AFC:7C7E 31D2          XOR  DX,DX         //如果有按键,则dx=0
0AFC:7C80 80FC01        CMP  AH,01         //ESC按键的扫描码
0AFC:7C83 7433          JZ  7CB8           //如果有ESC则跳转,正常从硬盘(80)启动
0AFC:7C85 80FC3F        CMP  AH,3F         //F5键
0AFC:7C88 7505          JNZ  7C8F
0AFC:7C8A B6FF          MOV  DH,FF         //如果按下F5,DH=FF,从软盘启动(不加载INT 13截获)
0AFC:7C8C E92B00        JMP  7CBA
0AFC:7C8F 80FC41        CMP  AH,41         //F7键,从第一个隐藏主分区启动
0AFC:7C92 7526          JNZ  7CBA
0AFC:7C94 C606947D80    MOV  BYTE PTR [7D94],80     //0AFC:7D92 B90400   MOV  CX,0004
0AFC:7C99 E91C00        JMP  7CB8

0AFC:7C9C 663B0C        cmp ecx, [si]
0AFC:7C9F 730D          JNB  7CAE
0AFC:7CA1 F6C101        TEST  CL,01
0AFC:7CA4 7408          JZ  7CAE
0AFC:7CA6 B83E0E        MOV  AX,0E3E
0AFC:7CA9 BB0400        MOV  BX,0004
0AFC:7CAC CD10          INT  10             //显示进度条“>”

0AFC:7CAE 668B0C        mov ecx, [si]
0AFC:7CB1 6639CA        cmp edx, ecx
0AFC:7CB4 73BE          JNB  7C74
0AFC:7CB6 B6FF          MOV  DH,FF          //一直无按键操作时,置DH=FF标志,不截获INT 13
//--------------------------规定时间内等待按键循环结束---------------------------------//

0AFC:7CB8 B280          MOV  DL,80          //磁盘号:80=硬盘,00=软盘
//----无按键:DH=FF,DL=80  硬盘启动,不截获INT 13
//-----按ESC:DH=00,DL=80
//------按F5:DH=FF,DL=00
//------按F7:DH=00,DL=80  隐藏分区启动 (MOV  BYTE PTR [7D94],80)
//--按其它键:DH=00,DL=00  软盘启动
0AFC:7CBA B401          MOV  AH,01
0AFC:7CBC B90E0D        MOV  CX,0D0E
0AFC:7CBF CD10          INT  10             //设置光标形状
0AFC:7CC1 BB1304        MOV  BX,0413        //直接减少0040:0013处的值, 减少可用内存的容量
0AFC:7CC4 8B07          MOV  AX,[BX]
0AFC:7CC6 48            DEC  AX
0AFC:7CC7 80FE00        CMP  DH,00         //DH=00安装INT13
0AFC:7CCA 7502          JNZ  7CCE
0AFC:7CCC 8907          MOV  [BX],AX        //写入则可实现程序驻留

//----------------------下面为程序搬移和安装新的INT 13------------------------//
0AFC:7CCE C1E006        SHL  AX, 06        //算出减1K后的高端段址
0AFC:7CD1 8EC0          MOV  ES,AX
0AFC:7CD3 5E            POP  SI            //si=7C00,ds:si(0000:7C00)
0AFC:7CD4 06            PUSH  ES
0AFC:7CD5 31FF          XOR  DI,DI         //目的地址es:di(es:0000)
0AFC:7CD7 FC            CLD
0AFC:7CD8 B90001        MOV  CX,0100
0AFC:7CDB F2            REPNZ
0AFC:7CDC A5            MOVSW              //0x100个字,即本程序512字节搬移
0AFC:7CDD BE4C00        MOV  SI,004C       //取中断向量表中,INT 13H的偏移位置
0AFC:7CE0 BF2201        MOV  DI,0122       //更改下面jmp 0000:0000为jmp 真正INT13地址
0AFC:7CE3 668B04        mov eax, [si]
0AFC:7CE6 26668905      mov es:[di], eax   //保存原INT 13H的偏移位置
0AFC:7CEA 80FE00        CMP  DH,00         //-------------此处可上移到7CDD处更好---------//
0AFC:7CED 750C          JNZ  7CFB
0AFC:7CEF 06            PUSH  ES
0AFC:7CF0 58            POP  AX
0AFC:7CF1 66C1E010      SHL  EAX,10
0AFC:7CF5 B83401        MOV  AX,0134
0AFC:7CF8 668904        mov [si], eax      //更改INT 13H的偏移位置为下面的0AFC:7D34

0AFC:7CFB 1E            PUSH  DS
0AFC:7CFC 07            POP  ES
0AFC:7CFD BB0201        MOV  BX,0102
0AFC:7D00 53            PUSH  BX
0AFC:7D01 CB            RETF               //ip=BX=0102,cs=es=新段址,实际为执行下面的7D02
//--------------------------下面为选择从软盘或硬盘正常启动--------------------------//
0AFC:7D02 80FA00        CMP  DL,00         //DL=0载入软盘引导记录启动
0AFC:7D05 7509          JNZ  7D10
0AFC:7D07 B9124F        MOV  CX,4F12      //从软盘启动,0面79道18扇区
0AFC:7D0A BA0001        MOV  DX,0100
0AFC:7D0D E90600        JMP  7D16
0AFC:7D10 B90100        MOV  CX,0001
0AFC:7D13 BA8000        MOV  DX,0080        //从硬盘启动,0面0道1扇区

0AFC:7D16 B80102        MOV  AX,0201
0AFC:7D19 BB007C        MOV  BX,7C00        //读1个扇区到7C00
0AFC:7D1C 1E            PUSH  DS
0AFC:7D1D 53            PUSH  BX
0AFC:7D1E CD13          INT  13
0AFC:7D20 CB            RETF              //IP=BX=7C00,CS=DS=0000,执行0000:7C00
0AFC:7D21 EA00000000    JMP  0000:0000     //0AFC:7CE0处修改后成为INT 13
//----------------------下面为分区类型表----------------------------//
0AFC:7D26 1101 1404 1606 1707 1B0B 1C0C 1E0E

//-------------下面为新的INT 13中断功能----------------------------//
0AFC:7D34 80FC02        CMP  AH,02         //老的读扇区功能
0AFC:7D37 7408          JZ  7D41
0AFC:7D39 80FC42        CMP  AH,42         //扩展读功能
0AFC:7D3C 741B          JZ  7D59

0AFC:7D3E E9E0FF        JMP  7D21         //原始INT 13
0AFC:7D41 81FA8000      CMP  DX,0080      //读硬盘MBR扇区
0AFC:7D45 75F7          JNZ  7D3E
0AFC:7D47 81F90100      CMP  CX,0001
0AFC:7D4B 75F1          JNZ  7D3E
0AFC:7D4D 9C            PUSHF
0AFC:7D4E 0E            PUSH  CS
0AFC:7D4F E8CFFF        CALL  7D21       //INT13
0AFC:7D52 727B          JB  7DCF
0AFC:7D54 53            PUSH  BX
0AFC:7D55 06            PUSH  ES
0AFC:7D56 E92F00        JMP  7D88
0AFC:7D59 80FA80        CMP  DL,80      //使用扩展读功能时从这里开始
0AFC:7D5C 75E0          JNZ  7D3E       //不是读硬盘时,直接INT13
0AFC:7D5E 6650          push eax
0AFC:7D60 6631C0        xor eax, eax
0AFC:7D63 66394408      cmp [si+08], eax
0AFC:7D67 751A          JNZ  7D83
0AFC:7D69 6639440C      cmp [si+0C], eax
0AFC:7D6D 7514          JNZ  7D83
0AFC:7D6F 6658          pop eax
0AFC:7D71 9C            PUSHF
0AFC:7D72 0E            PUSH  CS
0AFC:7D73 E8ABFF        CALL  7D21
0AFC:7D76 7257          JB  7DCF
0AFC:7D78 53            PUSH  BX
0AFC:7D79 06            PUSH  ES
0AFC:7D7A 8B5C04        MOV  BX,[SI+04]     //7C00
0AFC:7D7D 8E4406        MOV  ES,[SI+06]     //0000
0AFC:7D80 E90500        JMP  7D88

0AFC:7D83 6658          pop eax
0AFC:7D85 E9B6FF        JMP  7D3E
0AFC:7D88 50            PUSH  AX
0AFC:7D89 51            PUSH  CX
0AFC:7D8A 56            PUSH  SI
0AFC:7D8B 1E            PUSH  DS
0AFC:7D8C 0E            PUSH  CS
0AFC:7D8D 1F            POP  DS
0AFC:7D8E 81C3C201      ADD  BX,01C2    //BX=7C00+01C2,分区表从7DBE起始,7DC2为分区类型
0AFC:7D92 B90400        MOV  CX,0004    //主分区有4个分区表项,CH改为80时为扩展int 13使用
0AFC:7D95 BE2601        MOV  SI,0126     //0AFC:7D26处分区类型表
0AFC:7D98 80FD80        CMP  CH,80
0AFC:7D9B 7505          JNZ  7DA2
0AFC:7D9D 26C647FC00    MOV  BYTE PTR ES:[BX-04],00    //把第一分区改为非活动分区
0AFC:7DA2 FC            CLD
0AFC:7DA3 AD            LODSW           //ds:si到ax,ds=cs代码段址
0AFC:7DA4 81FE3401      CMP  SI,0134    //直到类型表比较完成
0AFC:7DA8 7317          JNB  7DC1
0AFC:7DAA 263807        CMP  ES:[BX],AL
0AFC:7DAD 75F3          JNZ  7DA2
0AFC:7DAF 268827        MOV  ES:[BX],AH   //将隐藏分区改为非隐藏
0AFC:7DB2 80FD80        CMP  CH,80
0AFC:7DB5 7507          JNZ  7DBE
0AFC:7DB7 26C647FC80    MOV  BYTE PTR ES:[BX-04],80   //把第一个隐藏分区改为活动分区
0AFC:7DBC 30ED          XOR  CH,CH                    //CH标志取消
0AFC:7DBE E9E1FF        JMP  7DA2
0AFC:7DC1 81C31000      ADD  BX,0010      //每个分区表0x10字节
0AFC:7DC5 FEC9          DEC  CL           //4项分区表逐一检查
0AFC:7DC7 77CC          JA  7D95
0AFC:7DC9 1F            POP  DS
0AFC:7DCA 5E            POP  SI
0AFC:7DCB 59            POP  CX
0AFC:7DCC 58            POP  AX
0AFC:7DCD 07            POP  ES
0AFC:7DCE 5B            POP  BX

0AFC:7DCF CF            IRET
PartUnhide Loader, yisir.9126.com, 2005-9-1
00 55 AA
作者: jiangrpeng    时间: 2005-9-3 21:19
标题: 更新:制作显隐藏分区功能的软盘镜像文件工具,真正启动隐藏分区里的操作系统
这个想法的确好,我虽然是菜鸟,也为楼主和crshen的辛苦探索顶一下,我要长 期关注这个软件
作者: crshen    时间: 2005-9-5 08:36
标题: 更新:制作显隐藏分区功能的软盘镜像文件工具,真正启动隐藏分区里的操作系统
程序从流程上看已经没有什么严重BUG了
0AFC:7CDD BE4C00        MOV  SI,004C       //取中断向量表中,INT 13H的偏移位置
0AFC:7CE0 BF2201        MOV  DI,0122       //更改下面jmp 0000:0000为jmp 真正INT13地址
0AFC:7CE3 668B04        mov eax, [si]
0AFC:7CE6 26668905      mov es:[di], eax   //保存原INT 13H的偏移位置
0AFC:7CEA 80FE00        CMP  DH,00         
0AFC:7CED 750C          JNZ  7CFB
7CEA处的判断跳转好像可以移到7CDD处,读起来更流畅。
启动时其实共有5种选择:
//----无按键:DH=FF,DL=80  硬盘启动,不截获INT 13
//-----按ESC:DH=00,DL=80
//------按F5:DH=FF,DL=00
//------按F7:DH=00,DL=80  隐藏分区启动 (MOV  BYTE PTR [7D94],80)
//--按其它键:DH=00,DL=00  软盘启动
作者: crshen    时间: 2005-9-5 08:59
标题: 更新:制作显隐藏分区功能的软盘镜像文件工具,真正启动隐藏分区里的操作系统
顺便做了个简单的图形界面安装卸载程序,学习用易语言写的,因为turboy的引导程序尚未正式发行,故我的Shell也只是试用性质,以后可能会用Delphi编写,有如下增强:
1. 完全兼容turboy的命令行中的各参数,其实这个很简单,只要改一下相关字节就OK
2. 兼容非标准格式的软盘映像,如720K,2.88M等,这也简单,修改地方为
   0AFC:7D07 B9124F        MOV  CX,4F12      //从软盘启动,0面79道18扇区
3. 安装时判断有无空余空间(一般情况下都有的),是否已经安装(判断末扇区的第一字节EB及末2字节55AA即可)
4. 卸载时自动判断是否已安装,同上处理。另也可采用CRC算法,将结果存入空余的第510字节,供校验。
5. 引导程序512字节内置于程序中。
附件使用方法:
boot.bin其实为不带参数生成的启动扇区
test.exe为安装程序,用易写的,很垃圾。先载入IMG映像,从字节数判断是否为1.44M,符合则可用。运行机制:安装时将第1个扇区的内容写到最后一个扇区,再将boot.bin内容写到第一扇区;卸载时,将末扇区内容写到首扇区,并将末扇区清零。因此,请注意:只有已经安装后的映像才能使用卸载,否则就……,幸好默认是保留备份的,哈哈。

作者: crshen    时间: 2005-9-5 09:00
标题: 更新:制作显隐藏分区功能的软盘镜像文件工具,真正启动隐藏分区里的操作系统
[这个贴子最后由crshen在 2005/09/05 09:03am 第 1 次编辑]

[UploadFile=0901_1125882018.rar]分卷一
[UploadFile=0901_1125882056.rar]分卷二
[UploadFile=0901_1125882078.rar]分卷三
作者: turboy    时间: 2005-9-5 10:57
标题: 更新:制作显隐藏分区功能的软盘镜像文件工具,真正启动隐藏分区里的操作系统
[这个贴子最后由turboy在 2005/09/06 01:25pm 第 2 次编辑]
7CEA处的判断跳转好像可以移到7CDD处,读起来更流畅。
这里修改后不影响运行,的确提高了可读性,已改。
启动时其实共有5种选择:
//----无按键:DH=FF,DL=80  硬盘启动,不截获INT 13
//-----按ESC:DH=00,DL=80
//------按F5:DH=FF,DL=00
//------按F7:DH=00,DL=80  隐藏分区启动 (MOV  BYTE PTR [7D94],80)
//--按其它键:DH=00,DL=00  软盘启动
这里其实是这样的:
DH=0 Install INT13, DH=FFH do not Install
;DL=0 Boot Floppy, DL=80H Boot HD
;Now:
;ESC DX=FF80, F5 DX=FF00H, F7 DX=0080H, ANYKEY DX=0000H, TIMEOUT DX=FF80H
0AFC:7D92 B90400        MOV  CX,0004    //主分区有4个分区表项,CH改为80时为扩展int 13使用
这里的代码中的CH在程序启动时按下F7后改为80H,用作判断修改读到的激活分区的标记。
运行机制:安装时将第1个扇区的内容写到最后一个扇区,再将boot.bin内容写到第一扇区;卸载时,将末扇区内容写到首扇区,并将末扇区清零。因此,请注意:只有已经安装后的映像才能使用卸载,否则就……,幸好默认是保留备份的,哈哈。
这个改进起来不难,判断一下就可以了。我正在分析非标准软盘镜像的格式,已经有了些眉目,马上就可以有新的MAKEIMG.EXE了。
MAKEIMG.EXE的GUI SHELL我想用调用MAKEIMG.EXE来做,可以同时满足喜欢命令行和GUI的用户。
另外,我就姓易,可惜对易语言一点也不懂……
作者: 弄潮儿-NET    时间: 2005-9-6 03:43
标题: 更新:制作显隐藏分区功能的软盘镜像文件工具,真正启动隐藏分区里的操作系统
有点意思.

作者: zqjiang    时间: 2005-9-6 14:03
标题: 更新:制作显隐藏分区功能的软盘镜像文件工具,真正启动隐藏分区里的操作系统
学习,学习,试用看
作者: turboy    时间: 2005-9-6 14:45
标题: 更新:制作显隐藏分区功能的软盘镜像文件工具,真正启动隐藏分区里的操作系统
  感谢各位朋友的关注,为方便感兴趣的朋友改进,源程序开放。先公开引导区模块(HFBOOT.ASM)的源程序。
  在写这个程序之前,我看到了很多“一键恢复”的介绍,这些工具里面以IBM技术为基础的为多。网上搜索到关于IBM“F11”键恢复的文章很多,可是多数是讲如何修复IBM的,觉得程序写在MBR里面是不妥的,很容易被破坏。另外IBM虽然没有追究大家的盗版使用责任,可是这也不是长久的。我于是决定写一个与之功能相似的程序,让大家测试和使用。我在写程序时思考了IBM“F11”键恢复的原理,可是我并没有反汇编和阅读IBM的代码,因此完全是自己写的,没有那些多麻烦。但是正因为只是自己一个人写的,所以不一定象IBM一样有过充分的测试,尽管我在程序中没有任何写硬盘的代码(可参看源代码),但使用此程序的风险还是存在的。希望朋友们在充分测试(虚拟机、空闲硬盘……)后再正式使用它!
  还是那句老话,本人保留对原始程序的所有权。你可以自由阅读和修改你认为可以改进的地方,但是请在重新发布时保留原作者的信息,并且我希望你能将源文件公开并告诉我(turboy@163.com),保持这个工具的一贯作风。
这里是本人网站上语法加亮的源程序:http://yisir.softhome.cn/yiarticle/act.php?obj=article&id=136
  下面是引导区模块(HFBOOT.ASM)的源程序:
; ==========================================================================
; 这是一个用来引导我的系统备份/恢复光盘的启动软盘的程序,将会放在软盘的第一
; 个扇区内。此程序引导系统时,出现一个提示,用户可选择按任意键启动工具软盘,
; 也可以在等待8秒后引导硬盘上的操作系统。在选择由工具软盘启动DOS后,在MBR中
; 隐藏的FAT32主分区(0B/0C)将会分配盘符变得可见,这就可以用常规工具来做备
; 份了——备份在隐藏分区里,看谁能删得掉!
; 最后版本:2005/9/5
; ==========================================================================
; 编程记录:
; 6月29日的版本只处理了传统INT13的2号功能,所以在虚拟机中的小硬盘(1B-FAT32)
; 中调试正常,一到了用LBA方式读取的分区(1C-FAT32LBA,1E-FAT16LBA)就完了。可是
; 现在的硬盘已经没有8GB以下的了,读取也几乎全是用LBA方式了。
;
; 7月23日:
;     加入对扩展INT3读取(42号)功能的接管,实现对隐藏LBA分区的读取,由于现
; 在硬盘分区几乎没有用FAT16的了,所以只处理了FAT32的。
;     由于新代码的加入,我原来的提示信息也不得已剪了一部分。
;
; 8月22日:
;     加入一个可识别分区标志码列表(FlagTable),逐一判断处理。
; 在FlagTable DW xxyy中,每一个字中的xx代表原始分区标志码,yy代表隐藏时的分区标志码
; 如0414h代表原始分区为04h(FAT12),隐藏时的分区标志码为14h
; 现在,可以无限扩充了。
;
; 8月28日:
;     试验加入从隐藏分区启动的功能。
; 1、在启动后利用自己的INT13将原分区激活标志改为00,将能改为正常分区的原隐
;藏分区的激活标志改为80。
; 2、在安装前判断按键,用DX寄存器作为标志,无按键DX=0XFFFF,按F7时DX=1,
; INT13中CH=1,按其他键时DX=0,INT13中CH=0。
; 3、在INT13中,使用CH作为是否激活隐藏分区的判断标志,为1时从隐藏分区启动。
; 3、由于BOCHS虚拟机使用了F11和F12两个键,故设定按F7键由隐藏分区启动。
;
; 8月31日:
;     crshen发现了几个BUG,现在一一解决。从隐藏分区启动的功能。
; 1、读不出F11是因为INT10H的0号功能不支持扩展键盘,现在改为10H号功能。可是
; 在QEMU中10号功能也不能读F11,而VPC却可以,可能是两者的BIOS不同或QEMU拦截
; 了F11/F12吧。
; 2、在安装前判断按键,如果按ESC键,则直接进入硬盘启动。
; 3、有一个判断跳转有误,致使INT13H的42H功能处理无效,我大意了,在加入处理
; 42H功能代码时忘了改前面的代码。
; 4、不能从8G以后的隐藏分区启动是因为在我的INT13过程中有一个严重的错误,这
; 个错误是由于我参考的资料有误而引入的。 在INT13H扩展功能中是用DS:SI来指向
; DAP的, 而不是那篇资料中说的DS:DI。这可真是……
;  在MS-FDISK、FREE-FDISK、AEFDISK、PQMAGIC、Acronis Disk Editor等大多数
; 程序中隐藏分区都会以正常分区显示,但GDISK却可以看出此分区为隐藏分区,
; GDISK一定有超越BIOS中断的独特存取硬盘方法。
; 9月1日:
;  目前9-2 0:47我已经将可能想到的BUG全部排除了, 而程序的长度也接近512字节的
; 极限了。
; 1、又发现原来的程序中有一处死码,是在调用原INT13中断后,AH已被作为返回值
; 了,却还在用AH判断扩展INT13,所以后面处理扩展INT13功能的代码就不会运行了。
; 修改成将AX压栈保存,但代码就更乱了,于是重写了前面的代码。
; 2、跟踪、思考了两天,才发现不能在机房的P4上启动隐藏分区上的OS的原因竟是原
; 来玩的一个技巧。真是聪明反被聪明误啊!
; 3、改变了开始时判断方式,DX中,DH=0安装INT13,DH=FFH不安装;DL=0载入软盘
; 引导记录启动,DL=80H载入硬盘MBR启动
; 4、新加入一个功能ESC键:可以不加载本程序,正常从硬盘盘启动,以用于一般情
; 况。
; 5、新加入一个功能F5键:可以不加载本程序,正常从软盘盘启动,以用于一般情况。
; ==========================================================================
;GoodFlag1 equ 0bh
;HideFlag1 equ 1bh
;GoodFlag2 equ 0ch
;HideFlag2 equ 1ch
;GoodFlag3 equ 0eh
;HideFlag3 equ 1eh
ORIGIN EQU 7C00H; Origin of bootstrap LOADER
BIO_MEMEQU 0413H; BIOS Memory size =640(KB)
BIO_CLKEQU 046CH; BIOS Clock (1/18.2 seconds)
DSK_PARMSEQU 1EH*4;POINTER TO DRIVE PARAMETERS
KEY_BOOTHIDDENEQU 41H;Scancode: F7=41H, F11=85H, F12=86H
KEY_BOOTFLOPPYEQU 3FH;Scancode: F5=3FH
KEY_ESCAPEEQU 01H;Scancode: ESC=01H
BOOTHIDDENFLAGEQU 80h
ORG0000h
START:
; WARNING -- Don change this to a short jmp
jmp short main; Jump to start of code
nop
; ==========================================================================
; Start of BPB area of the boot record
OemName         DB "MSDOS"
OsVersion DB "5.0"; DOS version number
BPB:
BytesPerSector DW 512; Size of a physical sector
SecsPerClust DB 1; Sectors per allocation unit
ReservedSecs DW 1; Number of reserved sectors
NumFatsDB 2; Number of fats
NumDirEntries DW 00E0h; Number of direc entries
TotalSectors DW 0B40H; Number of sectors - number of hidden
; sectors (0 when 32 bit sector number)
MediaByte DB 0F0H; MediaByte byte
NumFatSecs DW 9; Number of fat sectors
SecPerTrack DW 18; Sectors per track
NumHeads DW 2; Number of drive heads
HiddenSecs DD 0; Number of hidden sectors
BigTotalSecs DD 0; 32 bit version of number of sectors
BootDrv DB 0h
CurrentHead DB 0h; Current Head
ExtBootSig DB 41
SerialNum DD 20050628h
VolumeLabel DB "YISIR_LOADER"
FatId DB "FAT12"
; =========================================================================
; First thing is to reset the stack to a better and more known
; place. The ROM may change, but wed like to get the stack
; in the correct place.
main:
cli;Stop interrupts till stack ok
xor AX,AX
mov ds,ax
mov es,ax
mov SS,AX;Work in stack just below this routine
mov ax,ORIGIN
mov sp,ax
sti
PUSH AX
        ;Show message
        mov ax,1301h
        mov bx,000ah
        mov cx,MyMsgLen
        mov dx,1500h
        mov bp,MyMsg+ORIGIN
        int 10h
        ;Hide the cursor
        mov ah,1
        mov cx,2000h
        int 10h
        ;Wait 10 seconds
        mov si, BIO_CLK
        mov edx, dword [si]
        mov ecx, edx
        add edx, 159;18.2*10 seconds
ReadKB:
;Change 5 bytes with install option
;Case Option:/f   Boot from floppy disk directly, do not waiting 8 seconds
;31H D2Hxor dx,dx
;E9H xxH 00Hjmp BiosMemory
;
;Case Option:/b   Boot from HIDDEN parition derectly (activate it and load it)
;31H D2Hxor dx,dx
;E9H xxH 00Hjmp Key_F7
;
;Case Default:       Show message and wait 8 second
        mov ah, 11h;Get keyboard status
        int 16h
        jz NoKeyPress
        mov ah,10h;Read a key (In old code, AH=0, can not read F11/F12...)
        int 16h
        xor dx,dx
cmp ah, KEY_ESCAPE
jz DX_HD;Press ESC to BOOT from Harddisk
cmp ah, KEY_BOOTFLOPPY
jnz RKB_1
mov dh, 0ffh;dh=0 Install INT13, else do not Install. Now DX=FF00H
jmp BiosMemory
RKB_1:
cmp ah, KEY_BOOTHIDDEN
jnz BiosMemory
Key_F7:
;If press Hot key, Boot From Hidden Partition. Now DX=0001H
;modify CH=80h in Int13 procedure
mov byte[ORIGIN+2+BootHiddenCode], BOOTHIDDENFLAG
        jmp DX_HD
NoKeyPress:
        cmp ecx, dword [si]
        jae L_0
        test cl,1
        jz  L_0
        mov ax,0e3eh; write ">" to show progressing
        mov bx,0004h
        int 10h
L_0:
        mov ecx, dword [si]
        cmp edx,ecx
        jae ReadKB
mov dh,0ffh;Do not install INT13. Now DX=FF00
DX_HD:
mov dl,080h;Boot from HD.
;DH=0 Install INT13, DH=FFH do not Install
;DL=0 Boot Floppy, DL=80H Boot HD
;Now:
;  ESC DX=FF80, F5 DX=FF00H, F7 DX=0080H, ANYKEY DX=0000H, TIMEOUT DX=FF80H
BiosMemory:
        ;Show the cursor
        mov ah,1
        mov cx,0d0eh
        int 10h
;BIOS MEMORY - 2KB
mov bx,BIO_MEM;bx=280H (KB)
mov ax,word [bx]
dec ax
cmp dh,0
jnz L_1
mov word [bx],ax;If DH=FF, Do not install
L_1:
;Move to High Memory. ex. 9fc0:0000
shl ax,6;ax=9fc0h SEG of top memory
mov es,ax;es=9fc0h
pop si;si=7c00h
push es;ready to RETF
xor di,di;di=0
cld
mov cx,100h
repnz movsw;move code to 9fc0:0000
cmp dh,0
jnz L_2;If DH=0ffh, Do not install
;modify Int13
mov si,4ch;Int13 13h*4
mov di,OLDINT13
;Save Old
mov eax,[si]
mov [es:di],eax
;cmp dh,0
;jnz L_2;If DH=0ffh, Do not install
push es
pop ax
shl eax,16
mov ax, MyInt13
mov [si],eax
L_2:;Jump to high address, 9fc0:00xx
push ds
pop es
mov bx,word Entre2
push bx;push 9fc0:Entre2
retf;跳到高端执行
Entre2:
        cmp dl,0;If DX <> 0, Load HD-MBR
        jnz L_3
ReadFD:;Read old boot sector from Floppy H1 T79 S18
        mov cx,4f12h
        mov dx,0100h
        jmp RunInt13
L_3:;Read from Harddisk H0 T0 S1 MBR
        mov cx,1
        mov dx,80h
RunInt13:
        mov ax,0201h
        mov bx,ORIGIN
        push ds
        push bx
int 13h
retf
; 2005-9-1
; 这里是原来用的花哨技巧代码,就是它们导致使用F7启动不了隐藏分区。因为这里读到的是原始的MBR
;        pushf        ;int 13h
;        push ds
;        push bx
; ------------------------------------------
;Jump to Old INT 13H
JmpFarInt13:
         DB 0eah ;JMP far OLDINT13
OLDINT13 DW 0,0
;End of Install-code
;Partition Flag Table  normal and hidden
FlagTable:
         dw 0111h, 0414h, 0616h, 0717h, 0b1bh, 0c1ch, 0e1eh
FlagTableEnd:
;My INT13h code
MyInt13:
cmp ah,2        ;Is Read?
jz Func2
cmp ah,42h      ;Is ExtRead?
jz Func42
JmpOldInt13:
jmp JmpFarInt13
Func2:
CMP DX,0080H;Is Harddisk and Head 0?
jnz JmpOldInt13
cmp cx,0001H;Is Track 0 Sector 1?
jnz JmpOldInt13
pushf;Simulate INT operator
push cs
CALL JmpFarInt13;Call old INT13
jc exit;Flase then Exit
push bx
push es
jmp EditFlag
Func42:
cmp dl,80h;Is Harddisk
jnz JmpOldInt13
push eax
xor eax,eax
cmp dword [si+8],eax;Is Sector 0, Low 32bit
jnz ExitFunc42
cmp dword [si+12],eax;Is Sector 0, Hight 32bit
jnz ExitFunc42
pop eax
pushf;Simulate INT operator
push cs
CALL JmpFarInt13;Call old INT13
jc exit;If flase then Exit
push bx
push es
mov bx, [si+4]; Fix BX,ES like Int13h Func02
mov es, [si+6]
jmp EditFlag
ExitFunc42:
pop eax
jmp JmpOldInt13
EditFlag:
push ax
push cx
push si; DS:SI -> DAP
push ds
push cs
pop ds
add bx, 01c2h; ES:BX -> Partition Flag
BootHiddenCode:
mov cx, 4; CL=4, CH will can be change by Makeimg.c with 1 to Modify the ActiveFlag
cmp1:
        mov si, FlagTable
cmp ch, BOOTHIDDENFLAG;If CH=BOOTHIDDENFLAG, Boot from hidden Partition
jnz nextFlag
mov byte [es:bx-4], 0;Clear Active Flag for boot from hidden partition
nextFlag:
        cld
        lodsw
        cmp si, FlagTableEnd
        jae nextPart
        cmp byte [es:bx], al
        jnz nextFlag
        mov byte [es:bx], ah
cmp ch,BOOTHIDDENFLAG;If CH=BOOTHIDDENFLAG, Boot from hidden Partition
jnz JmpNextFlag
mov byte [es:bx-4], 80h
xor ch, ch;Set CH=0h, Don';t modify the next.
JmpNextFlag:
        jmp nextFlag
nextPart:
add bx,10h
dec cl
ja cmp1
pop ds
pop si
pop cx
pop ax
pop es
pop bx
exit:
iret
; End of INT13H code
MyMsg    db "PartUnhide Loader, yisir.9126.com, 2005-9-5",13,10
;         db "Press any key to load RESTORE FLOPPY DISK...",13,10
MyMsgLen equ &#36;-MyMsg
times 510 -(&#36;-&#36;&#36;) db 0
BOOTFLAG db 55h,0aah

作者: turboy    时间: 2005-9-6 14:51
标题: 更新:制作显隐藏分区功能的软盘镜像文件工具,真正启动隐藏分区里的操作系统
[这个贴子最后由turboy在 2005/09/06 05:44pm 第 1 次编辑]

【目前最新版本】
  HFBOOT.ASM还是9月1日的,MAKEIMG.EXE在9月5日新增选项后编译
  MAKEIMG.EXE可以处理非1.44M软盘镜像了。
[UploadFile=build050905_1125999869.zip]
  新的命令行如下:
  MAKEIMG  源镜像文件名  [目的镜像文件名] [选项]
   源镜像文件名  用来制作显隐藏分区功能的软盘镜像文件
   目的镜像文件名 将要生成的带显隐藏分区功能的软盘镜像文件,可省略,默认值为YISIR.IMG
  可选参数:
   /f       生成的程序在计算机启动时直接从软盘启动。
   /b       生成的程序在计算机启动时直接激活隐藏分区并启动。(注意隐藏分区中必须已安装了操作系统,此功能也未写MBR)
  无 /f 和 /b 参数时将出现提示并等待8秒,这期间按任意键从软盘启动,否则从硬盘启动且不加载显隐藏分区功能。
   /k:n      n=1-4,6-12。设置直接激活隐藏分区并启动时用的按键,可以是F1-F4、F6-F12
     /p:nn=0 - 255 ,自定义构成进度条的字符,默认是62即“>”,象219(实心方块)、220、223也挺好看
     /r:nn=1 - 24 ,自定义提示信息的在屏幕中的开始行,默认是21行,即在21行显示提示,22行显示进度条。
   /u       卸载本程序,将由本程序生成的镜像文件还原,结果保存成一个镜像文件。
希望下载和使用了这个软件的朋友跟帖或到我的小站留言谈一下看法。

作者: crshen    时间: 2005-9-6 15:06
标题: 更新:制作显隐藏分区功能的软盘镜像文件工具,真正启动隐藏分区里的操作系统
turboy正好在线,我想应该将相应的sys.exe修改一下,以适应这张制作后的软盘。
作者: turboy    时间: 2005-9-6 15:30
标题: 更新:制作显隐藏分区功能的软盘镜像文件工具,真正启动隐藏分区里的操作系统
[这个贴子最后由turboy在 2005/09/06 05:46pm 第 1 次编辑]

MAKEIMG程序还有很多修改的余地,我正在抽时间做:
可以判断软盘镜像大小来自动修改原引导扇区的保存点(分析BPB即可,已实现,在上面下载);
可以在软盘的根目录下建一个文件来保存原引导扇区(DOS下好说,但对镜像难点儿);
可以在DOS下直接处理A驱动器中的启动盘(这个比较容易);
可以安装到NT LOADER、GRUB下;
可以安装到MBR中(又转回去了,可也有一些用途)
和MS的SYS.EXE的冲突肯定有,可以在HFBOOT.ASM里面加入新代码来重定向A盘引导区读写操作来实现,可是现在空间已经满了。不过说回来,一般是先做好了启动功能后再加上这个功能的,所以必要性不大,而且现在还用物理软盘的人也很少了。
作者: crshen    时间: 2005-9-6 15:55
标题: 更新:制作显隐藏分区功能的软盘镜像文件工具,真正启动隐藏分区里的操作系统
程序太大,以至于没有足够的提示信息,我正在做的图形界面安装程序中,想把原来的提示“Press any key to load RESTORE FLOPPY DISK...”,改成Boot Hide:F7 Fly:F5 或类似的,应该要好点,说不定什么时候用,自己都不记得各个键的功能了。
作者: crshen    时间: 2005-9-6 20:50
标题: 更新:制作显隐藏分区功能的软盘镜像文件工具,真正启动隐藏分区里的操作系统
[UploadFile=1_1126010833.jpg]
[UploadFile=2_1126010847.jpg]
[UploadFile=unhide_1126010896.rar]
已制作安装软件的图形界面,启动信息为程序内置,生成映像文件与turboy的最新版完全相同,欢迎下载试用。
作者: turboy    时间: 2005-9-6 21:24
标题: 更新:制作显隐藏分区功能的软盘镜像文件工具,真正启动隐藏分区里的操作系统
动作挺快的!
界面做的不错,挺简洁。我提个建议:在单击“映象安装”后自动转到“自定义”页,“启动隐藏分区按键”可以做个下拉列表框,就可以用到F1—F12键了。

作者: crshen    时间: 2005-9-6 21:59
标题: 更新:制作显隐藏分区功能的软盘镜像文件工具,真正启动隐藏分区里的操作系统
[UploadFile=1_1126014974.jpg]
[UploadFile=unhide_1126014986.rar]
楼上说的有理,已更改为安装成功后自动转到设置页面,不过定义F1-F10等也没什么意思,有3个应该足够了,反正大家最熟悉的还是F11。
作者: surry100    时间: 2005-9-7 00:02
标题: 更新:制作显隐藏分区功能的软盘镜像文件工具,真正启动隐藏分区里的操作系统
支持,强呵!顶。。。
不过这样操作来很麻烦。
我一般是用PM分三个可引导主分区,一个备份及恢复,二个留安装系统。
多重引导可以用BootMagic磁盘管理工具
不装多重引导,也可以用PM带的pqboot for DOS 或PQ Boot for Windows来指定那个分区启动系统
这样一个主分区启动系统后,其它二个主分区自动隐藏。备份及恢复非常方便!


作者: turboy    时间: 2005-9-9 11:41
标题: 更新:制作显隐藏分区功能的软盘镜像文件工具,真正启动隐藏分区里的操作系统
[这个贴子最后由turboy在 2005/09/09 11:52am 第 1 次编辑]
下面引用由crshen2005/09/06 08:50pm 发表的内容:
已制作安装软件的图形界面,启动信息为程序内置,生成映像文件与turboy的最新版完全相同,欢迎下载试用。
你可以用下面的算法来修改,就可以达到处理非1.44M软盘启动的目的。
&#35;define BPB_BytesPerSector  0x0B+0X00
&#35;define BPB_TotalSectors    0x0B+0x08
&#35;define BPB_SecPerTrack     0x0B+0X0D
&#35;define BPB_NumHeads       0x0B+0X0F
//Get BPB data
struct BPB
{
    WORD  BytesPerSector;   // 00 DW 512; Size of a physical sector
    BYTE  SecsPerClust;     // 02 DB 1; Sectors per allocation unit
    WORD  ReservedSecs;     // 03 DW 1; Number of reserved sectors
    WORD  NumFats;          // 05 DB 2; Number of fats
    WORD  NumDirEntries;    // 06 DW 00E0h; Number of direc entries
    WORD  TotalSectors;     // 08 DW 0B40H; Number of sectors - number of hidden
                             //; sectors (0 when 32 bit sector number)
    BYTE  MediaByte;        // 0A DB 0F0H; MediaByte byte
    WORD  NumFatSecs;       // 0B DW 9; Number of fat sectors
    WORD  SecPerTrack;      // 0D DW 18; Sectors per track
    WORD  NumHeads;         // 0F DW 2; Number of drive heads
    DWORD HiddenSecs;       // 11 DD 0; Number of hidden sectors
    DWORD BigTotalSecs;     // 15 DD 0; 32 bit version of number of sectors
    BYTE  BootDrv;          // 19 DB 0h
    BYTE  CurrentHead;      // 1A DB 0h; Current Head
    BYTE  ExtBootSig;       // 1B DB 41
    DWORD SerialNum;        // 1C DD 20050628h
    BYTE  VolumeLabel[12];  // 20 DB "YISIR_LOADER"
    BYTE  FatId[5];            // DB "FAT12"
};
// BYTE buf[512]的内存中已放入汇编好的引导代码
// BPB部分[0X0C-0X31]的数据复制原引导扇区的BPB
bpb.BytesPerSector = buf[BPB_BytesPerSector+1]*256+buf[BPB_BytesPerSector];
bpb.TotalSectors   = buf[BPB_TotalSectors+1]*256+buf[BPB_TotalSectors];
bpb.SecPerTrack    = buf[BPB_SecPerTrack+1]*256+buf[BPB_SecPerTrack];
bpb.NumHeads       = buf[BPB_NumHeads+1]*256+buf[BPB_NumHeads];
floppy_size = bpb.BytesPerSector * bpb.TotalSectors;
// 修改下面指令中的操作数
// 239 00000107 B9124F                          mov cx,4f12h
// 240 0000010A BA0001                          mov dx,0100h
// 241 0000010D E90600                          jmp RunInt13
buf[0x108]=bpb.SecPerTrack;
buf[0x109]=bpb.TotalSectors/(bpb.NumHeads*bpb.SecPerTrack)-1;
buf[0x10C]=bpb.NumHeads-1;

作者: crshen    时间: 2005-9-10 18:57
标题: 更新:制作显隐藏分区功能的软盘镜像文件工具,真正启动隐藏分区里的操作系统
[这个贴子最后由crshen在 2005/09/10 08:07pm 第 2 次编辑]

谢谢TurboY关注,现发布1.1版,主要改进:
1. 如上,可支持非1.44M启动软盘
2. 更改了启动时的提示,避免忘记每个按键的功能
3. 本程序与TurboY的安装程序兼容,但因为更改了启动提示信息,交叉使用时,建议只用于卸载。
[UploadFile=C6F4B6AFCCE1CABE_1126349811.jpg]
[UploadFile=unhide_1126353931.rar]
作者: turboy    时间: 2005-9-11 02:50
标题: 更新:制作显隐藏分区功能的软盘镜像文件工具,真正启动隐藏分区里的操作系统
再加一个类似“一键恢复”的用法——用NT LOADER来启动隐藏分区中的系统,供有兴趣的朋友尝试!
准备工作(假设条件):
1、硬盘中已有两个主分区。1号主分区为激活分区,安装有日常用的WIN2K/XP系统;2号主分区(FAT16/32)作为备份分区。这应该是通常的情况,备份分区也可是3或4。
方法步骤:
2、用WIN98系统盘重启并向备份分区中SYS,使之具备启动DOS的能力。
3、将GHOST.EXE复制到备份分区的根目录下。
4、用GDISK 1 /HIDE /P:2 将备份分区隐藏。
5、用前面我提供的MAKEIMG A.IMG B.IMG /b 制作出一个直接启动到隐藏分区的引导镜像,利用WINHEX取出前512字节,另存为C:\BOOTHIDE.BIN。
6、去除C:\BOOT.INI文件的系统、只读、隐藏属性后用记事本打开编辑。在C:\BOOT.INI的最后加入下面一行:
  C:\BOOTHIDE.BIN="启动系统备份&恢复"
7、保存并关闭文件,重启。
启动时如果选择“启动系统备份&恢复”项,系统将启动隐藏的备份分区到DOS提示符。此时的备份分区盘符为C:。
此时如需备份1号主分区上的系统,只需输入:
  GHOST -CLONE,mode=pdump,src=1:1,dst=\SYSBCK.GHO -SURE -Z1 -FX -BATCH -SPAN -AUTO
即可。日后恢复时,也同样如此启动,输入:
  GHOST -CLONE,mode=pload,src=\SYSBCK.GHO:1,dst=1:1 -SURE -FX -BATCH -SPAN -AUTO
如果使用WBAT等对这个思路进行一下包装,应该也是一个很实用的“一键恢复”。这样的批处理不难,大家可以自由发挥,我就不写样本了。
上面第5步所要制作的文件,如果不想麻烦,可以直接在附件中下载。
[UploadFile=boothide_1126378145.zip]
作者: wang6610    时间: 2005-10-23 23:42
标题: 更新:制作显隐藏分区功能的软盘镜像文件工具,真正启动隐藏分区里的操作系统
    用制作显隐藏分区功能启动软盘镜像文件的工具制作的软盘不能在B:驱启动。现象是:
按F5后它不读B:而是读A:
                                       两位大侠能否再出个修正版。
                                                     谢谢!!!!!!!!

作者: gmy    时间: 2005-10-24 14:18
标题: 更新:制作显隐藏分区功能的软盘镜像文件工具,真正启动隐藏分区里的操作系统
支持!好软件!有几个疑问:
1,WINXP的磁盘管理器 是否能看到 隐含分区?
2,在非HFBOOT软盘环境下,GHOST可以备份GHO到隐含分区里吗?
3,一个硬盘5个分区,怎么手动把最后一个(第5个分区变成隐藏分区?不用PQ,用16进制手动!)

作者: wang6610    时间: 2005-10-25 07:17
标题: 更新:制作显隐藏分区功能的软盘镜像文件工具,真正启动隐藏分区里的操作系统
希望B:驱   A:驱都能启动
作者: 紫狐    时间: 2005-10-25 09:45
标题: 更新:制作显隐藏分区功能的软盘镜像文件工具,真正启动隐藏分区里的操作系统
下面引用由gmy2005/10/24 02:18pm 发表的内容:
支持!好软件!有几个疑问:
1,WINXP的磁盘管理器 是否能看到 隐含分区?
2,在非HFBOOT软盘环境下,GHOST可以备份GHO到隐含分区里吗?
3,一个硬盘5个分区,怎么手动把最后一个(第5个分区变成隐藏分区?不用P ...
1:可以看到分区存在,但是不能看到内容;
2:可以;
3:可以使用gdisk在spfdisk实现。
作者: crshen    时间: 2005-10-25 19:39
标题: 更新:制作显隐藏分区功能的软盘镜像文件工具,真正启动隐藏分区里的操作系统
下面引用由gmy2005/10/24 02:18pm 发表的内容:
3,一个硬盘5个分区,怎么手动把最后一个(第5个分区变成隐藏分区?不用P ...
这个问题容易解决,我以前写过一个备份/恢复所有分区表的C语言程序,在新DOS时代好像有源代码,修改一下就可以了,如果有需要,可以再专制一个,大概要11月1日才有时间,月底有职称考试,紧张背书中,没空了。
作者: crshen    时间: 2005-10-25 19:51
标题: 更新:制作显隐藏分区功能的软盘镜像文件工具,真正启动隐藏分区里的操作系统
下面引用由wang66102005/10/23 11:42pm 发表的内容:
用制作显隐藏分区功能启动软盘镜像文件的工具制作的软盘不能在B:驱启动。现象是:
按F5后它不读B:而是读A:
源程序中有一段:
ReadFD:;Read old boot sector from Floppy H1 T79 S18
       mov cx,4f12h
       mov dx,0100h
       jmp RunInt13
其中DL为磁盘号,本程序中为00,即A盘,改为01为B盘,INT 13读盘中断说明如下:
INT 13 - DISK - READ SECTOR(S) INTO MEMORY
AH = 02h
AL = number of sectors to read (must be nonzero)
CH = low eight bits of cylinder number
CL = sector number 1-63 (bits 0-5)
     high two bits of cylinder (bits 6-7, hard disk only)
DH = head number
DL = drive number (bit 7 set for hard disk)
ES:BX -> data buffer
Return: CF set on error
    if AH = 11h (corrected ECC error), AL = burst length
CF clear if successful
AH = status
AL = number of sectors transferred
由于程序已近512字节极限,且大多数人不会用到B盘,所以修改的意义不大。否则删除提示信息,到时又不知按什么键了,也不好。
作者: wang6610    时间: 2005-10-26 07:52
标题: 更新:制作显隐藏分区功能的软盘镜像文件工具,真正启动隐藏分区里的操作系统
[这个贴子最后由wang6610在 2005/10/26 07:56am 第 2 次编辑]
下面引用由crshen2005/10/25 07:51pm 发表的内容:
源程序中有一段:
ReadFD:;Read old boot sector from Floppy H1 T79 S18
      mov cx,4f12h
      mov dx,0100h
      jmp RunInt13
其中DL为磁盘号,本程序中为00,即A盘,改为01为B盘,INT 13读盘中断说明如下:
INT 13 - DISK - READ SECTOR(S) INTO MEMORY
AH = 02h
AL = number of sectors to read (must be nonzero)
CH = low eight bits of cylinder number
CL = sector number 1-63 (bits 0-5)
    high two bits of cylinder (bits 6-7, hard disk only)
DH = head number
DL = drive number (bit 7 set for hard disk)
ES:BX -> data buffer
Return: CF set on error
   if AH = 11h (corrected ECC error), AL = burst length
CF clear if successful
AH = status
AL = number of sectors transferred
由于程序已近512字节极限,且大多数人不会用到B盘,所以修改的意义不大。否则删除提示信息,到时又不知按什么键了,也不好。
  

谢谢您在百忙的回复!!!
等您有时间:
1. 如可能的话给俺再编译一个B:驱   A:驱都能启动或只从B:驱启动的版本(无提示也可以)。
2. 修改以前unhide制做好的IMG几个字节能否实现B:驱
作者: crshen    时间: 2005-10-26 15:02
标题: 更新:制作显隐藏分区功能的软盘镜像文件工具,真正启动隐藏分区里的操作系统
下面引用由wang66102005/10/26 07:52am 发表的内容:
2. 修改以前unhide制做好的IMG几个字节能否实现B:驱
急用的话,在以前制作好的IMG文件中最后512字节中,查找B9124FBA0001E90600,将BA0001中的00改为01试试,我没有B驱,未测试。
作者: wang6610    时间: 2005-10-27 21:58
标题: 更新:制作显隐藏分区功能的软盘镜像文件工具,真正启动隐藏分区里的操作系统
下面引用由crshen2005/10/26 03:02pm 发表的内容:
急用的话,在以前制作好的IMG文件中最后512字节中,查找B9124FBA0001E90600,将BA0001中的00改为01试试,我没有B驱,未测试。

在img后512字节未能找到想关字节,还是等您有时间再帮我编译一个B:专用的吧。
         十分感谢!!!
作者: passion    时间: 2005-10-29 10:02
标题: 更新:制作显隐藏分区功能的软盘镜像文件工具,真正启动隐藏分区里的操作系统
en
作者: Turboy    时间: 2005-10-31 11:31
标题: 更新:制作显隐藏分区功能的软盘镜像文件工具,真正启动隐藏分区里的操作系统
不是“最后512字节中”,而是在最开始的512字节中。最后512字节中是原来的DOS引导程序!
我现在发现这个程序还有个问题,正在想办法。
作者: wang6610    时间: 2005-10-31 13:42
标题: 更新:制作显隐藏分区功能的软盘镜像文件工具,真正启动隐藏分区里的操作系统
下面引用由turboy2005/10/31 11:31am 发表的内容:
不是“最后512字节中”,而是在最开始的512字节中。最后512字节中是原来的DOS引导程序!
我现在发现这个程序还有个问题,正在想办法。

感谢!!!
更佩服您的精益求精的干劲!!!

作者: crshen    时间: 2005-10-31 17:00
标题: 更新:制作显隐藏分区功能的软盘镜像文件工具,真正启动隐藏分区里的操作系统
原来是turboy 来了,那就不用我辛苦了,不知道又发现什么问题啦?
作者: heho    时间: 2005-10-31 21:30
标题: 更新:制作显隐藏分区功能的软盘镜像文件工具,真正启动隐藏分区里的操作系统
我按师傅们说的作了,都没作成功,本人太采了,不过我很想搞明白呀,师傅啊
!!!
作者: Turboy    时间: 2005-11-1 10:20
标题: 更新:制作显隐藏分区功能的软盘镜像文件工具,真正启动隐藏分区里的操作系统
问题其实早就想到了,程序其实是对后来启动的系统虚报了一个MBR,这个MBR中的隐藏分区的ID被改成了正常的ID,程序中没有任何写MBR的代码,表面上不会对MBR造成改写。
可是也有意外,如果用户在用此程序启动电脑后又对MBR进行了写入(比如FDISK /MBR),这时写入的MBR就不是原来的MBR了,结果会使隐藏分区真正显示出来,因为我只处理了INT13的读操作,没有处理写操作(这样代码就太长了)。
我现在想到的方法是:只骗DOS盘符,不骗应用程序。即再写一个卸载程序,在DOS启动后(盘符已经分配),恢复原来的INT13处理,这样隐藏分区也有盘符了,应用程序读出的MBR也是正确的了。目前正在写。
作者: 紫狐    时间: 2005-11-1 16:48
标题: 更新:制作显隐藏分区功能的软盘镜像文件工具,真正启动隐藏分区里的操作系统
期待新版本~~
作者: liu523    时间: 2005-11-2 00:01
标题: 更新:制作显隐藏分区功能的软盘镜像文件工具,真正启动隐藏分区里的操作系统
下载不了呀!
请楼主重新上传一下!
或是发到我的邮信里去!   liu523@avl.com.cn
谢谢了!
作者: 诚信电脑技术    时间: 2005-11-2 11:10
标题: 更新:制作显隐藏分区功能的软盘镜像文件工具,真正启动隐藏分区里的操作系统
加 Norton PQ 8.05 或者 Norton PTexplorer 和 NTFSDOS 5.03 到启动光盘不就行了吗?再添加个选择菜单就更好了。
作者: iceking1    时间: 2005-11-14 22:15
标题: 更新:制作显隐藏分区功能的软盘镜像文件工具,真正启动隐藏分区里的操作系统
Very useful thank you so much and PUSH
作者: 紫狐    时间: 2005-11-26 17:30
标题: 更新:制作显隐藏分区功能的软盘镜像文件工具,真正启动隐藏分区里的操作系统
下面引用由turboy2005/11/01 10:20am 发表的内容:
问题其实早就想到了,程序其实是对后来启动的系统虚报了一个MBR,这个MBR中的隐藏分区的ID被改成了正常的ID,程序中没有任何写MBR的代码,表面上不会对MBR造成改写。
可是也有意外,如果用户在用此程序启动电脑 ...
发现有一个问题就是用处理过的软盘启动系统后,用pq创建一个新的主分区后,pq默认该主分区是隐藏的,取消隐藏后重新启动,该分区还是隐藏的,期待新的版本出现。
作者: turboy    时间: 2006-1-19 16:18
标题: 更新:制作显隐藏分区功能的软盘镜像文件工具,真正启动隐藏分区里的操作系统
下面引用由turboy2005/11/01 10:20am 发表的内容:
问题其实早就想到了,程序其实是对后来启动的系统虚报了一个MBR,这个MBR中的隐藏分区的ID被改成了正常的ID,程序中没有任何写MBR的代码,表面上不会对MBR造成改写。
可是也有意外,如果用户在用此程序启动电脑 ...
新加入一个配套程序UNLOAD.COM,用于还原程序所修改的INT13中断为系统原值。在DOS启动
后,隐藏分区已经分到了盘符,前面修改INT13的程序代码已经不再有用,继续运行还可能导致一些意外,所以还是还原成原来的INT13程序为好。
这几天学校终于放假了,所以把前面的我的那个思路写了出来。只要在启动后运行一次UNLOAD.COM即可。
[UploadFile=boothide060119_1137658632.zip]
作者: 天风    时间: 2006-1-19 20:55
标题: 更新:制作显隐藏分区功能的软盘镜像文件工具,真正启动隐藏分区里的操作系统
[这个贴子最后由hnlyzhd在 2006/01/19 09:18pm 第 1 次编辑]

测试完毕,报告 BUG
这个版本基本上已经很完美 了.可以完美的支持基于IBM的F11和PQ创建的隐藏分区.
但是不支持ACRONIS TRUE IMAGE创建的隐藏分区,也不支持WASAY科技的HIDE.COM隐藏的分区,下边是我的测试环境和创建好的IMG,请楼主测试更正!
IMG中的内容:
HIDE.COM是自动隐藏硬盘最后分区的小程序
TIDOS是ACRONIS在DOS下的备份恢复程序
GDISK命令行分区工具
http://www.exun8.com/wuyou/hnlyzhd/DOS%E5%B7%A5%E5%85%B7%E7%9B%98/hdie-test.rar
作者: turboy    时间: 2006-1-19 22:39
标题: 更新:制作显隐藏分区功能的软盘镜像文件工具,真正启动隐藏分区里的操作系统
谢谢hnlyzhd版主的长期关注!
这个程序简单地在INT13级别上修改了一下下级程序读出的分区表,只是做了一下分区ID的对照修改,如:
;Partition Flag Table  normal and hidden
FlagTable:
         dw 0111h, 0414h, 0616h, 0717h, 0b1bh, 0c1ch, 0e1eh
FlagTableEnd:
这就是几种常见的以FAT文件系统为基础的隐藏分区类型罢了,至于那些特殊的分区,我还不知道它们的文件系统格式。何况这个程序也不是一个IFS驱动,只是一个小小的启动管理工具,能为大家带来方便就好了!
另:为UNLOAD.COM程序补一个图,演示一下:
[UploadFile=screen_1137681571.gif]
作者: 天风    时间: 2006-1-19 23:20
标题: 更新:制作显隐藏分区功能的软盘镜像文件工具,真正启动隐藏分区里的操作系统
那么能否请易老师写个简单的程序来自动隐藏和显示硬盘最后分区呢!
就像我上面的提供的HIDE.COM那样,只是这个HIDE.COM没有反隐藏参数!
如果易老师有时间的话写一个方便大家,这样来配合GHOST或者其他备份程序就好了!
因为有很多人不会使用GDISK来隐藏吧!
作者: 天风    时间: 2006-1-19 23:37
标题: 更新:制作显隐藏分区功能的软盘镜像文件工具,真正启动隐藏分区里的操作系统
再次报告所发现的问题:
按下F7时如果硬盘的MBR上有原来的F11功能,才能够引导隐藏分区进行启动,如果MBR上的F11功能已经被破坏,隐藏分区虽然仍是可以引导的,但并不能被引导,不知算不算BUG.
作者: 14800    时间: 2006-1-20 09:53
标题: 更新:制作显隐藏分区功能的软盘镜像文件工具,真正启动隐藏分区里的操作系统
下面引用由hnlyzhd2006/01/19 08:55pm 发表的内容:
测试完毕,报告 BUG
这个版本基本上已经很完美 了.可以完美的支持基于IBM的F11和PQ创建的隐藏分区.
但是不支持ACRONIS TRUE IMAGE创建的隐藏分区,也不支持WASAY科技的HIDE.COM隐藏的分区,下边是我的测试环境和创 ...
谢谢!
链接无法点击下载.
请大家到斑竹空间选择下载
http://www.exun8.com/wuyou/hnlyzhd
  


作者: 天风    时间: 2006-1-20 09:57
标题: 更新:制作显隐藏分区功能的软盘镜像文件工具,真正启动隐藏分区里的操作系统
我已经删除了测试环境,请大家直接下载制作好的IMG文件
http://www.exun8.com/wuyou/hnlyzhd/DOS%E5%B7%A5%E5%85%B7%E7%9B%98/
先详细看说明
作者: 14800    时间: 2006-1-20 10:39
标题: 更新:制作显隐藏分区功能的软盘镜像文件工具,真正启动隐藏分区里的操作系统
下面引用由hnlyzhd2006/01/20 09:57am 发表的内容:
我已经删除了测试环境,请大家直接下载制作好的IMG文件
http://www.exun8.com/wuyou/hnlyzhd/DOS%E5%B7%A5%E5%85%B7%E7%9B%98/
先详细看说明
再次下载,进入DOS环境后,屏幕上最左的菜单每个命令提示第一个字母看不清,能否向右边移过来一点.
谢谢!
作者: 天风    时间: 2006-1-20 10:47
标题: 更新:制作显隐藏分区功能的软盘镜像文件工具,真正启动隐藏分区里的操作系统
[这个贴子最后由hnlyzhd在 2006/01/20 11:59am 第 1 次编辑]

也发现这个问题,原因已经找到,是新技术虚拟写屏的BUG所造成的,已经取消虚拟写屏,请重新下载!
感谢楼上报告 BUG !
作者: 14800    时间: 2006-1-20 12:22
标题: 更新:制作显隐藏分区功能的软盘镜像文件工具,真正启动隐藏分区里的操作系统
下面引用由hnlyzhd2006/01/20 10:47am 发表的内容:
也发现这个问题,原因已经找到,是新技术虚拟写屏的BUG所造成的,已经取消虚拟写屏,请重新下载!
感谢楼上报告 BUG !
再次谢谢!
实测联想隐藏分区无法看见和SYS,期待未来的版本...
作者: 天风    时间: 2006-1-20 12:38
标题: 更新:制作显隐藏分区功能的软盘镜像文件工具,真正启动隐藏分区里的操作系统
大家可以提取上面的启动盘中的HIDE.COM和LYBW.COM,运行HIDE.COM可以自动隐藏硬盘的最后分区,LYBW是个备份工具,但速度比较慢,打开后有个选项是释放隐藏分区的,可以把刚才HIDE隐藏分区给反隐藏!
作者: 紫狐    时间: 2006-1-20 17:40
标题: 更新:制作显隐藏分区功能的软盘镜像文件工具,真正启动隐藏分区里的操作系统
下面引用由148002006/01/20 12:22pm 发表的内容:
再次谢谢!
实测联想隐藏分区无法看见和SYS,期待未来的版本...
联想的隐藏分区是HPA分区,要支持这个恐怕比较麻烦。
作者: turboy    时间: 2006-1-21 22:19
标题: 更新:制作显隐藏分区功能的软盘镜像文件工具,真正启动隐藏分区里的操作系统
下面引用由hnlyzhd2006/01/19 11:37pm 发表的内容:
再次报告所发现的问题:
按下F7时如果硬盘的MBR上有原来的F11功能,才能够引导隐藏分区进行启动,如果MBR上的F11功能已经被破坏,隐藏分区虽然仍是可以引导的,但并不能被引导,不知算不算BUG.
我这个程序在只做了修改分区表的活儿,具体引导工作还是转到MBR中原来的硬盘引导程序来做的。如果MBR中的引导程序不能工作了,此程序也不能工作——但是由于硬盘的读写是以扇区为单位的,通常MBR中的引导程序坏了,分区表也难保完好,这个程序只能在MBR正常的情况下生存和工作。
如果要写一个HIDE.COM的反作用程序,也不是特别难,不需编程,就用GDISK/AEFDISK等加上WBAT就可以做到的。可是,基于DOS本身等原因,此程序目前只能让隐藏的“主分区”中的DOS正常启动,所以限制也不少。而这种类型的分区的生成,不是每个人都能熟练操作在。不过,有些“一徤恢复”中利用PQMAGIC脚本达成的自动分区划分功能,也能稍加改动就用过来。
我想在512字节中已经不能再加新的功能了,把上面的自动分区、安装、备份和恢复功能完善一下,让它能成为大家都很容易用的工具,这才是正事。
作者: gamesrjs    时间: 2006-1-21 23:24
标题: 更新:制作显隐藏分区功能的软盘镜像文件工具,真正启动隐藏分区里的操作系统
从头到尾读了一遍,感谢turboy,crshen等DX的贡献!
作者: turboy    时间: 2006-1-22 11:29
标题: 更新:制作显隐藏分区功能的软盘镜像文件工具,真正启动隐藏分区里的操作系统
  我试过了,ACRONIS SECURE ZONE分区的ID是0XBC,其实就是一个LBA FAT32分区。所以你用DISKGEN来修改分区表中ACRONIS SECURE ZONE分区的ID为0C,就可以在DOS/WINDOWS启动后作为普通分区读写它了,此时可以在此分区中看到:用TI.EXE在保护区中所做的映像,就是一个名为AAA.TIB的文件。
  但是这个分区是一个逻辑分区,是不能在它上面启动DOS的。所以ACRONIS的F11程序,应该用的是其它操作系统,我在其引导软盘映像中看到了BOOTWIZ.SYS,这可能是就是它所用的操作系统,从它的配置文件BOOTWIZ.CFG来看和DOS实在是太像了。它究竟是什么呢?希望见过的朋友介绍一下。

作者: 天风    时间: 2006-1-22 22:33
标题: 更新:制作显隐藏分区功能的软盘镜像文件工具,真正启动隐藏分区里的操作系统
确实是BOOTWIZ.SYS是个小DOS系统,并且可以确定的说是一个很特别的FREEDOS
作者: wxly    时间: 2006-2-16 13:57
标题: 更新:制作显隐藏分区功能的软盘镜像文件工具,真正启动隐藏分区里的操作系统
好!!好!!!好
作者: wang6610    时间: 2006-2-17 11:14
标题: 更新:制作显隐藏分区功能的软盘镜像文件工具,真正启动隐藏分区里的操作系统
以下问题不知是否已解决?
“用制作显隐藏分区功能启动软盘镜像文件的工具制作的软盘不能在B:驱启动。现象是:
按F5后它不读B:而是读A:
                                      两位大侠能否再出个修正版。
                                                    谢谢!!!!!!!!”

作者: 紫狐    时间: 2008-10-13 10:34
楼主,现在很多已经使用0x12的隐藏分区了,能不能更新一下程序,使能够支持0x12隐藏分区?
作者: turboy    时间: 2008-10-21 11:41
多谢大家还记得。
2008年10月21日应天风、紫狐的要求又翻出源程序来,加上了对0x12->0x0c分区的映射。
MAKEIMG.EXE现在是用VC6编译的Windows控制台程序了。
更新的程序在顶楼下载。
88楼的问题,我暂时还没解决,不过可能不会去做了。现在软驱都几乎消失了,这个程序的用途也就仅仅是制作供GRUB用的映像了。
作者: 天风    时间: 2008-10-21 12:33
又让易教师辛苦了,呵呵,支持,感谢中!
作者: wang6610    时间: 2008-10-21 13:09
romos中也是88楼的表现,所以88楼的问题易老师还是解决一下吧。
作者: come2jojo    时间: 2008-10-21 13:14
恭喜,楼主苦修三年,终成正果
下来试试
作者: 紫狐    时间: 2008-10-21 16:22
新版本运行的时候会提示内存不能为只读,且没写入引导管理到img文件,不知道其他下载的朋友有没有这个现象。
作者: netwinxp    时间: 2008-10-21 22:31
...为了让地址从7C00开始...

如果使用masm的话可以试试——
xxxx segment at 07c0H
org 0000H

另外RAM的PE好像可以直接从隐藏分区启动。

[ 本帖最后由 netwinxp 于 2008-10-21 22:34 编辑 ]
作者: 公子来    时间: 2008-10-26 17:24
好文章。收藏!!!!!!
作者: 公子来    时间: 2008-10-26 17:25
不知道联想锋行系列的“隐藏服务区”有没有办法查看和操作啊?
作者: coolman33    时间: 2008-10-27 11:17
好帖,学习啦。
楼主辛苦。
作者: 87388881    时间: 2008-10-27 15:08
还不错,,但这个意义感觉还不大
作者: endless1397    时间: 2008-10-27 16:14
学习了,谢谢




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