无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站广告联系 微信:wuyouceo QQ:184822951
查看: 9520|回复: 13
打印 上一主题 下一主题

求dos下修改分区类型的程序,AEFDISK不好用

[复制链接]
跳转到指定楼层
1#
发表于 2007-12-12 07:59:01 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
aefdisk应该可以:aefdisk /changetype:0b:8
但是我怎么试都提示 错误的分区号 ,只有1~4 可以用aefdisk改掉分区类型其他分区都不行,难道是
aefdisk只能改主分区和扩展分区不能修改逻辑分区????

请高手指点。或者请介绍其他dos下命令行方式修改分区类型的好工具,谢谢
推荐
发表于 2007-12-16 13:58:10 | 只看该作者
MBR改了55AA启动时该盘会被BIOS忽略。
回复

使用道具 举报

2#
发表于 2007-12-12 11:42:22 | 只看该作者
光改分区的格式类型并不能改变原逻辑盘的真正格式,还需要对相应逻辑盘进行格式化才行,不明白你求修改分区类型的工具有何用?其实用DEBUG也可以改,04、06是FAT格式,0B、0C是FAT32格式,07是NTFS格式,05、0F是扩展分区标志,自己填上去就行了。
回复

使用道具 举报

3#
 楼主| 发表于 2007-12-12 17:35:40 | 只看该作者
谢谢 我是想用改变分区类型来隐藏分区,需要一个可以一行命令可以修改分区类型的dos程序。

GRUB4DOS可以:
grub --config-file="root (hd0,7);parttype 0x0c;quit"

,可我不想用,还有其他的软件可以么,x谢谢
回复

使用道具 举报

4#
发表于 2007-12-12 18:30:36 | 只看该作者
要改就必须在系统启动前进行,用GRUB可以做到,但不好隐藏意图,而在windows系统中设置也不实际,因为当系统崩溃时,想激活该分区,又无法进系统了。所以从修改硬盘主引导扇入手的方法比较实际,本人曾经做过类似的实验,也做成功了,是为学校电脑教室还原系统用的,以后有了还原卡就不用了。我的制作原理是利用引导型病毒技术,将主引导扇复制到第二扇或其它扇区,用自己编的引导程序替换原引导程序,保留原分区表。自编引导程序应具有以下功能,启动时监视BIOS的INT16H键盘中断,当监测到按压左Ctrl键被按压的情况发生时,进入密码输入提示,密码可接收30个字符输入,但只取其中任意8个连续字符与密码相同的情况通过,此方法主要是防止别人偷记密码,我可以先打10多个乱字符,然后夹在其中输入正确密码序列,程序一旦检测到这个正确的密码序列,马上显示控制菜单,选“1”为激活隐藏分区,其它键为不激活。然后根据操作修改隐藏分区表的分区标志为其正确的标志,并将该分区加上激活标志80,原激活的分区标志要去除,因为同一个硬盘,不允许出现两个激活分区。接着就可以把事先保存在第二扇区的原主引导扇,装入内存并把控制权交给该扇区的程序,即可启动隐藏分区内的操作系统了。另外,在自编的程序开始运行时,要有个无条件还原隐藏分区为隐藏状态的功能,这样可以达到防止别人发现该功能的目的。此事已过去8、9年了,原程序也难再找到,技术也落后,没必要再研究,在此仅提供个参考思路而已。

[ 本帖最后由 lvyanan 于 2007-12-12 07:13 PM 编辑 ]
回复

使用道具 举报

5#
发表于 2007-12-12 20:19:57 | 只看该作者
找到了以前保存的光盘,现将01年我改编过的主引导程序源码提供如下,有注释,自己消化吧。
      &&&&&&&&&&&&&&&&&&
      &&原主引导程序段&&
      &&&&&&&&&&&&&&&&&&
