📄 lock.c
字号:
//********************************************
//文件名:LOCK.C
//功能:1. 调用读扇区汇编子程序
// 2. 调用写扇区汇编子程序
// 3. 建立扇区数据备份文件
// 4. 将扇区清零对硬盘实行加锁
// 5. 将数据写回扇区对硬盘实行解锁
//********************************************
#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"port.h" //8.包含硬盘序列号头文件
#include"pw.h" //9.包含密钥头文件
extern RHD(int,int,int,int,char *); //10.声明读扇区汇编子程序
extern WHD(int,int,int,int,char *); //11.声明写扇区汇编子程序
void jia(void); //12.声明加密函数
void jie(void); //13.声明解密函数
void copyf(void); //14.声明拷贝文件函数
void cle(void); //15.声明扇区清零函数
char name[13]; //16.
//17.
void main(int argc,char *argv[]) //18.带命令行参数的主函数
{ //19.
FILE *tmfp,*fp; //20.
char ch; //21.
char tmp[13]; //22.
char pwh[11]; //23.
int i,j,k,l; //24.
unsigned num=48059; //25.
long flag1,flag2,flag3; //26.
unsigned long m; //27.
unsigned char s1,s2,s3,s4; //28.
char sh[21]; //29.
unsigned id; //30.
unsigned cw[257]; //31.
long port=135792468; //32.设定序列号基数
long pw=135798642; //33.设定密钥基数
//34.
if(argc==1) //35.若命令行参数为1
strcpy(name,argv[0]); //36.拷贝字符串
else //37.否则
{ //38.
printf("Extra parameter [%s]",argv[1]); //39.显示提示
exit(0); //40.
} //41.
m=0; //42.
outp(0x1f6,0xa0); //43.
outp(0x1f7,0xec); //44.
while(inp(0x1f7)!=0x58 && m++<0xffff) //45.
; //46.
for(id=0;id!=256;id++) //47.
cw[id]=inpw(0x1f0); //48.
for(j=10,k=0;j<=19;j++) //49.
{ //50.
sh[k++]=(char)(cw[j]/256); //51.
sh[k++]=(char)(cw[j]%256); //52.
} //53.
sh[k]='\0'; //54.
l=strlen(sh); //55.
//56.
for(i=0;i<l;i++) //57.
{ //58.
srand(port); //59.
ch=rand(); //60.
hdport[i]=hdport[i]^ch; //61.
port++; //62.
} //63.
for(i=0;i<l;i++) //64.
{ //65.
if(sh[i]==hdport[i]) //66.如果两个字符相等
; //67.空操作
else //68.否则
{ //69.
textcolor(14); //70.设置字符颜色
cprintf("Illegal user!"); //71.显示警告提示
textcolor(7); //72.
cprintf("\n"); //73.
remove(name); //74.删除文件
while(1) //75.条件为真
; //76.死循环
} //77.
} //78.
//79.
if(num>0) //80.辅助语句
; //81.
flag1=0; //82.
while(1) //83.
{ //84.
printf("Enter password: "); //85.
scanf("%s",pwh); //86.输入密钥
strcpy(pwh,strupr(pwh)); //87.转为大写
for(i=0;i<10;i++) //88.
{ //89.
srand(pw); //90.
ch=rand(); //91.
hdpw[i]=hdpw[i]^ch; //92.
pw=pw+7; //93.
} //94.
j=0; //95.
for(i=0;i<10;i++) //96.
{ //97.
if(pwh[i]==hdpw[i]) //98.
j++; //99.
else //100.
{ //101.
flag1=88; //102.设定标志
break; //103.跳出循环
} //104.
} //105.
if(flag1==88) //106.若标志为真
{ //107.
fp=fopen("hdlock.exe","rb+"); //108.打开文件
fseek(fp,1380,0); //109.移动文件指针
fread(&id,2,1,fp); //110.读两个字节的值
if((id-48059)>=2) //111.判断运行次数
{ //112.
textcolor(14); //113.
cprintf("Illegal user!"); //114.显示警告语句
textcolor(7); //115.
cprintf("\n"); //116.
remove(name); //117.删除文件
while(1) //118.
; //119.
} //120.
printf("Password is not correct!\n"); //121.
textcolor(15); //122.
cprintf("Can use %d life!", //123.显示提示语句
2-(id-48059)); //124.
textcolor(7); //125.
cprintf("\n"); //126.
id++; //127.
rewind(fp); //128.指针回到文件头
fseek(fp,1380,0); //129.
fwrite(&id,2,1,fp); //130.将数据写入文件
fclose(fp); //131.
exit(0); //132.
} //133.
printf("\n"); //134.
if(j==10) //135.若字符比较全部相等
{ //136.
id=48059; //137.
fp=fopen("hdlock.exe","rb+"); //138.
fseek(fp,1380,0); //139.
fwrite(&id,2,1,fp); //140.恢复初值
fclose(fp); //141.
break; //142.
} //143.
} //144.
//145.
m=63; //146.
tmfp=tmpfile(); //147.
fwrite(&m,4,1,tmfp); //148.
rewind(tmfp); //149.
fread(&s4,1,1,tmfp); //150.
fread(&s3,1,1,tmfp); //151.
fread(&s2,1,1,tmfp); //152.
fread(&s1,1,1,tmfp); //153.
fclose(tmfp); //154.
tmpnam(tmp); //155.
RHD(s1,s2,s3,s4,tmp); //156.调用读扇区汇编子程序
flag1=0; //157.
fp=fopen(tmp,"rb"); //158.
for(i=0;i<=511;i++) //159.
{ //160.
ch=fgetc(fp); //161.
flag1+=ch; //162.字节累加
} //163.
fclose(fp); //164.
remove(tmp); //165.删除临时文件
m=64; //166.
tmfp=tmpfile(); //167.
fwrite(&m,4,1,tmfp); //168.
rewind(tmfp); //169.
fread(&s4,1,1,tmfp); //170.
fread(&s3,1,1,tmfp); //171.
fread(&s2,1,1,tmfp); //172.
fread(&s1,1,1,tmfp); //173.
fclose(tmfp); //174.
tmpnam(tmp); //175.
RHD(s1,s2,s3,s4,tmp); //176.
flag2=0; //177.
fp=fopen(tmp,"rb"); //178.
for(i=0;i<=511;i++) //179.
{ //180.
ch=fgetc(fp); //181.
flag2+=ch; //182.
} //183.
fclose(fp); //184.
remove(tmp); //185.
m=65; //186.
tmfp=tmpfile(); //187.
fwrite(&m,4,1,tmfp); //188.
rewind(tmfp); //189.
fread(&s4,1,1,tmfp); //190.
fread(&s3,1,1,tmfp); //191.
fread(&s2,1,1,tmfp); //192.
fread(&s1,1,1,tmfp); //193.
fclose(tmfp); //194.
tmpnam(tmp); //195.
RHD(s1,s2,s3,s4,tmp); //196.
flag3=0; //197.
fp=fopen(tmp,"rb"); //198.
for(i=0;i<=511;i++) //199.
{ //200.
ch=fgetc(fp); //201.
flag3+=ch; //202.
} //203.
fclose(fp); //204.
remove(tmp); //205.
if((flag1==0)&&(flag2==0)&&(flag3==0)) //206.若条件为真
{ //207.
textcolor(138); //208.
cprintf("DECRYPT"); //209.
textcolor(7); //210.
cprintf("\n"); //211.
printf("\n"); //212.
jie(); //213.调用解锁函数
} //214.
else //215.否则
{ //216.
textcolor(141); //217.
cprintf("ENCRYPT"); //218.
textcolor(7); //219.
cprintf("\n"); //220.
printf("\n"); //221.
jia(); //222.调用加锁函数
copyf(); //223.调用拷贝文件函数
cle(); //224.调用扇区清零函数
} //225.
} //226.
//227.
void jia() //228.加锁函数
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -