adiwdmd 发表于 2007-12-12 07:59:01

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

aefdisk应该可以:aefdisk /changetype:0b:8
但是我怎么试都提示 错误的分区号 ,只有1~4 可以用aefdisk改掉分区类型其他分区都不行,难道是
aefdisk只能改主分区和扩展分区不能修改逻辑分区????

请高手指点。或者请介绍其他dos下命令行方式修改分区类型的好工具,谢谢

lvyanan 发表于 2007-12-16 13:58:10

MBR改了55AA启动时该盘会被BIOS忽略。

lvyanan 发表于 2007-12-12 11:42:22

光改分区的格式类型并不能改变原逻辑盘的真正格式,还需要对相应逻辑盘进行格式化才行,不明白你求修改分区类型的工具有何用?其实用DEBUG也可以改,04、06是FAT格式,0B、0C是FAT32格式,07是NTFS格式,05、0F是扩展分区标志,自己填上去就行了。

adiwdmd 发表于 2007-12-12 17:35:40

谢谢 我是想用改变分区类型来隐藏分区,需要一个可以一行命令可以修改分区类型的dos程序。

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

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

lvyanan 发表于 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 编辑 ]

lvyanan 发表于 2007-12-12 20:19:57

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

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

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

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

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

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

&&&&&&主引导扇区的内存映象&&&&&&
0600FA 33 C0 8E D0 BC 00 7C-8B F4 50 07 50 1F FB FC   .3.....|..P.P...
0610BF 00 06 B9 00 01 F2 A5-EA C1 06 00 00 BE BE 07   ................
0620B3 04 80 3C 80 74 0E 80-3C 00 75 1C 83 C6 10 FE   ...<.t..<.u.....
0630CB 75 EF CD 18 8B 14 8B-4C 02 8B EE 83 C6 10 FE   .u......L.......
0640CB 74 1A 80 3C 00 74 F4-BE 8B 06 AC 3C 00 74 0B   .t..<.t.....<.t.
065056 BB 07 00 B4 0E CD 10-5E EB F0 EB FE BF 05 00   V.......^.......
0660BB 00 7C B8 01 02 57 CD-13 5F 73 0C 33 C0 CD 13   ..|...W.._s.3...
06704F 75 ED BE A3 06 EB D3-BE B5 06 BF FE 7D 81 3D   Ou...........}.=
068055 AA 75 C7 8B F5 EA 00-7C 00 00 49 6E 76 61 6C   U.u.....|..Inval
069069 64 20 70 61 72 74 69-74 69 6F 6E 20 74 61 62   id partition tab
06A06C 65 00 45 72 72 6F 72-20 6C 6F 61 64 69 6E 67   le.Error loading
06B020 4F BE 53 00 4D 69 73-73 69 6E 67 20 4F BE 53    O.S.Missing O.S
06C000 BE BE 07 B8 00 80 38-04 74 0B 88 04 88 44 04   .......8.t....D.
06D088 64 10 E8 0F 00 A1 17-04 24 0C 3C 0C 74 61 3C   .d.......$.<.ta<
06E004 74 3E EB 56 B8 01 03-BB 00 06 B9 01 00 BA 80   .t>.V...........
06F000 CD 13 C3 BF 20 00 BE-B0 07 E8 85 00 BE 95 07   ..... ..........
070031 DB B4 10 43 8A 0C 80-F9 00 74 14 4F 74 11 CD   1...C.....t.Ot..
071016 D0 C8 3A 00 75 E9 FE-C9 74 05 43 31 C0 EB EF   ...:.u...t.C1...
0720C3 E8 D0 FF 80 F9 00 75-12 B8 06 80 88 26 BE 07   .......u.....&..
0730A2 C2 07 31 C0 A2 CE 07-E8 AA FF EA 1D 06 00 00   ...1............
0740E8 B1 FF 80 F9 00 75 F3-BE A5 07 E8 34 00 BF 0A   ......u.....4...
075000 BE 95 07 31 DB B4 10-CD 16 3C 0D 74 0A D0 C8   ....1.....<.t...
076043 88 00 4F 74 02 EB EE-88 1C BE A0 07 31 DB 8A   C..Ot........1..
07701E 95 07 89 DF E8 82 FF-80 F9 00 75 CB E8 65 FF   ...........u..e.
0780EB B9 B2 C3 86 16 5B 06-B8 03 00 CD 10 E8 BB FE   ......[.........
079086 16 5B 06 C3 00 00 00-00 00 00 00 00 00 00 00   ..[.............
07A007 07 52 65 2D 07 49 6E-70 75 74 20 6E 65 77 20   ..Re-.Input new
07B070 61 73 73 77 6F 72 64-3A 07 07 00 00 00 00 01   password:.......
07C001 00 00 FE 3F 3F 3F 00-00 00 01 B0 0F 00 80 00   ....???.........
07D001 40 0B FE 7F 44 40 B0-0F 00 C5 FA 3F 00 00 00   ....D@.....?...
07E041 45 05 FE BF 0A 05 AB-4F 00 46 89 30 00 00 00   AE......O.F.0...
07F000 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 编辑 ]

紫狐 发表于 2007-12-13 09:43:34

spfdisk

lvyanan 发表于 2007-12-15 09:43:40

可以考虑用将逻辑盘引导扇的合法标志改为不合法标志的办法来实现,即将该扇区最后两个字节55AA求反或改为其它数值即可,不一定非要修改分区链表类型值。

darkradx 发表于 2007-12-16 13:49:41

MBR改了55AA会被杀毒软件修复, 逻辑盘不知如何

hytmtet 发表于 2007-12-17 11:31:25

第一扇区如果以非55AA结束
貌似整个扇区内容都会被忽略

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

adiwdmd 发表于 2007-12-17 16:03:01

那么有可以修改逻辑分区类型的dos程序么?适合放入批处理中自动执行的。

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

lvyanan 发表于 2007-12-17 19:40:48

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

阿文 发表于 2008-1-16 00:08:56

lvyanan (井底蛙

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

我的QQ是: 308585915

881966 发表于 2018-10-24 11:27:24

不知道楼主的最终解决方案是什么?
页: [1]
查看完整版本: 求dos下修改分区类型的程序,AEFDISK不好用