开机密码改进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);
}
补充:综合编程 , 安全编程 ,