用C语言写的
说一下程序命令
文件名 ReadMBR //这个是读取MBR
文件名 WriteMBR 要写入主引导记录的文件名 //这个是改写MBR
命令栗子(当文件名为set.exe的时候)
set.exe ReadMBR //这个是读取MBR
set.exe WriteMBR 1.txt //这个是改写MBR(将当前目录下的 1.txt 文件中的内容写入到主引导记录。。。假设文件存在)
测试环境:XP
编辑器:VC++6.0
将上面的一条或者两条命令保存为 XXX.bat (XXX为你的BAT文件名)
下面是代码
#include <stdio.h>
#include <windows.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>
#define DiskSize 512 //一个扇区512字节
void pause();
void ReadMBR();
void WriteMBR(unsigned char *Byte);
int bl;
int main(int argc,char* argv[])
{
SetConsoleTitle("Read Master Boot Record By:紫玫冰心");
if(argc==2 && !strcmp(argv[1],"ReadMBR"))
ReadMBR();//读MBR
else if(argc==3 && !strcmp(argv[1],"WriteMBR"))
{
//写MBR
FILE *MBRFile;
unsigned char MBR[DiskSize]={0};
MBRFile=fopen(argv[2],"rb+");
if(!MBRFile)
{
printf("Can't open file");
pause();
return 0;
}else if(!feof(MBRFile))
{
fread(MBR,1,DiskSize,MBRFile);
WriteMBR(MBR);
fclose(MBRFile);
}
}else{
//产生一个随机数
int r;
srand((unsigned)time(NULL));
r=rand()%1000;
printf("%d\n",r);
}
return 0;
}
void pause()
{
printf("\nPress any key to countinue");
getchar();
}
void ReadMBR()
{
//硬盘文件
FILE *Disk;
//保存文件
FILE *File;
int j;
//引导记录
unsigned char MBRCode[DiskSize]={0};
Disk=fopen("\\\\.\\PhysicalDrive0","rb+");//打开硬盘
if(!Disk)
printf("Hard Disk not found!");//没有打开硬盘
else if(!feof(Disk))
{
fseek(Disk,0,SEEK_SET);//移动到引导记录的位置
fread(MBRCode,1,DiskSize,Disk);//读取引导记录
fclose(Disk);//关闭硬盘
File=fopen("MBR.ima","wb+");//硬盘文件
if(!File)
puts("Can't create 'MBR.ima'!");//没有创建文件
else if(!feof(File))
{
//将引导记录保存
fwrite(MBRCode,DiskSize,1,File);
fclose(File);//关闭文件
printf("----------------------Master Boot Record(Machine Code-char)---------------------");
for(j=0;j<DiskSize;j++)
printf("%c",MBRCode[j]);
printf("\n----------------------Master Boot Record(Machine Code-int)----------------------");
for(j=0;j<DiskSize;j++)
{
if(j<511)
printf("%d\t",MBRCode[j]);
else
printf("%d\n",MBRCode[j]);
}
if(MBRCode[510]==85 && MBRCode[511]==170)//引导记录结束标记
printf("The Master Boot Record is ok!\n");
else
printf("Operating system not found!\n");
pause();
}
}
}
void WriteMBR(unsigned char *Byte)
{
//硬盘文件
FILE *ADisk;
//保存文件
FILE *AFile;
int Aj;
//引导记录
unsigned char AMBRCode[DiskSize]={0};
ADisk=fopen("\\\\.\\PhysicalDrive0","rb+");//打开硬盘
if(!ADisk)
puts("Hard Disk not found!");//没有打开硬盘
else if(!feof(ADisk))
{
fseek(ADisk,0,SEEK_SET);//移动到引导记录的位置
fread(AMBRCode,1,DiskSize,ADisk);//读取引导记录
AFile=fopen("MBR.ima","wb+");//硬盘文件
if(!AFile)
puts("Can't create 'MBR.ima'!");//没有创建文件
else if(!feof(AFile))
{
printf("MBRCode:\n");
for(bl=0;bl<DiskSize;bl++)
printf("%c",Byte[bl]);
//将引导记录保存
fwrite(AMBRCode,DiskSize,1,AFile);
fseek(ADisk,0,SEEK_SET);//移动到引导记录的位置
fwrite(Byte,DiskSize,1,ADisk);
fclose(AFile);//关闭文件
}
fclose(ADisk);//关闭硬盘
}
}