0600 FA         CLI                     ;关中断
0601 33C0       XOR  AX,AX              ;AX清0
0603 8ED0       MOV  SS,AX              ;SS清0
0605 BC007C     MOV  SP,7C00            ;堆栈指针指向7C00
0608 8BF4       MOV  SI,SP              ;源指针指向7C00
060A 50         PUSH AX                 ;AX入栈
060B 07         POP  ES                 ;ES清0
060C 50         PUSH AX                 ;AX入栈
060D 1F         POP  DS                 ;DS清0
060E FB         STI                     ;开中断
060F FC         CLD                     ;设置数据传输正方向
0610 BF0006     MOV  DI,0600            ;目的指针指向600
0613 B90001     MOV  CX,0100            ;设置数据传输512个字节
0616 F2         REPNZ                   ;设置重复
0617 A5         MOVSW                   ;字传输
0618 EAC1060000 JMP  0000:06C1          ;转移到0:6C1(嵌入的程序)
061D BEBE07     MOV  SI,07BE            ;源指针指向7BE(第一表项头部)
0620 B304       MOV  BL,04              ;设置操作次数
0622 803C80     CMP  BYTE PTR [SI],80   ;判断SI所指定的表项是否活动分区
0625 740E       JZ   0635               ;是则转635行执行
0627 803C00     CMP  BYTE PTR [SI],00   ;判断SI所指定的表项是否非活动分区
062A 751C       JNZ  0648               ;不是则转648行执行
062C 83C610     ADD  SI,+10             ;源指针加10指向下一表项头部
062F FECB       DEC  BL                 ;操作计数减1
0631 75EF       JNZ  0622               ;操作计数非0转622行执行
0633 CD18       INT  18                 ;执行INT18中断(启动ROM-BASIC)
0635 8B14       MOV  DX,[SI]            ;准备读操作系统引导扇的磁头和盘标志
0637 8B4C02     MOV  CX,[SI+02]         ;准备读操作系统引导扇的柱面和扇区号
063A 8BEE       MOV  BP,SI              ;保存活动分区的头指针
063C 83C610     ADD  SI,+10             ;源指针加10指向下一表项头部
063F FECB       DEC  BL                 ;操作计数减1
0641 741A       JZ   065D               ;操作计数为0转65D行执行
0643 803C00     CMP  BYTE PTR [SI],00   ;判断下一表项有否活动标记
0646 74F4       JZ   063C               ;没有则转63C行执行
0648 BE8B06     MOV  SI,068B            ;SI指向多活动分区出错信息头部
064B AC         LODSB                   ;取SI指向的显示信息字节
064C 3C00       CMP  AL,00              ;判断显示信息字节是否结束为标志0
064E 740B       JZ   065B               ;是则转65B行执行
0650 56         PUSH SI                 ;SI入栈保存
0651 BB0700     MOV  BX,0007            ;
0654 B40E       MOV  AH,0E              ;设置INT10中断0E功能号
0656 CD10       INT  10                 ;执行INT10中断显示字符
0658 5E         POP  SI                 ;恢复SI值
0659 EBF0       JMP  064B               ;转移到64B行执行
065B EBFE       JMP  065B               ;转移到65B行执行
065D BF0500     MOV  DI,0005            ;设置磁盘操作重试次数
0660 BB007C     MOV  BX,7C00            ;设置操作系统引导程序存储偏移指针
0663 B80102     MOV  AX,0201            ;设置INT13中断读一个扇区功能
0666 57         PUSH DI                 ;DI入栈保存
0667 CD13       INT  13                 ;执行INT13中断读操作系统引导程序
0669 5F         POP  DI                 ;恢复DI值
066A 730C       JNB  0678               ;读盘成功转678行执行
066C 33C0       XOR  AX,AX              ;读盘失败,AX清0
066E CD13       INT  13                 ;执行INT13中断,初始化磁盘
0670 4F         DEC  DI                 ;磁盘操作重试次数减1
0671 75ED       JNZ  0660               ;DI不为0转660行执行
0673 BEA306     MOV  SI,06A3            ;否则SI指向显示错误装入操作系统的信息
0676 EBD3       JMP  064B               ;转到64B行执行出错信息显示功能
0678 BEB506     MOV  SI,06B5            ;SI指向显示找不到操作系统的信息
067B BFFE7D     MOV  DI,7DFE            ;DI指向操作系统引导程序尾部
067E 813D55AA   CMP  WORD PTR [DI],AA55 ;判断该引导扇合法否
0682 75C7       JNZ  064B               ;不合法转64B行显示SI指向的信息
0684 8BF5       MOV  SI,BP              ;SI指向活动分区头部
0686 EA007C0000 JMP  0000:7C00          ;转移到操作系统引导程序处执行
      &&&&&&&&&&&&&&&&
      &&密码锁程序段&&
      &&&&&&&&&&&&&&&&
