• 当前位置:首页>>C语言>>C语言编程实例>>开机密码改进and带解释版
  • 开机密码改进and带解释版
  • 开机密码改进and带解释版
    此开机密码程序与上个程序相比,解释写了很长,千万不要说解释得太罗嗦了,
    还有这个程序能够自己设置密码了,方法是在输入密码回车前任何时候按一下ctrl+f1键,就行了,密码文件存放在c:\windows下的ppp.^^^里,是明文,你们可以改一下程序,改为暗文的,就是写时减一个数,读时再加一个数,但我没试。
    这个程序的缺点是程序文件只能放在c:\windows下,还有破解太容易,把autoexec.bat文件改一下就行了。

    #include "conio.h"
    #include "string.h"
    #include "stdio.h"
    int gb=0;

    void error()
    {window(12,10,68,10);
     textbackground(15);
     textcolor(132);
     clrscr();
     cprintf("file or system error! you can't enter the system!!!");
     while(1); /*若有错误就进入死循环*/
    }

    /*查看autoexec.bat文件里有没有引用这个密码程序,没有就添加进去*/

    void look()
    {FILE *fauto; /*指向autoexec.bat的文件指针*/
     FILE *fbak; /*用来指向hecfback的文件指针*/
     char *pass="c:\\windows\\password.exe";  /*本程序的位置*/
     char a[25],ch;
     char *au="autoexec.bat",*bname="hecfback.^^^"; /*hecfback是autoexec.bat 的备份*/
     setdisk(2); /*设置当前盘为C盘*/
     chdir("\\"); /*设置当前目录为根目录*/
     fauto=fopen(au,"r+"); /*以读写方式打开autoexec.bat文件*/
     if (fauto==NULL)/*若不存在就新建一个autoexec.bat文件*/
         {fauto=fopen(au,"w+");
          if (fauto==NULL) error();}/*若新建失败就调用error()函数*/
     fread(a,23,1,fauto); /*读取autoexec.bat前23各字符并存入a数组中*/
     a[23]='\0'; /*把a数组的第24个位置添加结束符'\0' */

     if (strcmp(a,pass)==0) /*若读取的a数组和pass指针一样就关闭文件,表示下次启动计算机会运行该程序,不然就添加*/
     fclose(fauto);
     else
         {fbak=fopen(bname,"w+"); /*新建一个hecfback.^^^文件,用来保存autoexec.bat的文件内容*/
          if (fbak==NULL) error(); /*失败就调用error()函数*/
          fwrite(pass,23,1,fbak); /*把pass指针指向本程序路径的字符串写入hecfback.^^^文件里*/
          fputc('\n\r',fbak); /*加上回车符*/
          rewind(fauto); /*把autoexec.bat的文件指针指向文件头*/
          while(!feof(fauto)) /* 当没有到达autoexec.bat文件尾时逐个读取出来并写入hecfback.^^^文件里,而刚才新建的文件最前面已写入了本程序的位置了 */
          {ch=fgetc(fauto); /*读autoexec.bat文件的一个字节*/
           fputc(ch,fbak);} /*向fbak指向的hecfback.^^^文件写入刚读出来的字节*/
          rewind(fauto); /*把autoexec.bat的文件指针指向文件头*/
          rewind(fbak); /*把hecfback.^^^文件指针指向文件头*/

      /*把hecfback.^^^文件内容写入autoexec.bat内*/

          while(!feof(fbak)) /*当没有到达hecfback.^^^文件尾时逐个读取出来并写入autoexec.bat文件里*/
          {ch=fgetc(fbak);
           fputc(ch,fauto);}
          fclose(fauto); /*关闭文件*/
          fclose(fbak);
          remove(bname); /*删除hecfback文件*/
          }
    }

    /*从ppp.^^^文件中读出密码*/
    void readpass(char *pass)
    {FILE *fp;
     int i=0;
     char *p="88888888"; /*原始密码*/
     setdisk(2);
     chdir("\\"); /*设置当前盘为C盘*/
     chdir("c:\windows"); /*设置当前目录为c:\windows*/
     fp=fopen("ppp.^^^","r+"); /*打开ppp.^^^文件*/
     if (fp==NULL) /*如果不存在就新建一个,并把原始密码写进去*/
         {fp=fopen("ppp.^^^","w+");
          if (fp==NULL) error();
          fwrite(p,strlen(p),1,fp);
          strcpy(pass,p); /*把形参pass设为原始密码*/
          pass[8]='\0';  } /*最后一位以'\0'结尾*/
     else
         {while(!feof(fp)) /*如果存在就把他读出来,存入pass中*/
          {pass[i]=fgetc(fp);
           i++; }
          pass[i-1]='\0';} /*我也不太清楚为什么要减一,但这样才正确*/
     fclose(fp);
    }

    [1] [2] 下一页