无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站投放广告、加入VIP会员,请联系 微信:wuyouceo
楼主: turboy
打印 上一主题 下一主题

更新:制作显隐藏分区功能的软盘镜像文件工具,真正启动隐藏分区里的操作系统

[复制链接]
31#
发表于 2005-9-3 18:15:03 | 只看该作者

更新:制作显隐藏分区功能的软盘镜像文件工具,真正启动隐藏分区里的操作系统

[这个贴子最后由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
回复

使用道具 举报

32#
发表于 2005-9-3 21:19:39 | 只看该作者

更新:制作显隐藏分区功能的软盘镜像文件工具,真正启动隐藏分区里的操作系统

这个想法的确好,我虽然是菜鸟,也为楼主和crshen的辛苦探索顶一下,我要长 期关注这个软件
回复

使用道具 举报

33#
发表于 2005-9-5 08:36:58 | 只看该作者

更新:制作显隐藏分区功能的软盘镜像文件工具,真正启动隐藏分区里的操作系统

程序从流程上看已经没有什么严重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  软盘启动
回复

使用道具 举报

34#
发表于 2005-9-5 08:59:38 | 只看该作者

更新:制作显隐藏分区功能的软盘镜像文件工具,真正启动隐藏分区里的操作系统

顺便做了个简单的图形界面安装卸载程序,学习用易语言写的,因为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内容写到第一扇区;卸载时,将末扇区内容写到首扇区,并将末扇区清零。因此,请注意:只有已经安装后的映像才能使用卸载,否则就……,幸好默认是保留备份的,哈哈。
回复

使用道具 举报

35#
发表于 2005-9-5 09:00:36 | 只看该作者

更新:制作显隐藏分区功能的软盘镜像文件工具,真正启动隐藏分区里的操作系统

[这个贴子最后由crshen在 2005/09/05 09:03am 第 1 次编辑]

[UploadFile=0901_1125882018.rar]分卷一
[UploadFile=0901_1125882056.rar]分卷二
[UploadFile=0901_1125882078.rar]分卷三
回复

使用道具 举报

36#
 楼主| 发表于 2005-9-5 10:57:35 | 只看该作者

更新:制作显隐藏分区功能的软盘镜像文件工具,真正启动隐藏分区里的操作系统

[这个贴子最后由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的用户。
另外,我就姓易,可惜对易语言一点也不懂……
回复

使用道具 举报

37#
发表于 2005-9-6 03:43:18 | 只看该作者

更新:制作显隐藏分区功能的软盘镜像文件工具,真正启动隐藏分区里的操作系统

有点意思.
回复

使用道具 举报

38#
发表于 2005-9-6 14:03:46 | 只看该作者

更新:制作显隐藏分区功能的软盘镜像文件工具,真正启动隐藏分区里的操作系统

学习,学习,试用看
回复

使用道具 举报

39#
 楼主| 发表于 2005-9-6 14:45:19 | 只看该作者

更新:制作显隐藏分区功能的软盘镜像文件工具,真正启动隐藏分区里的操作系统

  感谢各位朋友的关注,为方便感兴趣的朋友改进,源程序开放。先公开引导区模块(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
回复

使用道具 举报

40#
 楼主| 发表于 2005-9-6 14:51:24 | 只看该作者

更新:制作显隐藏分区功能的软盘镜像文件工具,真正启动隐藏分区里的操作系统

[这个贴子最后由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       卸载本程序,将由本程序生成的镜像文件还原,结果保存成一个镜像文件。
希望下载和使用了这个软件的朋友跟帖或到我的小站留言谈一下看法。
回复

使用道具 举报

41#
发表于 2005-9-6 15:06:22 | 只看该作者

更新:制作显隐藏分区功能的软盘镜像文件工具,真正启动隐藏分区里的操作系统

turboy正好在线,我想应该将相应的sys.exe修改一下,以适应这张制作后的软盘。
回复

使用道具 举报

42#
 楼主| 发表于 2005-9-6 15:30:52 | 只看该作者

更新:制作显隐藏分区功能的软盘镜像文件工具,真正启动隐藏分区里的操作系统

[这个贴子最后由turboy在 2005/09/06 05:46pm 第 1 次编辑]

MAKEIMG程序还有很多修改的余地,我正在抽时间做:
可以判断软盘镜像大小来自动修改原引导扇区的保存点(分析BPB即可,已实现,在上面下载);
可以在软盘的根目录下建一个文件来保存原引导扇区(DOS下好说,但对镜像难点儿);
可以在DOS下直接处理A驱动器中的启动盘(这个比较容易);
可以安装到NT LOADER、GRUB下;
可以安装到MBR中(又转回去了,可也有一些用途)
和MS的SYS.EXE的冲突肯定有,可以在HFBOOT.ASM里面加入新代码来重定向A盘引导区读写操作来实现,可是现在空间已经满了。不过说回来,一般是先做好了启动功能后再加上这个功能的,所以必要性不大,而且现在还用物理软盘的人也很少了。
回复

使用道具 举报

43#
发表于 2005-9-6 15:55:44 | 只看该作者

更新:制作显隐藏分区功能的软盘镜像文件工具,真正启动隐藏分区里的操作系统

程序太大,以至于没有足够的提示信息,我正在做的图形界面安装程序中,想把原来的提示“Press any key to load RESTORE FLOPPY DISK...”,改成Boot Hide:F7 Fly:F5 或类似的,应该要好点,说不定什么时候用,自己都不记得各个键的功能了。
回复

使用道具 举报

44#
发表于 2005-9-6 20:50:11 | 只看该作者

更新:制作显隐藏分区功能的软盘镜像文件工具,真正启动隐藏分区里的操作系统

[UploadFile=1_1126010833.jpg]
[UploadFile=2_1126010847.jpg]
[UploadFile=unhide_1126010896.rar]
已制作安装软件的图形界面,启动信息为程序内置,生成映像文件与turboy的最新版完全相同,欢迎下载试用。
回复

使用道具 举报

45#
 楼主| 发表于 2005-9-6 21:24:46 | 只看该作者

更新:制作显隐藏分区功能的软盘镜像文件工具,真正启动隐藏分区里的操作系统

动作挺快的!
界面做的不错,挺简洁。我提个建议:在单击“映象安装”后自动转到“自定义”页,“启动隐藏分区按键”可以做个下拉列表框,就可以用到F1—F12键了。
回复

使用道具 举报

46#
发表于 2005-9-6 21:59:03 | 只看该作者

更新:制作显隐藏分区功能的软盘镜像文件工具,真正启动隐藏分区里的操作系统

[UploadFile=1_1126014974.jpg]
[UploadFile=unhide_1126014986.rar]
楼上说的有理,已更改为安装成功后自动转到设置页面,不过定义F1-F10等也没什么意思,有3个应该足够了,反正大家最熟悉的还是F11。
回复

使用道具 举报

47#
发表于 2005-9-7 00:02:03 | 只看该作者

更新:制作显隐藏分区功能的软盘镜像文件工具,真正启动隐藏分区里的操作系统

支持,强呵!顶。。。
不过这样操作来很麻烦。
我一般是用PM分三个可引导主分区,一个备份及恢复,二个留安装系统。
多重引导可以用BootMagic磁盘管理工具
不装多重引导,也可以用PM带的pqboot for DOS 或PQ Boot for Windows来指定那个分区启动系统
这样一个主分区启动系统后,其它二个主分区自动隐藏。备份及恢复非常方便!

回复

使用道具 举报

48#
 楼主| 发表于 2005-9-9 11:41:03 | 只看该作者

更新:制作显隐藏分区功能的软盘镜像文件工具,真正启动隐藏分区里的操作系统

[这个贴子最后由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;
回复

使用道具 举报

49#
发表于 2005-9-10 18:57:27 | 只看该作者

更新:制作显隐藏分区功能的软盘镜像文件工具,真正启动隐藏分区里的操作系统

[这个贴子最后由crshen在 2005/09/10 08:07pm 第 2 次编辑]

谢谢TurboY关注,现发布1.1版,主要改进:
1. 如上,可支持非1.44M启动软盘
2. 更改了启动时的提示,避免忘记每个按键的功能
3. 本程序与TurboY的安装程序兼容,但因为更改了启动提示信息,交叉使用时,建议只用于卸载。
[UploadFile=C6F4B6AFCCE1CABE_1126349811.jpg]
[UploadFile=unhide_1126353931.rar]
回复

使用道具 举报

50#
 楼主| 发表于 2005-9-11 02:50:29 | 只看该作者

更新:制作显隐藏分区功能的软盘镜像文件工具,真正启动隐藏分区里的操作系统

再加一个类似“一键恢复”的用法——用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]
回复

使用道具 举报

51#
发表于 2005-10-23 23:42:21 | 只看该作者

更新:制作显隐藏分区功能的软盘镜像文件工具,真正启动隐藏分区里的操作系统

    用制作显隐藏分区功能启动软盘镜像文件的工具制作的软盘不能在B:驱启动。现象是:
按F5后它不读B:而是读A:
                                       两位大侠能否再出个修正版。
                                                     谢谢!!!!!!!!
回复

使用道具 举报

52#
发表于 2005-10-24 14:18:47 | 只看该作者

更新:制作显隐藏分区功能的软盘镜像文件工具,真正启动隐藏分区里的操作系统

支持!好软件!有几个疑问:
1,WINXP的磁盘管理器 是否能看到 隐含分区?
2,在非HFBOOT软盘环境下,GHOST可以备份GHO到隐含分区里吗?
3,一个硬盘5个分区,怎么手动把最后一个(第5个分区变成隐藏分区?不用PQ,用16进制手动!)
回复

使用道具 举报

53#
发表于 2005-10-25 07:17:37 | 只看该作者

更新:制作显隐藏分区功能的软盘镜像文件工具,真正启动隐藏分区里的操作系统

希望B:驱   A:驱都能启动
回复

使用道具 举报

54#
发表于 2005-10-25 09:45:17 | 只看该作者

更新:制作显隐藏分区功能的软盘镜像文件工具,真正启动隐藏分区里的操作系统

下面引用由gmy2005/10/24 02:18pm 发表的内容:
支持!好软件!有几个疑问:
1,WINXP的磁盘管理器 是否能看到 隐含分区?
2,在非HFBOOT软盘环境下,GHOST可以备份GHO到隐含分区里吗?
3,一个硬盘5个分区,怎么手动把最后一个(第5个分区变成隐藏分区?不用P ...
1:可以看到分区存在,但是不能看到内容;
2:可以;
3:可以使用gdisk在spfdisk实现。
回复

使用道具 举报

55#
发表于 2005-10-25 19:39:47 | 只看该作者

更新:制作显隐藏分区功能的软盘镜像文件工具,真正启动隐藏分区里的操作系统

下面引用由gmy2005/10/24 02:18pm 发表的内容:
3,一个硬盘5个分区,怎么手动把最后一个(第5个分区变成隐藏分区?不用P ...
这个问题容易解决,我以前写过一个备份/恢复所有分区表的C语言程序,在新DOS时代好像有源代码,修改一下就可以了,如果有需要,可以再专制一个,大概要11月1日才有时间,月底有职称考试,紧张背书中,没空了。
回复

使用道具 举报

56#
发表于 2005-10-25 19:51:22 | 只看该作者

更新:制作显隐藏分区功能的软盘镜像文件工具,真正启动隐藏分区里的操作系统

下面引用由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盘,所以修改的意义不大。否则删除提示信息,到时又不知按什么键了,也不好。
回复

使用道具 举报

57#
发表于 2005-10-26 07:52:54 | 只看该作者

更新:制作显隐藏分区功能的软盘镜像文件工具,真正启动隐藏分区里的操作系统

[这个贴子最后由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:驱
回复

使用道具 举报

58#
发表于 2005-10-26 15:02:58 | 只看该作者

更新:制作显隐藏分区功能的软盘镜像文件工具,真正启动隐藏分区里的操作系统

下面引用由wang66102005/10/26 07:52am 发表的内容:
2. 修改以前unhide制做好的IMG几个字节能否实现B:驱
急用的话,在以前制作好的IMG文件中最后512字节中,查找B9124FBA0001E90600,将BA0001中的00改为01试试,我没有B驱,未测试。
回复

使用道具 举报

59#
发表于 2005-10-27 21:58:18 | 只看该作者

更新:制作显隐藏分区功能的软盘镜像文件工具,真正启动隐藏分区里的操作系统

下面引用由crshen2005/10/26 03:02pm 发表的内容:
急用的话,在以前制作好的IMG文件中最后512字节中,查找B9124FBA0001E90600,将BA0001中的00改为01试试,我没有B驱,未测试。

在img后512字节未能找到想关字节,还是等您有时间再帮我编译一个B:专用的吧。
         十分感谢!!!
回复

使用道具 举报

60#
发表于 2005-10-29 10:02:12 | 只看该作者

更新:制作显隐藏分区功能的软盘镜像文件工具,真正启动隐藏分区里的操作系统

en
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-11-27 21:31

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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