无忧启动论坛
标题:
求dos下修改分区类型的程序,AEFDISK不好用
[打印本页]
作者:
adiwdmd
时间:
2007-12-12 07:59
标题:
求dos下修改分区类型的程序,AEFDISK不好用
aefdisk应该可以:aefdisk /changetype:0b:8
但是我怎么试都提示 错误的分区号 ,只有1~4 可以用aefdisk改掉分区类型其他分区都不行,难道是
aefdisk只能改主分区和扩展分区不能修改逻辑分区????
请高手指点。或者请介绍其他dos下命令行方式修改分区类型的好工具,谢谢
作者:
lvyanan
时间:
2007-12-12 11:42
光改分区的格式类型并不能改变原逻辑盘的真正格式,还需要对相应逻辑盘进行格式化才行,不明白你求修改分区类型的工具有何用?其实用DEBUG也可以改,04、06是FAT格式,0B、0C是FAT32格式,07是NTFS格式,05、0F是扩展分区标志,自己填上去就行了。
作者:
adiwdmd
时间:
2007-12-12 17:35
谢谢 我是想用改变分区类型来隐藏分区,需要一个可以一行命令可以修改分区类型的dos程序。
GRUB4DOS可以:
grub --config-file="root (hd0,7);parttype 0x0c;quit"
,可我不想用,还有其他的软件可以么,x谢谢
作者:
lvyanan
时间:
2007-12-12 18:30
要改就必须在系统启动前进行,用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
找到了以前保存的光盘,现将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 编辑
]
作者:
紫狐
时间:
2007-12-13 09:43
spfdisk
作者:
lvyanan
时间:
2007-12-15 09:43
可以考虑用将逻辑盘引导扇的合法标志改为不合法标志的办法来实现,即将该扇区最后两个字节55AA求反或改为其它数值即可,不一定非要修改分区链表类型值。
作者:
darkradx
时间:
2007-12-16 13:49
MBR改了55AA会被杀毒软件修复, 逻辑盘不知如何
作者:
lvyanan
时间:
2007-12-16 13:58
MBR改了55AA启动时该盘会被BIOS忽略。
作者:
hytmtet
时间:
2007-12-17 11:31
第一扇区如果以非55AA结束
貌似整个扇区内容都会被忽略
分区表也会被忽略的
不实用
作者:
adiwdmd
时间:
2007-12-17 16:03
那么有可以修改逻辑分区类型的dos程序么?适合放入批处理中自动执行的。
还有我用 aefdisk /changetype:0b:8 为什么不能改逻辑分区,有人用过么
作者:
lvyanan
时间:
2007-12-17 19:40
将一个DOS分区放在逻辑磁盘上,意味着该分区可能会处于8G之后,这样的话DOS系统是无法寻址自己的启动文件的,因此在8G之后做隐藏DOS分区是不合适的。可以采用在硬盘最前部做两个主分区,第一个用于隐藏分区,第二个作为实用的启动分区即可,此种方式简单,易于控制,支持DOS启动,但安全性稍差。隐藏分区建在逻辑盘上,很容易造成寻址困难而无法实现。
作者:
阿文
时间:
2008-1-16 00:08
lvyanan (井底蛙
我想加你一下,你QQ是多少?
我的QQ是: 308585915
作者:
881966
时间:
2018-10-24 11:27
不知道楼主的最终解决方案是什么?
欢迎光临 无忧启动论坛 (http://bbs.c3.wuyou.net/)
Powered by Discuz! X3.3