⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lockmain.c

📁 用c 写的实现硬盘锁程序(带汉显)
💻 C
📖 第 1 页 / 共 3 页
字号:
//********************************************
//文件名: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 + -