论坛交流
首页办公自动化| 网页制作| 平面设计| 动画制作| 数据库开发| 程序设计| 全部视频教程
应用视频: Windows | Word2007 | Excel2007 | PowerPoint2007 | Dreamweaver 8 | Fireworks 8 | Flash 8 | Photoshop cs | CorelDraw 12
编程视频: C语言视频教程 | HTML | Div+Css布局 | Javascript | Access数据库 | Asp | Sql Server数据库Asp.net  | Flash AS
当前位置 > 文字教程 > C语言程序设计教程
Tag:新手,函数,指针,数据类型,对象,Turbo,入门,运算符,数组,结构,二级,,tc,游戏,试题,问答,编译,视频教程

开机密码改进and带解释版

文章类别:C语言程序设计 | 发表日期:2008-9-24 14:44:17

开机密码改进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);
}


/*输入密码的函数*/
void inputpass(char *pass)
{int n=0; /*控制密码个数*/
  while(1)
  {pass[n]=getch();/*把输入的一个字符存入input中的第n个数组元素中*/
   if (pass[n]==0)
       {pass[n]=getch();
 if (pass[n]==94) gb=1;
 continue;} /*假如是控制键就把后面那一个字符吃掉,假如是ctrl+f1就把gb置1,用在pass函数里输入密码时的,并重新开始循环,注:输入控制键时,系统会给出两个字符的,第一个为0*/
   if (n>23) {putchar(7); break;} /*若字符多于23个字符就结束本次输入,并发出一声响*/
   if (pass[n]==13) break; /*假如是回车就结束*/
   if (pass[n]>=32 && pass[n]<=122) /*若字符是数字或字母才算数*/
       {putchar('*');
 n++;}
   if (pass[n]==8) /*删除键*/
       if (n>0)/*假如是删除键,且至少输入了一个字符就在屏幕上删除前一个*号,且input数组也前进一位*/
    {cprintf("\b \b"); /*'\b'为光标在屏幕上前移一位,但并不删除前一位,所以用空格删除,再前一位*/
     pass[n]='\0'; /*并把数组中的数据清0*/
     n--;} /*密码个数也减一*/
   }
   pass[n]='\0';
}

/*改变密码函数*/
void gbpass()
{FILE *fp;
 int i;
 char a[25],b[25];
 fp=fopen("ppp.^^^","r+"); /*打开ppp.^^^文件*/
 if (fp==NULL) error();
 for (i=0;i<40;i++) /*把文件里的内容清零*/
     fputc('\0',fp);
do{
 window(10,12,70,12);
 textbackground(1);
 textcolor(15);
 clrscr();
 cprintf("please input new password:");
 inputpass(a); /*调用inputpass函数,输入a的值*/

 window(10,14,70,14);
 textbackground(1);
 textcolor(15);
 clrscr();
 cprintf("please input again:");
 inputpass(b); /*输入b的值*/
 if (strcmp(a,b)!=0)
     {window(10,16,20,16);
      textbackground(1);
      textcolor(15);
      clrscr();
      cprintf("error!");
      getch();} }/*假如a、b不等,提示error*/
while(strcmp(a,b));

rewind(fp);
fwrite(a,strlen(a),1,fp); /*把密码写入ppp.^^^文件*/
fclose(fp);
}

void pass()
{char password[25];
 char input[25]; /*输入密码的数组*/
 while(1)
 {window(1,1,80,25);
  textbackground(0);
  textcolor(15);
  clrscr();/*清屏*/

  readpass(password);
  window(20,12,60,12);
  textbackground(1);
  textcolor(15);
  clrscr();
  cprintf("password:"); /*以蓝背景黑字画一个窗口,并写出password:提示*/
  inputpass(input);
  if (strcmp(password,input)==0) /*输入完后,输入的密码和程序里的密码一样就通过,并退出 本程序*/
      {if (gb==1) gbpass(); break;}
  else  /*若不一样就提示*/
      {putchar(7);
       window(30,14,50,14);
       textbackground(15);
       textcolor(132); /*132为闪烁的字*/
       clrscr();
       cprintf("password error!");
       getch();}
  }
}

main()
{look();
 pass();
}

上一篇:{实例}字母的几种排法 人气:6828
下一篇:{实例}掷骰子 人气:5451
视频教程列表
文章教程搜索
 
C语言程序设计推荐教程
C语言程序设计热门教程