中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --
联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟
中国DOS联盟论坛
现在时间是 2026-09-06 06:23
47,812 主题排行 / 349,914 发帖 / 今日 0 篇 / 48,268 会员排行
DOS启动盘 & LOGO技术 (启动盘室) » DOS启动后用隐藏分区数据的程序,源码公开了!
可打印版本  14,574 / 32
第16楼 pfox 发表于 2005-08-26 17:03
银牌会员 发帖 446 积分 1,451
原来用老版本处理过的img可以直接再用新版本进行处理吗?还是要没有处理过的img才能处理?
第17楼 TurboY 发表于 2005-08-26 18:01
中级用户 发帖 99 积分 322 来自 湖北
得用没有处理过的img重做才行,或者你用标准的启动扇区替换已经做过的后再做。只是做程序了,忘了考虑卸载程序,以后一定加上。
我在无忧已经发了个新的,不过也没有卸载程序。
第18楼 pfox 发表于 2005-08-26 21:25
银牌会员 发帖 446 积分 1,451
Originally posted by TurboY at 2005-8-26 06:01 PM:
得用没有处理过的img重做才行,或者你用标准的启动扇区替换已经做过的后再做。只是做程序了,忘了考虑卸载程序,以后一定加上。
我在无忧已经 ...



无忧的版本你你这里的版本不同吗?
第19楼 TurboY 发表于 2005-08-26 21:38
中级用户 发帖 99 积分 322 来自 湖北
谢谢!
两者实际是一样的,这里原来那个只是没改MAKEIMG而已.
第20楼 TurboY 发表于 2005-08-29 00:36
中级用户 发帖 99 积分 322 来自 湖北
8月28日的进展
  我和无忧的hnlyzhd版主交流时他提出个建议:能否启动安装在隐藏分区内的操作系统
  现在实现了,新程序在启动时出现的8秒等待中如果按了F7键(我用BOCHS调试的,它不准我用F11、F12),则会从第一个隐藏主分区启动,此盘分配为C:。
  目前我只测试了DOS7.1,不知道能不能启动WIN98。但WIN2K和XP或LINUX不用试肯定不行,它们都不依赖BIOS读盘。
  新的命令行如下:
  MAKEIMG 源镜像文件名
   源镜像文件名  用来制作显隐藏分区功能的软盘镜像文件
   目的镜像文件名 将要生成的带显隐藏分区功能的软盘镜像文件,可省略,默认值为YISIR.IMG
  可选参数:
   /f       生成的程序在计算机启动时直接从软盘启动。(f为小写字母)
   /b       生成的程序在计算机启动时直接激活隐藏分区并启动。(b为小写字母,注意隐藏分区中必须已安装了DOS操作系统,此功能也未写MBR)
  无 /f 和 /b 参数时将出现提示并等待8秒,这期间按任意键从软盘启动,否则从硬盘启动且不加载显隐藏分区功能。
   /u       卸载本程序,将由本程序生成的镜像文件还原。(u为小写字母)

真心希望各位下载试过了的朋友能回复讨论一下这个新加功能的稳定性!
第21楼 TurboY 发表于 2005-08-29 14:24
中级用户 发帖 99 积分 322 来自 湖北
又发现了一个强大的DOS文件系统驱动程序,这是在DOS层实现我所提出的问题的。
我等了一年了,看来能人真不少啊。软件厂家的网站是www.paragon.ag

我是在下面的帖子中得到的,里面有下载
第22楼 crshen 发表于 2005-08-29 18:16
中级用户 发帖 126 积分 447
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,
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,
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,
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,
01AC dec ax //直接减少0040:0013处的值, 减少可用内存的容量
01AD cmp dx, FFFF
01B1 je 01B5
01B3 mov , 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,
01CD mov es:, 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 , 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 , eax
023D jne 024A
023F cmp , 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,
0265 mov es,
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:, al //比较是否为隐藏分区
0280 jne 0275
0282 mov es:, 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

[ Last edited by crshen on 2005-8-31 at 08:04 ]
第23楼 crshen 发表于 2005-08-29 18:19
中级用户 发帖 126 积分 447
建议版主以后直接发带注释的源程序,以便大家完善,看汇编代码本来就很费神,我都没这么好的耐心,相信别人也不轻松。

另外
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:, al //比较是否为隐藏分区
0280 jne 0275
0282 mov es:, ah //将隐藏分区改为非隐藏
0285 jmp 0275

0288 add bx, 0010 //第个分区表0x10字节
028C loop 0272 //4个分区表逐一检查
从026F起检查分区表类型,个人认为只要检测最后一个分区即可,很少有人将中间的分区隐藏的。
从分区表类型看,隐藏与非隐藏差别为bit4,所有类型可合并为一种,即:
if (al and 0xF0)=0x10 then 分区类型=(al and 0x0F)

