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

📄 lock.c

📁 硬盘锁和解锁代码。
💻 C
📖 第 1 页 / 共 3 页
字号:
//********************************************
//文件名: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 + -