当前位置:编程学习 > 网站相关 >>

开机密码改进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 cant 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]=; /*把a数组的第24个位置添加结束符 */

 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( ,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]=;  } /*最后一位以结尾*/
 else
     {while(!feof(fp)) /*如果存在就把他读出来,存入pass中*/
      {pass[i]=fgetc(fp);
       i++; }
      pass[i-1]=;} /*我也不太清楚为什么要减一,但这样才正确*/
 fclose(fp);
}

补充:综合编程 , 安全编程 ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,