[ Last edited by crshen on 2005-8-31 at 08:23 ]
第24楼 TurboY 发表于 2005-09-02 02:47
中级用户 发帖 99 积分 322 来自 湖北
【9月1日最新更新】
  谢谢crshen指出BUG,看来DOS启动时基本上没用扩展INT13功能来读MBR,所以那些死代码基本上就没有运行到,从运行表面上看好像没问题了,但BUG还是存在。现在已经全部修正了。
  8月28日无法从后面的隐藏分区启动的问题解决了,现在已经可以正常启动隐藏主分区中的操作系统。其实是程序本身的问题,程序虽然在启动后把隐藏分区向其他程序报告为正常分区,但在自己完工后把控制权交还MBR时却忘了改。结果MBR还是装入了原来的激活分区引导程序,但在那个操作系统启动时读到的激活分区却是那个已经显示出来的隐藏分区了。所以当两个系统都是DOS或Win98时由于启动文件一样时是正常的,两个系统不同时就有异常了。
  新程序在启动时出现的8秒等待中如果按了F7键(或自定义的键),则会从第一个隐藏主分区启动,此盘分配为C:。目前我只测试了DOS7.1(Win98启动盘),我想应该也能启动WIN98。WinXP启动后会将隐藏分区变成非隐藏,用硬盘重启后仍是可显示的,肯定时WinXP在什么时候更新过MBR。LINUX没有试。
  新加入一个功能键ESC:可以不加载本程序,正常从硬盘盘启动,。
  新加入一个功能键F5:可以不加载本程序,正常从软盘盘启动,用于需要正确查看实际分区时。
  MAKEIMG.EXE的命令行选项可以忽略大小写了。
  尽管程序改动了不少,裁掉了很多提示信息,可是程序已经快写满512字节了,只剩1个字节的空间了。如果再要加别的功能,只能再开一个扇区了。

  新的命令行如下:
  MAKEIMG 源镜像文件名
   源镜像文件名  用来制作显隐藏分区功能的软盘镜像文件
   目的镜像文件名 将要生成的带显隐藏分区功能的软盘镜像文件,可省略,默认值为YISIR.IMG
  可选参数:
   /f       生成的程序在计算机启动时直接从软盘启动。
   /b       生成的程序在计算机启动时直接激活隐藏分区并启动。(注意隐藏分区中必须已安装了操作系统,此功能也未写MBR)
  无 /f 和 /b 参数时将出现提示并等待8秒,这期间按任意键从软盘启动,否则从硬盘启动且不加载显隐藏分区功能。
   /k:n      n=1-4,6-12。设置直接激活隐藏分区并启动时用的按键,可以是F1-F4、F6-F12
   /u       卸载本程序,将由本程序生成的镜像文件还原,结果保存成一个镜像文件。

附件
build050901.zip (43.59 KiB)
第25楼 TurboY 发表于 2005-09-06 15:03
中级用户 发帖 99 积分 322 来自 湖北
  感谢各位朋友的关注,为方便感兴趣的朋友改进,源程序开放。先公开引导区模块(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)的源程序:

第26楼 TurboY 发表于 2005-09-06 15:04
中级用户 发帖 99 积分 322 来自 湖北
【目前最新版本】
  HFBOOT.ASM还是9月1日的,MAKEIMG.EXE在9月5日新增选项后编译
MAKEIMG.EXE可以处理非1.44M软盘镜像了。
  新的命令行如下:
  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       卸载本程序,将由本程序生成的镜像文件还原,结果保存成一个镜像文件。

希望下载和使用了这个软件的朋友跟帖或到我的小站留言谈一下看法。

[ Last edited by TurboY on 2005-9-6 at 20:15 ]

附件
build050905.zip (44.33 KiB)
第27楼 crshen 发表于 2005-09-06 21:34
中级用户 发帖 126 积分 447
图形界面版升级至1.1版,可用于非1.44M映像。

[ Last edited by crshen on 2005-9-10 at 20:17 ]

附件
安装.jpg (33.97 KiB)
启动提示.jpg (6.75 KiB)
unhide.rar (171.66 KiB)
第28楼 hnlyzhd 发表于 2005-09-08 23:49
高级用户 发帖 164 积分 544
再来看一下,准备睡觉!
暂没有意见,正在找问题和发现新的需要的功能!
哈哈!~
第29楼 fdsiuha 发表于 2005-09-10 00:06
高级用户 发帖 302 积分 587
crshen贴出的像MBR,但是是哪个操作系统的呢?

我记得我看过的几个MBR开始初始化寄存器之后都是将7C00的引导代码立刻读到内存中的其他地方,把堆栈放在7C00开始。

我不太清楚是为什么要这样做,而且crshen贴出的ASM没有这些步骤。
哪位大侠解说一下?

[ Last edited by fdsiuha on 2005-9-10 at 00:12 ]
第30楼 hiboy 发表于 2005-09-11 10:55
新手上路 发帖 1 积分 10
我看了,弱问一个为什么代码里有eax?是8086?我用了16位的汇编,自己研究的时候会被卡巴认为是病毒。IBM的F11好像用了int 13h重写MBR,而不是驻留。因为确实很多病毒做法是驻留,而改写int 13h的那一段代码是特征码,大概用eax才没有被报告是病毒
上一页  1 2 3  下一页
[ 联系联盟系统管理团队 - 中国DOS联盟 - 标准版 ]
Sponsored by ifanr Inc | © 2001–2023