📄 lockmain.c
字号:
//********************************************
//文件名:LOCKMAIN.C
//功能:1. 调用显示汉字函数
// 2. 调用字符处理函数
// 3. 调用读扇区汇编子程序
// 4. 调用写扇区汇编子程序
// 5. 建立扇区数据备份文件
// 6. 将扇区清零对硬盘实行加锁
// 7. 将数据写回扇区对硬盘实行解锁
//********************************************
#include<string.h> //1.
#include<stdio.h> //2.
#include<conio.h> //3.
#include<ctype.h> //4.
#include<stdlib.h> //5.
#include<fcntl.h> //6.
#include<io.h> //7.
#include<graphics.h> //8.
#include"port.h" //9.包含硬盘序列号头文件
#include"pw.h" //10.包含密钥头文件
extern RHD(int,int,int,int,char *); //11.声明读扇区汇编子程序
extern WHD(int,int,int,int,char *); //12.声明写扇区汇编子程序
int outhz(int,int,char *,int); //13.声明汉字显示函数
void finame(int,int); //14.声明字符处理函数
void jia(void); //15.声明加密函数
void jie(void); //16.声明解密函数
void copyf(void); //17.声明拷贝文件函数
void cle(void); //18.声明扇区清零函数
char name[13]; //19.
//20.
void main(int argc,char *argv[]) //21.带命令行参数的主函数
{ //22.
FILE *tmfp,*fp; //23.
char ch; //24.
char tmp[30]; //25.
char pwh[11]; //26.
int i,j,k,l; //27.
unsigned num=48059; //28.
long flag1,flag2,flag3; //29.
unsigned long m; //30.
unsigned char s1,s2,s3,s4; //31.
char sh[21]; //32.
unsigned id; //33.
unsigned cw[257]; //34.
long port=135792468; //35.设定序列号基数
long pw=135798642; //36.设定密钥基数
extern char gsh[16]; //37.
int gdriver=DETECT,gmode; //38.
registerbgidriver(EGAVGA_driver); //39.
initgraph(&gdriver,&gmode,""); //40.
setbkcolor(0); //41.
cleardevice(); //42.
//43.
if(argc==1) //44.若命令行参数为1
strcpy(name,argv[0]); //45.
else //46.否则
{ //47.
strcpy(tmp,"多余的参数:"); //48.
strcat(tmp,argv[1]); //49.
setviewport(0,20,200,60,0); //50.
outhz(0,0,tmp,7); //51.调用汉字显示函数
outhz(0,20,"按任一键退出",7); //52.
getch(); //53.
closegraph(); //54.
exit(0); //55.
} //56.
m=0; //57.
outp(0x1f6,0xa0); //58.
outp(0x1f7,0xec); //59.
while(inp(0x1f7)!=0x58 && m++<0xffff) //60.
; //61.
for(id=0;id!=256;id++) //62.
cw[id]=inpw(0x1f0); //63.
for(j=10,k=0;j<=19;j++) //64.
{ //65.
sh[k++]=(char)(cw[j]/256); //66.
sh[k++]=(char)(cw[j]%256); //67.
} //68.
sh[k]='\0'; //69.
l=strlen(sh); //70.
//71.
for(i=0;i<l;i++) //72.
{ //73.
srand(port); //74.
ch=rand(); //75.
hdport[i]=hdport[i]^ch; //76.
port++; //77.
} //78.
for(i=0;i<l;i++) //79.
{ //80.
if(sh[i]==hdport[i]) //81.硬盘序列号字符若相等
; //82.空操作
else //83.否则
{ //84.
setviewport(0,20,200,40,0); //85.
outhz(0,0,"非法用户!",14); //86.
remove(name); //87.
while(1) //88.
; //89.
} //90.
} //91.
//92.
if(num>0) //93.
; //94.
flag1=0; //95.
while(1) //96.
{ //97.
setviewport(0,20,200,40,0); //98.
outhz(0,0,"输入密钥:",7); //99.调用汉字显示函数
finame(90,20); //100.调用字符处理函数
strcpy(pwh,gsh); //101.
strcpy(pwh,strupr(pwh)); //102.字符串转大写
for(i=0;i<10;i++) //103.
{ //104.
srand(pw); //105.
ch=rand(); //106.
hdpw[i]=hdpw[i]^ch; //107.
pw=pw+7; //108.
} //109.
j=0; //110.
for(i=0;i<10;i++) //111.
{ //112.
if(pwh[i]==hdpw[i]) //113.密钥字符若相等
j++; //114.
else //115.否则
{ //116.
flag1=88; //117.
break; //118.
} //119.
} //120.
if(flag1==88) //121.
{ //122.
fp=fopen("hhdlock.exe","rb+"); //123.以添加方式打开文件
fseek(fp,2362,0); //124.移动文件指针
fread(&id,2,1,fp); //125.读两个字节的值
if((id-48059)>=2) //126.
{ //127.
cleardevice(); //128.
setviewport(0,20,200,40,0); //129.
outhz(0,0,"非法用户!",14); //130.
remove(name); //131.
while(1) //132.
; //133.
} //134.
setviewport(0,40,200,100,0); //135.
outhz(0,0,"输入的密钥错误!",15); //136.
strcpy(tmp,"剩余的输入密钥的次数:"); //137.
i=2-(id-48059); //138.
itoa(i,pwh,10); //139.
strcat(tmp,pwh); //140.
outhz(0,20,tmp,15); //141.
id++; //142.
rewind(fp); //143.
fseek(fp,2362,0); //144.
fwrite(&id,2,1,fp); //145.
fclose(fp); //146.
outhz(0,40,"按任一键退出",7); //147.
getch(); //148.
closegraph(); //149.
exit(0); //150.
} //151.
printf("\n"); //152.
if(j==10) //153.
{ //154.
id=48059; //155.
fp=fopen("hhdlock.exe","rb+"); //156.
fseek(fp,2362,0); //157.
fwrite(&id,2,1,fp); //158.恢复原来的值
fclose(fp); //159.
break; //160.
} //161.
} //162.
//163.
m=63; //164.
tmfp=tmpfile(); //165.
fwrite(&m,4,1,tmfp); //166.
rewind(tmfp); //167.
fread(&s4,1,1,tmfp); //168.
fread(&s3,1,1,tmfp); //169.
fread(&s2,1,1,tmfp); //170.
fread(&s1,1,1,tmfp); //171.
fclose(tmfp); //172.
tmpnam(tmp); //173.
RHD(s1,s2,s3,s4,tmp); //174.
flag1=0; //175.
fp=fopen(tmp,"rb"); //176.
for(i=0;i<=511;i++) //177.
{ //178.
ch=fgetc(fp); //179.
flag1+=ch; //180.
} //181.
fclose(fp); //182.
remove(tmp); //183.
m=64; //184.
tmfp=tmpfile(); //185.
fwrite(&m,4,1,tmfp); //186.
rewind(tmfp); //187.
fread(&s4,1,1,tmfp); //188.
fread(&s3,1,1,tmfp); //189.
fread(&s2,1,1,tmfp); //190.
fread(&s1,1,1,tmfp); //191.
fclose(tmfp); //192.
tmpnam(tmp); //193.
RHD(s1,s2,s3,s4,tmp); //194.
flag2=0; //195.
fp=fopen(tmp,"rb"); //196.
for(i=0;i<=511;i++) //197.
{ //198.
ch=fgetc(fp); //199.
flag2+=ch; //200.
} //201.
fclose(fp); //202.
remove(tmp); //203.
m=65; //204.
tmfp=tmpfile(); //205.
fwrite(&m,4,1,tmfp); //206.
rewind(tmfp); //207.
fread(&s4,1,1,tmfp); //208.
fread(&s3,1,1,tmfp); //209.
fread(&s2,1,1,tmfp); //210.
fread(&s1,1,1,tmfp); //211.
fclose(tmfp); //212.
tmpnam(tmp); //213.
RHD(s1,s2,s3,s4,tmp); //214.
flag3=0; //215.
fp=fopen(tmp,"rb"); //216.
for(i=0;i<=511;i++) //217.
{ //218.
ch=fgetc(fp); //219.
flag3+=ch; //220.
} //221.
fclose(fp); //222.
remove(tmp); //223.
if((flag1==0)&&(flag2==0)&&(flag3==0)) //224.
{ //225.
setviewport(0,40,200,80,0); //226.
outhz(0,0,"正在解锁,请稍等",10); //227.
jie(); //228.
outhz(0,40,"解锁成功",15); //229.
outhz(0,60,"按任一键退出",7); //230.
getch(); //231.
closegraph(); //232.
} //233.
else //234.
{ //235.
if((fp=fopen("data.hd","rb"))!=NULL) //236.检测文件名
{ //237.
fclose(fp); //238.
cleardevice(); //239.
setviewport(0,20,620,60,0); //240.
outhz(0,20,"[data.hd]文件已在当前" //241.
"目录中,请先将其删除或移走,再" //242.
"运行程序",7); //243.
outhz(0,40,"按任一键退出",7); //244.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -