标题: 请高手把SRCMBR改造一下
[打印本页]
作者: gmy
时间: 2005-2-2 00:00
标题: 请高手把SRCMBR改造一下
我想备份/恢复某硬盘的任意绝对扇区,如0柱0面25扇区
想采用SRCMBR的命令行格式(不要GUI)。
SRCMBR 硬盘号 文件名 参数
改造成
SRCMBR 硬盘号 柱 面 扇 文件名 参数
如果无法改,请大家推荐其它的能实现此功能的小工具吧。
作者: crshen
时间: 2005-2-3 00:00
SRCMBR是经过压缩的,脱壳+修改的劳动量比重新写一个程序都累。看了一下,上面的参数中好像只要读指定的“一个”扇区,用bios int 13功能,不难实现,但有限制,即只能读8.4G以前的(否则要用扩展int 13,我还没搞通),按理说备份MBR、FAT表、BOOT扇应该足够了吧。正在进行中……
作者: crshen
时间: 2005-2-4 00:00
打开附件
作者: gmy
时间: 2005-2-7 00:00
先谢谢了,等我一试,另外,能否提供源代码?
作者: crshen
时间: 2005-2-9 00:00
#include <stdio.h>
#include <bios.h> #define READ 2
#define WRITE 3void ShowHelp()
{
printf("\nHD SECTOR BACKUP & RESTORE TOOLS by CRSHEN\n\n\
Usage: hdsect.exe drive head track sector filename parameter\n\
drive: 1=first HD 2=second HD and so on\n\
head track sector MUST be integer\n\
parameter: /b means backup /r means restore, *case sensitive*\n"

;
}void main(int argc,char *argv[])
{
int drive=0x80,head=0,track=0,sector=1,nsects=1;
unsigned char buf[512];
FILE *fp; drive=0x80+atoi(argv[1])-1;
head=atoi(argv[2]);
track=atoi(argv[3]);
sector=atoi(argv[4]); if (argc!=7)
{
ShowHelp();
exit(2);
}
if (strcmp(argv[6],"/b"

==0)
{
if (biosdisk(READ,drive,head,track,sector,nsects,buf))
{
printf("Failed to read from sector !\n"

;
exit(1);
}
if ((fp=fopen(argv[5],"wb"

)!=NULL)
{
fwrite(buf,512,1,fp);
fclose(fp);
printf("Backup sector to file %s done !\n",argv[5]);
exit(0);
}
else
{
printf("Open File %s Failed !\n",argv[5]);
exit(1);
}
}
if (strcmp(argv[6],"/r"

==0)
{
if ((fp=fopen(argv[5],"rb"

)!=NULL)
{
fread(buf,512,1,fp);
fclose(fp);
}
else
{
printf("Open File %s Failed !\n",argv[5]);
exit(1);
}
if (biosdisk(WRITE,drive,head,track,sector,nsects,buf))
{
printf("Failed to write to sector !\n"

;
exit(1);
}
else
{
printf("Restore sector from file %s done !",argv[5]);
exit(0);
}
}
}
匆忙中写的,问题还有,但实在忙,这两天没时间去完善了,大家有兴趣的话修改一下吧:
1. 对参数的检测:如果最后一个参数错误,没有任何提示;
2. 基于int 13,不支持8.4G以后的扇区,一定要的话,可使用扩展int 13,自己改吧;
3. 每次只读一个扇区,但留了接口,修改时注意要动态分配内存;
4. 为了方便批处理中使用,程序均采用exit()函数结束。
作者: hyzys
时间: 2005-2-10 00:00
crshen,你好!我想利用你这个程序来备份扩展分区的分区表,即在扩展分区只有一个逻辑分区备份了扇区,然后再将扩展分区由一个逻辑分区分成两个分区,如果此时再恢复扇区,则扩展分区到回原来的只有一个逻辑分区的状态。请问要实现这样该怎样写?hdsect 1 0 0 63 吗?
作者: crshen
时间: 2005-2-11 00:00
道 面 扇 道 面 扇 起始扇(逻辑) 结束扇 总共扇区
MBR 0 0 1 - - - - - -
C 0 1 1 276 239 63 扩 277 0 1 554 239 63 4,188,240 8, 391,599 4,203, 360
D 277 1 1 554 239 63 4,188,303 8, 391,599 4,203, 297 从上面的分区表可以看到,扩展分区在head 0 track 277 sect 1,首先要读MBR,从中读取分区信息。80 01 01 00 06 EF 7F 14 3F 00 00 00 11 E8 3F 00 00 00 41 15 05 EF BF 2A 50 E8 3F 00 60 23 40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 55 AA 扩展分区表数据:
00 01 41 15 07 EF BF 2A 8F E8 3F 00 21 23 40 00
作者: hyzys
时间: 2005-2-11 00:00
<SCRIPT language=JavaScript>
var actioninfo3='單貼屏蔽';document.write (dvbbs_show_topic('90417','9','crshen','','','crshen@tom.com','|||67154440|||||||||||||||','','uploadface/200451212582714.gif','','','从来不用别人的东西,要用,也先改成自己的再说!','无门无派',' 道 面 扇 道 面 扇 起始扇(逻辑) 结束扇 总共扇区
MBR 0 0 1 - - - - - -
C 0 1 1 276 239 63 扩 277 0 1 554 239 63 4,188,240 8, 391,599 4,203, 360
D 277 1 1 554 239 63 4,188,303 8, 391,599 4,203, 297 从上面的分区表可以看到,扩展分区在head 0 track 277 sect 1,首先要读MBR,从中读取分区信息。80 01 01 00 06 EF 7F 14 3F 00 00 00 11 E8 3F 00 00 00 41 15 05 EF BF 2A 50 E8 3F 00 60 23 40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 55 AA 扩展分区表数据:
00 01 41 15 07 EF BF 2A 8F E8 3F 00 21 23 40 00','2005-2-11 11:33:26','face1.gif','*.*.*.*','15000',1,0,17150,2,'新手上路','95','95','79','2004-2-10','289','151','149','','1',0,'0','level0.gif',4,'2005-2-11 14:16:35','0',6,'tablebody1','0','0'));
<script>
crshen,能请你改一下你的这个程序,使得其可以备份扩展分区表吗?
作者: crshen
时间: 2005-2-11 00:00
上面已经说过,这个程序是有限制的,即不能读写8.4G以后的硬盘,原因在于三个参数面、柱、扇最大值分别为FF、3FF、3F,ff*3ff*3f*512=8414461440字节,约8.4G。现在的硬盘主流都是80G,所以程序没有很大实用价值,要备份扩展分区表,除非前面的分区比较小才行。等我有时间再重新写一个吧。另外,你的hdsect 1 0 0 63没有任何意义,第一分区之前的隐含扇区总数为63(即3F),第一分区(C盘)的BOOT扇为1面1扇0道(即第64扇区)。
作者: gmy
时间: 2005-2-12 00:00
谢谢提供源代码,第一次真正体会TC的乐趣!预计将在下一版的 一键GHSOT 用到本工具,特此声明!
作者: walu
时间: 2005-2-12 00:00
狂顶!强烈希望 crshen编一个能备份扩展分区表且支持命令行操作的软件!目前除了DISKGEN外,没有任何一个软件能够备份扩展分区表!可惜DISKGEN不支持命令行操作。
[此贴子已经被作者于2005-2-12 15:17:00编辑过]
作者: gmy
时间: 2005-2-12 00:00
标题: 绝世高手哪里找?
网上有许多DOS高手,但有谁见过绝世高手,如: KVFIX的作者王江民, DISKGEN作者李大海?
他们经常出没于哪个论坛? 网名是什么?
作者: crshen
时间: 2005-2-13 00:00
要读写137G以内的硬盘其实也没什么难的,这两天抽空看了下扩展int13的资料,已用汇编完成读扇区功能,正在想办法移植到C下。由于学的不是计算机专业,很多软硬件方面的问题要边查资料边实践,进度有点慢,哪位对C或汇编比较在行的,不妨留个联系方式,共同探讨。另外:我在论坛发表所有文章或软件等,均出于个人爱好,任何人都可以下载、使用、修改,并不必保留原作说明。如果大家觉得有用,我已深感欣慰!
作者: crshen
时间: 2005-2-13 00:00
Quote: |
以下是引用walu在2005-2-12 15:15:32的发言:
狂顶!强烈希望 crshen编一个能备份扩展分区表且支持命令行操作的软件!目前除了DISKGEN外,没有任何一个软件能够备份扩展分区表!可惜DISKGEN不支持命令行操作。 |
|
构思命令行参数pt_tool.exe [/backup|/restore]
备份扇区为MBR扇区及主分区表中指向的四个分区的首个扇区(包括了扩展分区表和BOOT扇区),不知是否满足你的要求?
作者: walu
时间: 2005-2-13 00:00
Quote: |
以下是引用crshen在2005-2-13 21:50:39的发言:
>
构思命令行参数pt_tool.exe [/backup|/restore]
备份扇区为MBR扇区及主分区表中指向的四个分区的首个扇区(包括了扩展分区表和BOOT扇区),不知是否满足你的要求? |
|
狂喜!真的感谢crshen辛苦劳动,你这个程序肯定能满足网上大多数朋友的需求了,一直在苦苦寻求这样的软件,终于在DOS论坛上遇到高手了,衷心谢谢你crshen!希望能尽快用到你的这个软件!
作者: crshen
时间: 2005-2-14 00:00
已经完成备份分区表功能,运行命令行patition.exe /backup filename
生成的文件大小应为:512*n字节,n=主分区个数+扩展分区个数+MBR分区1个,例如你的分区为C盘主分区,扩展分区1个(逻辑盘符D、E、F等),IBM_SERVICE隐藏主分区1个,那么n=4,生成的filename文件大小为2K,用二进制编辑器打开查看,应有4个对应的55AA,分别位于1FF、3FF、5FF、7FF处。
本版本只能在支持超过8.4G硬盘的电脑上使用(好像没必要支持老的486甚至386吧),仅供测试读扇区正确性与否,未加入各种出错时的提示及处理,并关闭了写扇区功能,防止损害硬盘重要数据。如果大家测试无误,将于近日发行正式版。有什么建议,请现在提出,以后不再更新。
[此贴子已经被作者于2005-2-18 11:27:55编辑过]
作者: walu
时间: 2005-2-14 00:00
请问CRSHEN,这个程序只支持最大137G的硬盘吗?是否可以支持超过200G的硬盘呢?
经刚才测试,这个程序可以将分区表备份成一个文件,但在恢复时却无效。
在下面操作前先用PATITION /BACKUP a.dat备份了分区表。
是这样测试的:硬盘分区主分区C盘及扩展分区(其中只有一个逻辑分区D盘),用PQMAGIC从C盘划出一块未用分区,再从D盘划出一块未用分区。
然后PATITION /RESTORE a.dat 但硬盘并没有恢复到原来未经PQMAGIC分区前的状态。
[此贴子已经被作者于2005-2-14 23:16:24编辑过]
作者: crshen
时间: 2005-2-15 00:00
不好意思,上面已经说清楚了,仅供测试读出扇区的正确性,而关闭了写扇区功能,所以不能用restore参数。这个程序利用LBA线性寻址方式,目前大多数的主板,它们使用的都是28位寻址方式,能读写逻辑块数理论极限是2的28次方即268435456块,容量为137G。为了兼容通用,程序只支持最大137G的硬盘。
作者: crshen
时间: 2005-2-15 00:00
放出分区表备份/恢复情人节测试版,可以备份扩展分区及隐藏分区!restore参数已开放。
存在问题:
1.未对备份的分区信息文件进行检测,如果指定文件出错,将引起灾难性后果(当然,如果有备份在软盘或优盘上,只要再重新恢复一次就O.K.啦)
2.本程序主要设计用于批处理,故出错提示较少,下面是返回的errorlevel值含义:
0:成功、1:创建备份文件出错,写保护?、2:指定文件不存在、3:读扇区出错、4:写扇区出错
下一步可能完善的方面:
1.对备份分区文件进行保护,采用某种校验方法(未定)
2.恢复时首先校验指定文件
3.可选择恢复某个分区
[此贴子已经被作者于2005-2-18 11:29:21编辑过]
作者: qqqmmkx
时间: 2005-2-15 00:00
可用 Spfdiskhttp://spfdisk.sourceforge.net/
作者: walu
时间: 2005-2-15 00:00
谢谢crshen的努力!测试版经下面的测试方法:硬盘分区主分区C盘及扩展分区(其中只有一个逻辑分区D盘),用PQMAGIC从C盘划出一块未用分区,再从D盘划出一块未用分区。测试结果:恢复备份文件后,C盘能回到原来的样子,但D盘不能回到原来的样子,即依然有一块未用分区。
作者: crshen
时间: 2005-2-16 00:00
在我自己的机子上测试是没问题的,昨天拿到单位的机子上时,也出现类似你说的情况,分析两台电脑分区不同点在于C盘即第一分区的大小有别,我的机子C盘>8.4G,故考虑当C盘太小时,导致后面的扩展分区表不能用扩展int 13写。而第一分区可以恢复,是因为专门加强了对MBR的保护。主要原因是我偷懒,判断分区类型只要不是00,就采用扩展int 13,测试又没问题,现在看来不行,等我修改一下。
作者: crshen
时间: 2005-2-16 00:00
分区表备份/恢复兼容版
改进:
凡是不能用扩展int 13读写的扇区,均改为int 13读写,兼容旧机子、小硬盘
对备份分区文件进行保护,恢复时首先校验指定文件
附带checksum.exe程序,用于在对备份的文件进行修改后,重新生成校验信息
返回的errorlevel值含义:0:成功、1:创建备份文件出错,写保护?、2:指定文件不存在、3:读扇区出错、4:写扇区出错、5.文件校验出错
[此贴子已经被作者于2005-2-18 11:30:36编辑过]
作者: walu
时间: 2005-2-16 00:00
crshen兄,当C盘小于8.4G时正常,但调整至12G时,依然出现:恢复备份文件后,C盘能回到原来的样子,但D盘不能回到原来的样子,即依然有一块未用分区。
作者: Climbing
时间: 2005-2-16 00:00
强烈建议楼主再次公布源程序。很长时间没有接触C语言了,在前面的源程序中知道了使用Int 13访问硬盘的方法,但还不知道在TC 2.0中如何使用扩展的Int 13,因此,很希望看到新的源程序,以便继续学习。估计楼主也不反对让自己的程序越来越完善的吧?干脆就做成开源的得了。
作者: crshen
时间: 2005-2-16 00:00
已找到问题所在,可能有些主板BIOS不支持校验并写盘,故现改为不校验直接写扇区,在两台电脑不同分区大小的情况下均按照walu的方法测试成功,放出的版本仍有不完善的地方,但已不影响使用。
应climbing要求,正在整理源程序,并加注释,即将发布,请大家共同完善。
[此贴子已经被作者于2005-2-18 11:32:46编辑过]
作者: Climbing
时间: 2005-2-16 00:00
好东东啊好东东!期待源程序。
作者: crshen
时间: 2005-2-16 00:00
硬盘分区表备份/恢复最终发行版
2005-02-16
by CRSHEN
使用方法:
patition.exe </backup|/restore|checksum> filename
/backup:备份分区表
/restore:恢复分区表
/checksum:如果对备份的分区表文件进行必要的修改,则用此参数重新计算校验值,对于文件末两位为55AA的禁止校验,因文件可能是其它程序备份的分区表。确信需要时,可用十六进制编辑器改为其它值再校验。
说明:
1. 生成的文件大小应为

512*n+2)字节,n=主分区个数+扩展分区个数+MBR分区1个,两个字节为校验信息
2. 凡是不能用扩展int 13读写的扇区,均改为int 13读写,兼容旧机子、小硬盘
3. 对备份分区文件进行保护,恢复时首先校验指定文件
用于批处理:
返回的errorlevel值含义:
0:操作成功、1:创建备份文件出错,写保护?、2:指定文件不存在、3:读扇区0出错、4:写扇区0出错、5.文件校验出错
免责声明:
本程序仅供研究参考,如果不明白用途,建议不要随便尝试
对使用不当,造成数据丢失等后果者,概不负责。
[此贴子已经被作者于2005-2-18 11:34:22编辑过]
作者: crshen
时间: 2005-2-16 00:00
源程序已发布,需要者可自行下载修改
[此贴子已经被作者于2005-2-17 12:49:56编辑过]
作者: Climbing
时间: 2005-2-17 00:00
发现了crshen程序中的一个大漏洞(希望真的是漏洞,我水平太洼,暂时只是感觉如此),相关资料发在了51ct.net论坛了,希望crshen朋友再接再励,继续完善程序,相关帖子链接如下:
http://www.51ct.net/bbs/read.php?tid=500&fpage=1再次感谢你付出的辛苦劳动,如果我再年轻5岁,估计这个程序我可以自己改善一下。
作者: walu
时间: 2005-2-17 00:00
感谢crshen付出的辛苦劳动!强烈希望这个程序能够支持多个逻辑分区!
作者: crshen
时间: 2005-2-17 00:00
支持多个逻辑分区的程序已发布,本论坛速度太慢,请到此下载
http://www.51ct.net/bbs/read.php?tid=500&fpage=1
作者: 弄潮儿-NET
时间: 2005-2-18 00:00
Quote: |
以下是引用gmy在2005-2-12 0:44:29的发言:
谢谢提供源代码,第一次真正体会TC的乐趣!
预计将在下一版的 一键GHSOT 用到本工具,特此声明! |
|
呵呵,我正在想老兄是如何从虚拟盘中把密码保存起来了,果然不出意料之外.
我的配置存在第5扇中,请不要和我的冲突,谢谢.
作者: defrag
时间: 2005-3-13 00:00
[code][/code]