开机密码改进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();
}
Word教程网 | Excel教程网 | Dreamweaver教程网 | Fireworks教程网 | PPT教程网 | FLASH教程网 | PS教程网 |
HTML教程网 | DIV CSS教程网 | FLASH AS教程网 | ACCESS教程网 | SQL SERVER教程网 | C语言教程网 | JAVASCRIPT教程网 |
ASP教程网 | ASP.NET教程网 | CorelDraw教程网 |