?? 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 + -