06C1 BEBE07  MOV  SI,07BE    ;SI指向分区表头
06C4 B80080  MOV  AX,8000    ;预置AX寄存器值
06C7 3804    CMP  [SI],AL    ;判断第一表项是否活动分区
06C9 740B    JZ   06D6       ;不是活动分区则执行6D6行
06CB 8804    MOV  [SI],AL    ;将第一表项设为非活动分区
06CD 884404  MOV  [SI+04],AL ;将第一表项的操作系统标志设为00
06D0 886410  MOV  [SI+10],AH ;将第二表项设为活动分区
06D3 E80F00  CALL 06E5       ;调用主引导扇区回写子过程
06D6 A11704  MOV  AX,[0417]  ;取BIOS键盘状态字
06D9 240C    AND  AL,0C      ;屏蔽CTRL与ALT以外的键状态位
06DB 3C0C    CMP  AL,0C      ;判断是否按下CTRL与ALT键
06DD 7461    JZ   0740       ;是则转740行进行密码修改操作
06DF 3C04    CMP  AL,04      ;判断是否按下CTRL键
06E1 743E    JZ   0721       ;是则转721行进行密码验证操作
06E3 EB56    JMP  073B       ;否则转73B行执行原主引导程序

&&&&&&回写主引导扇区子过程&&&&&&
06E5 B80103  MOV  AX,0301       ;设置写功能03及操作扇区数为01
06E8 BB0006  MOV  BX,0600       ;设置磁盘操作数据的缓冲区偏移量600
06EB B90100  MOV  CX,0001       ;设置硬盘操作的柱面号00及扇区号01
06EE BA8000  MOV  DX,0080       ;设置硬盘标志80及00磁头号
06F1 CD13    INT  13            ;执行INT13磁盘I/O中断
06F3 C3      RET                ;返回调用程序

&&&&&&密码验证子过程&&&&&&
06F4 BF2000     MOV  DI,0020    ;设置控制键盘输入的最大键数
06F7 BEB007     MOV  SI,07B0    ;SI指向输入密码提示信息头
06FA E88500     CALL 0782       ;调用显示输入密码提示信息的子过程
06FD BE9507     MOV  SI,0795    ;SI指向密码区长度字节
0700 31DB       XOR  BX,BX      ;初始化密码位偏移指针
0702 B410       MOV  AH,10      ;设置INT16的AH功能号为10
0704 43         INC  BX         ;密码位偏移指针加1
0705 8A0C       MOV  CL,[SI]    ;密码长度字节送入CL
0707 80F900     CMP  CL,00      ;判断密码长度是否为0
070A 7414       JZ   0720       ;为0转720行返回调用程序
070C 4F         DEC  DI         ;键盘输入键数减1
070D 7411       JZ   0720       ;键盘输入控制数为0转720行返回调用程序
070F CD16       INT  16         ;执行BIOS键盘I/O中断,读取键值到AL
0711 D0C8       ROR  AL,1       ;将AL中的ASCII码右移循环1位
0713 3A00       CMP  AL,[BX+SI] ;判断对应位密码值是否相符
0715 75E9       JNZ  0700       ;不相符转700行从头比较
0717 FEC9       DEC  CL         ;相符密码长度值减1
0719 7405       JZ   0720       ;密码长度值为0表示密码验证通过,返回调用程序
071B 43         INC  BX         ;密码位偏移指针加1
071C 31C0       XOR  AX,AX      ;设置INT16的AH功能号为0
071E EBEF       JMP  070F       ;转到70F行继续进行密码比较
0720 C3         RET             ;返回调用程序

&&&&&&启动隐藏分区程序段&&&&&&
0721 E8D0FF     CALL 06F4       ;调用密码验证子过程
0724 80F900     CMP  CL,00      ;判断密码验证是否通过
0727 7512       JNZ  073B       ;CL非0为未通过,转23B执行原主引导程序
0729 B80680     MOV  AX,8006    ;预置AX寄存器值
072C 8826BE07   MOV  [07BE],AH  ;将第一表项设为活动分区
0730 A2C207     MOV  [07C2],AL  ;将第一表项设为有效操作系统标志
0733 31C0       XOR  AX,AX      ;AX寄存器清0
0735 A2CE07     MOV  [07CE],AL  ;清除第二表项的活动分区标志
0738 E8AAFF     CALL 06E5       ;调用回写主引导扇区的子过程
073B EA1D060000 JMP  0000:061D  ;转去执行原主引导程序

&&&&&&密码修改程序段&&&&&&
0740 E8B1FF     CALL 06F4       ;调用密码验证子过程
0743 80F900     CMP  CL,00      ;判断密码验证是否通过
0746 75F3       JNZ  073B       ;CL非0为未通过,转73B执行原主引导程序
0748 BEA507     MOV  SI,07A5    ;SI指向输入新密码提示信息头
074B E83400     CALL 0782       ;调用显示输入密码提示信息的子过程
074E BF0A00     MOV  DI,000A    ;置密码长度控制寄存器值
0751 BE9507     MOV  SI,0795    ;SI指向密码及密码长度存储区
0754 31DB       XOR  BX,BX      ;设置密码及密码长度偏移指针
0756 B410       MOV  AH,10      ;设置INT16中断的功能号
0758 CD16       INT  16         ;执行INT16中断,读键值到AL
075A 3C0D       CMP  AL,0D      ;判断是否回车键
075C 740A       JZ   0768       ;是回车键转768行执行
075E D0C8       ROR  AL,1       ;将AL中的ASCII码右移循环1位
0760 43         INC  BX         ;密码位偏移指针加1
0761 8800       MOV  [BX+SI],AL ;将加密的新密码值写入密码存储区
0763 4F         DEC  DI         ;密码长度控制寄存器值减1
0764 7402       JZ   0768       ;密码长度为0转768行执行
0766 EBEE       JMP  0756       ;转移到756行继续输入新密码值
0768 881C       MOV  [SI],BL    ;将密码长度计数值写入密码长度存储位
076A BEA007     MOV  SI,07A0    ;SI指向重新输入新密码提示信息头
076D 31DB       XOR  BX,BX      ;设置密码及密码长度偏移指针
076F 8A1E9507   MOV  BL,[0795]  ;取新密码长度到BL
0773 89DF       MOV  DI,BX      ;使DI等于新密码长度
0775 E882FF     CALL 06FA       ;调用密码验证子过程
0778 80F900     CMP  CL,00      ;判断新密码验证是否通过
077B 75CB       JNZ  0748       ;验证未通过转748行重新输入新密码
077D E865FF     CALL 06E5       ;调用回写主引导扇区子过程
0780 EBB9       JMP  073B       ;转去执行原主引导程序

&&&&&&修改原主引导程序显示过程的子过程&&&&&&
0782 B2C3       MOV  DL,C3      ;将DL置为C3(RET指令的机器码)
0784 86165B06   XCHG DL,[065B]  ;将原主引导程序显示信息程序段改为子过程
0788 B80300     MOV  AX,0003    ;设置INT10中断功能号为03
078B CD10       INT  10         ;执行INT10中断,将屏幕设为25列X80行显示模式
078D E8BBFE     CALL 064B       ;调用原主引导程序的显示程序
0790 86165B06   XCHG DL,[065B]  ;将原主引导程序显示信息程序段还原
0794 C3         RET             ;返回调用程序

&&&&&&主引导扇区的内存映象&&&&&&
0600  FA 33 C0 8E D0 BC 00 7C-8B F4 50 07 50 1F FB FC   .3.....|..P.P...
0610  BF 00 06 B9 00 01 F2 A5-EA C1 06 00 00 BE BE 07   ................
0620  B3 04 80 3C 80 74 0E 80-3C 00 75 1C 83 C6 10 FE   ...<.t..<.u.....
0630  CB 75 EF CD 18 8B 14 8B-4C 02 8B EE 83 C6 10 FE   .u......L.......
0640  CB 74 1A 80 3C 00 74 F4-BE 8B 06 AC 3C 00 74 0B   .t..<.t.....<.t.
0650  56 BB 07 00 B4 0E CD 10-5E EB F0 EB FE BF 05 00   V.......^.......
0660  BB 00 7C B8 01 02 57 CD-13 5F 73 0C 33 C0 CD 13   ..|...W.._s.3...
0670  4F 75 ED BE A3 06 EB D3-BE B5 06 BF FE 7D 81 3D   Ou...........}.=
0680  55 AA 75 C7 8B F5 EA 00-7C 00 00 49 6E 76 61 6C   U.u.....|..Inval
0690  69 64 20 70 61 72 74 69-74 69 6F 6E 20 74 61 62   id partition tab
06A0  6C 65 00 45 72 72 6F 72-20 6C 6F 61 64 69 6E 67   le.Error loading
06B0  20 4F BE 53 00 4D 69 73-73 69 6E 67 20 4F BE 53    O.S.Missing O.S
06C0  00 BE BE 07 B8 00 80 38-04 74 0B 88 04 88 44 04   .......8.t....D.
06D0  88 64 10 E8 0F 00 A1 17-04 24 0C 3C 0C 74 61 3C   .d.......$.<.ta<
06E0  04 74 3E EB 56 B8 01 03-BB 00 06 B9 01 00 BA 80   .t>.V...........
06F0  00 CD 13 C3 BF 20 00 BE-B0 07 E8 85 00 BE 95 07   ..... ..........
0700  31 DB B4 10 43 8A 0C 80-F9 00 74 14 4F 74 11 CD   1...C.....t.Ot..
0710  16 D0 C8 3A 00 75 E9 FE-C9 74 05 43 31 C0 EB EF   ...:.u...t.C1...
0720  C3 E8 D0 FF 80 F9 00 75-12 B8 06 80 88 26 BE 07   .......u.....&..
0730  A2 C2 07 31 C0 A2 CE 07-E8 AA FF EA 1D 06 00 00   ...1............
0740  E8 B1 FF 80 F9 00 75 F3-BE A5 07 E8 34 00 BF 0A   ......u.....4...
0750  00 BE 95 07 31 DB B4 10-CD 16 3C 0D 74 0A D0 C8   ....1.....<.t...
0760  43 88 00 4F 74 02 EB EE-88 1C BE A0 07 31 DB 8A   C..Ot........1..
0770  1E 95 07 89 DF E8 82 FF-80 F9 00 75 CB E8 65 FF   ...........u..e.
0780  EB B9 B2 C3 86 16 5B 06-B8 03 00 CD 10 E8 BB FE   ......[.........
0790  86 16 5B 06 C3 00 00 00-00 00 00 00 00 00 00 00   ..[.............
07A0  07 07 52 65 2D 07 49 6E-70 75 74 20 6E 65 77 20   ..Re-.Input new
07B0  70 61 73 73 77 6F 72 64-3A 07 07 00 00 00 00 01   password:.......
07C0  01 00 00 FE 3F 3F 3F 00-00 00 01 B0 0F 00 80 00   ....???.........
07D0  01 40 0B FE 7F 44 40 B0-0F 00 C5 FA 3F 00 00 00   ....D@.....?...
07E0  41 45 05 FE BF 0A 05 AB-4F 00 46 89 30 00 00 00   AE......O.F.0...
07F0  00 00 00 00 00 00 00 00-00 00 00 00 00 00 55 AA   ..............U.
注:
7A0,7A1,7A5,7B9,7BA处的07值为ASCII码的发声码

[ 本帖最后由 lvyanan 于 2007-12-12 08:26 PM 编辑 ]
回复

使用道具 举报

6#
发表于 2007-12-13 09:43:34 | 只看该作者
spfdisk
回复

使用道具 举报

7#
发表于 2007-12-15 09:43:40 | 只看该作者
可以考虑用将逻辑盘引导扇的合法标志改为不合法标志的办法来实现,即将该扇区最后两个字节55AA求反或改为其它数值即可,不一定非要修改分区链表类型值。
回复

使用道具 举报

8#
发表于 2007-12-16 13:49:41 | 只看该作者
MBR改了55AA会被杀毒软件修复, 逻辑盘不知如何
回复

使用道具 举报

10#
发表于 2007-12-17 11:31:25 | 只看该作者
第一扇区如果以非55AA结束
貌似整个扇区内容都会被忽略

分区表也会被忽略的
不实用
回复

使用道具 举报

11#
 楼主| 发表于 2007-12-17 16:03:01 | 只看该作者
那么有可以修改逻辑分区类型的dos程序么?适合放入批处理中自动执行的。

还有我用 aefdisk /changetype:0b:8  为什么不能改逻辑分区,有人用过么
回复

使用道具 举报

12#
发表于 2007-12-17 19:40:48 | 只看该作者
将一个DOS分区放在逻辑磁盘上,意味着该分区可能会处于8G之后,这样的话DOS系统是无法寻址自己的启动文件的,因此在8G之后做隐藏DOS分区是不合适的。可以采用在硬盘最前部做两个主分区,第一个用于隐藏分区,第二个作为实用的启动分区即可,此种方式简单,易于控制,支持DOS启动,但安全性稍差。隐藏分区建在逻辑盘上,很容易造成寻址困难而无法实现。
回复

使用道具 举报

13#
发表于 2008-1-16 00:08:56 | 只看该作者
lvyanan (井底蛙

我想加你一下,你QQ是多少?

我的QQ是: 308585915
回复

使用道具 举报

14#
发表于 2018-10-24 11:27:24 | 只看该作者
不知道楼主的最终解决方案是什么?
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-4-27 18:47

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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