第一种方法:改引导记录
硬盘上的引导区位于硬盘上的第一个扇区,它的完整与否直接关系到机器能否正常的运作,有很多病毒都是攻击破坏硬盘的引导记录,导致系统的瘫痪。但是我们同样也可以 字串7
硬盘加密的两种方法 字串8
利用这个特性,来达到加密硬盘的效果。
首先还是让我们来看看硬盘的引导扇区的内容:
000H 主引导记录(240字节)
0F0H 全0(206字节)
1BEH 第一分区表(16字节)
1CEH 第二分区表(16字节)
1DEH 第三分区表(16字节)
1EEH 第四分区表(16字节)
55H AAH
主引导扇区最后两个字节55H和AAH是硬盘自举记录的有效标志。我们可以修改其达到硬盘加密的效果。修改后如果还是用硬盘启动的话,系统就会提示:
Disk Boot Failture,Insert system Disk AND Press Enter。
为了防止失误(呵呵,失误了,你的硬盘就找不到了哦!)给出的程序清单包括了引导区信息的备份和恢复。
C语言(turbo C)程序清单如下:
#include <stdio.h>
#include <bios.h>
#include <fcntl.h>
#include <sys\types.h>
#include <sys\stat.h>
void helpmsg(void);
int main(int acount,char *agive[])
{
int temp;
char buffer[512];
FILE *fp;
if(account==1) helpmsg();
if(*agive[1]=='a'||*agive[1]=='A')
{
temp=biosdisk(2,0x80,0,0,1,1,buffer); 字串7
/*
biosdisk()函数使用如下:
int biosdisk(int cmd,int drive,int track,int sector,int nsects,void *buffer)
该函数使用中断0x13,把磁盘操作转给BIOS。其中cmd是命令类型,2代表读盘操作,3代表写盘操作。Drive为0x0时表示A盘(第一个软驱);为0x01时表示B盘(第二个软驱);为0x80时代表第一个硬盘,该函数有返回值,返回0时,表示操作成功。
*/
if(!temp)
{
printf("硬盘引导区信息读取成功!\n");
if((fp=fopen("diskboot.dat","wb+"))==NULL)
{
printf("文件diskboot.dat写入失败!\n");
exit(1);
}
fwrite(buffer,1,512,fp);
fclose(fp);
printf("硬盘引导区信息保存成功!\n");
return 0;
}
else
{
printf("硬盘引导区信息.读取失败!\n");
exit(1);
}
}
if(*agive[1]=='b'||*agive[1]=='B')
{
if((fp=fopen("diskboot.dat","rb+"))==NULL)
{
printf("文件diskboot.dat打开失败!\n"); 字串2
exit(1);
}
fread(buffer,1,512,fp);
temp=biosdisk(3,0x80,0,0,1,1,buffer);
if(!temp)
{
printf("硬盘引导区信息恢复成功!\n");
fclose(fp);
return 0;
}
else
{
printf("硬盘引导区信息恢复失败!");
fclose(fp);
exit(1);
}
}
if(*agive[1]=='c'||*agive[1]=='C')
{
temp=biosdisk(2,0x80,0,0,1,1,buffer);
if(!temp)
{
buffer[510]=0x0;
buffer[511]=0x0;
}
if(!temp) temp=biosdisk(3,0x80,0,0,1,1,buffer);
(!temp)?(printf("硬盘加密成功!\n")):(printf("硬盘加密失败!\n"));
}
if(*agive[1]=='d'||*agive[1]=='D')
{
temp=biosdisk(2,0x80,0,0,1,1,buffer);
if(!temp)
{
buffer[510]=0x55;
buffer[511]=0xAA;
}
if(!temp) temp=biosdisk(3,0x80,0,0,1,1,buffer);
(!temp)?(printf("硬盘解密成功!\n")):(printf("硬盘解密失败!\n"));
}
return 0;
}
void helpmsg(void) 字串8
{
puts("本命令正确格式: sdisk [a|b|c|d]");
puts("a 备份硬盘引导区信息");
puts("b 恢复硬盘引导区信息");
puts("c 硬盘加密");
puts("d 硬盘解密");
exit(0);
}
最后要做的就.是把这个程序编译后生成一个名为sdisk.exe的文件,并且放在能启动dos的软盘中。记住,一定要放在软盘中(硬盘已经被锁住了,放在硬盘上的话,就没有办法恢复了哦!)。
第二种方法:软件屏蔽C盘
这里所提到的软件屏蔽C盘可不是象什么windows优化大师那样改windows注册表而达到屏蔽C盘的效果。这里屏蔽掉的C盘,是不能用作启动的。
当PC启动后,BIOS会进行自诊断测试,硬件设备.配置情况和一些操作结果存放在ROM BIOS的系统参数区内0040:0000开始的256个RAM单元中,这些数据控制着机器的很多操作,这些数据在设计时仅仅是为了BIOS使用,但是用户.程序也可以读取这些数据,以便了解机器状.态,而且有些参数还可以修改,来对机器进行控制。我们就是针对这些,来对C盘进行了屏蔽。
C盘状态是地址为0040:0075单元。修改其数值就可以达到屏蔽C的目的。 字串3
C程序清单如下:
#include <stdio.h>
#include <dos.h>
char far *ptr;
void helpmsg(void);
void main(int acount,char *agive[])
{
if(acount==1) helpmsg();
if(*agive[1]=='A'||*agive[1]=='a')
{
ptr=(char far *)MK_FP(0x0040,0x0075);
*ptr=0x0;
printf("硬盘加密成功!\n")
}
if(*agive[1]=='b'||*agive[1]=='B')
{
ptr=(char far *)MK_FP(0x0040,0x0075);
*ptr++=0x01;
*ptr=0x80;
printf("硬盘解密成功!\n")
}
return 0;
}
void helpmsg(void)
{
puts("命令正确格式:pdisk [a|b]");
puts("a 加密硬盘");
puts("b 解密硬盘");
}
最后要做的和第一种方法一样,就是把程序编译成pdisk.exe文件放在软盘中。呵呵,这样就可以保护自己的绝密资料啦! 字串7