CHGPASS.C
上传用户:petreluo
上传日期:2007-01-06
资源大小:7k
文件大小:3k
源码类别:

磁盘编程

开发平台:

Others

  1. #include<stdio.h>
  2. #include<dos.h>
  3. void ReadStr(char *str)
  4. {
  5.  unsigned char Plength=1;
  6.  unsigned xx,yy,x;
  7.  union REGS r;
  8.  xx=wherex();yy=wherey();
  9.  x=xx;
  10.  do{
  11.      gotoxy(xx,yy);
  12.      r.h.ah=0;
  13.      int86(0x16,&r,&r);
  14.      if((r.h.ah!=28)&&(r.h.ah!=14)&&(r.h.ah!=1))
  15.      {
  16.       *(str+Plength)=(r.h.al-20)|0x80;
  17.       gotoxy(xx,yy);
  18.       putch('*');
  19.       xx++;Plength++;
  20.      }
  21.      else if(r.h.ah==14)
  22.           {
  23.            xx--;
  24.            if(xx<x)xx=x;
  25.            gotoxy(xx,yy);
  26.            putch(' ');
  27.            if(Plength>1)Plength--;
  28.           }
  29.           else if(r.h.ah==1)Plength=0;
  30.     }while((r.h.ah!=28)&&(r.h.ah!=1)&&(Plength<15));
  31.     *(str+0)=Plength-1;
  32. }
  33. int CheckPass(char *src,char *dest)
  34. {
  35.  unsigned char Plength;
  36.  Plength=*(src+0);
  37.  while(Plength>0)
  38.  {
  39.   if(*(src+Plength)!=*(dest+Plength))return -1;
  40.   Plength--;
  41.  }
  42.  return 1;
  43. }
  44. int CopyPass(char *src,char *dest)
  45. {
  46.  char Plength;
  47.  Plength=*(src+0);
  48.  while(Plength>=0)
  49.  {
  50.   *(dest+Plength)=*(src+Plength);
  51.   Plength--;
  52.  }
  53.  return 0;
  54. }
  55. void reboot(void)
  56. {
  57.  void (far *reboot_ptr)(void);
  58.  unsigned int far *i_ptr;
  59.  clrscr();
  60.  i_ptr=MK_FP(0x0040,0x0072);
  61.  *i_ptr=0x1234;
  62.  reboot_ptr=MK_FP(0xF000,0xFFF0);
  63.  reboot_ptr();
  64. }
  65. void copyright()
  66. {
  67.  printf("n Babysoft  (R) Password Changer for Lockd version 2.0");
  68.  printf("n Copyright (C) 1997.12 LiuYaDing,Babysoft Corp.n");
  69. }
  70. void main()
  71. {
  72.  unsigned char part[512],buf[512];
  73.  char passwd[16],passwd1[16];
  74.  char *source;
  75.  char key;
  76.  int lock=0;
  77.  copyright();
  78.  if(biosdisk(0x02,0x80,0,0,1,1,buf)||biosdisk(0x02,0x80,0,0,14,1,part))
  79.  {
  80.    printf("na Read Old Password error!");
  81.    printf("n Read Backup Info error!");
  82.    exit(0);
  83.  }
  84.  if((buf[0x182]=='B')&&(buf[0x183]=='a')&&(buf[0x184]=='b')&&(buf[0x185]=='y')
  85.   &&(buf[0x186]=='s')&&(buf[0x187]=='o')&&(buf[0x188]=='f')&&(buf[0x189]=='t')
  86.   &&(buf[0x18A]==' ')&&(buf[0x18B]=='L')&&(buf[0x18C]=='o')&&(buf[0x18D]=='c')
  87.   &&(buf[0x18E]=='k')&&(buf[0x18F]=='d')&&(buf[0x190]==' ')&&(buf[0x191]=='v')
  88.   &&(buf[0x192]=='2')&&(buf[0x193]=='.')&&(buf[0x194]=='0'))lock=1;
  89.  if(lock==0)
  90.  {
  91.   printf("na Babysoft-Lockd2.0 hasn't installed on your Hard Disk!n");
  92.   exit(0);
  93.  }
  94.  source=part+0x5E;
  95.  printf("n Old Password: ");
  96.  ReadStr(passwd);
  97.  if(CheckPass(source,passwd)==1)
  98.  {
  99.   printf("n New Password: ");
  100.   ReadStr(passwd);
  101.   printf("n V e r i f y : ");
  102.   ReadStr(passwd1);
  103.   if(CheckPass(passwd,passwd1)==1)
  104.   {
  105.    CopyPass(passwd,source);
  106.    if(biosdisk(0x03,0x80,0,0,14,1,part))
  107.    {printf("na Password changed failed!n");exit(0);}
  108.    else {printf("n Password changed ok.");exit(1);}
  109.    printf("n Do you want to reboot to enable new password?(Y/N)");
  110.    key=getch();
  111.    if((key=='Y')||(key=='y'))reboot();
  112.   }
  113.   else {printf("na Password Verified error!n");exit(1);}
  114.  }
  115.  else {printf("na Wrong Password!n");exit(1);}
  116. }