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

磁盘编程

开发平台:

Others

  1. #include<stdio.h>
  2. #include<dos.h>
  3. #define MemSize *(unsigned far *)0x00400013
  4. void ReadStr(char *str)
  5. {
  6.  unsigned char Plength=1;
  7.  unsigned xx,yy,x;
  8.  union REGS r;
  9.  xx=wherex();yy=wherey();
  10.  x=xx;
  11.  do{
  12.      gotoxy(xx,yy);
  13.      r.h.ah=0;
  14.      int86(0x16,&r,&r);
  15.      if((r.h.ah!=28)&&(r.h.ah!=14)&&(r.h.ah!=1))
  16.      {
  17.       *(str+Plength)=(r.h.al-20)|0x80;
  18.       gotoxy(xx,yy);
  19.       putch('*');
  20.       xx++;Plength++;
  21.      }
  22.      else if(r.h.ah==14)
  23.           {
  24.            xx--;
  25.            if(xx<x)xx=x;
  26.            gotoxy(xx,yy);
  27.            putch(' ');
  28.            if(Plength>1)Plength--;
  29.           }
  30.           else if(r.h.ah==1)Plength=0;
  31.     }while((r.h.ah!=28)&&(r.h.ah!=1)&&(Plength<15));
  32.     *(str+0)=Plength-1;
  33. }
  34. int ReadPass(char *buffer)
  35. {
  36.  union REGS ireg;
  37.  struct SREGS oreg;
  38.  ireg.x.ax=0x0201;
  39.  ireg.x.bx=FP_OFF(buffer);
  40.  ireg.x.cx=0x0006;
  41.  ireg.x.dx=0x0080;
  42.  oreg.es=FP_SEG(buffer);
  43.  int86x(0x50,&ireg,&ireg,&oreg);
  44.  return ireg.h.ah;
  45. }
  46. int WritePass(char *buffer)
  47. {
  48.  union REGS ireg;
  49.  struct SREGS oreg;
  50.  ireg.x.ax=0x0301;
  51.  ireg.x.bx=FP_OFF(buffer);
  52.  ireg.x.cx=0x0006;
  53.  ireg.x.dx=0x0080;
  54.  oreg.es=FP_SEG(buffer);
  55.  int86x(0x50,&ireg,&ireg,&oreg);
  56.  return ireg.h.ah;
  57. }
  58. int CheckPass(char *src,char *dest)
  59. {
  60.  unsigned char Plength;
  61.  Plength=*(src+0);
  62.  while(Plength>0)
  63.  {
  64.   if(*(src+Plength)!=*(dest+Plength))return -1;
  65.   Plength--;
  66.  }
  67.  return 1;
  68. }
  69. int CopyPass(char *src,char *dest)
  70. {
  71.  char Plength;
  72.  Plength=*(src+0);
  73.  while(Plength>=0)
  74.  {
  75.   *(dest+Plength)=*(src+Plength);
  76.   Plength--;
  77.  }
  78.  return 0;
  79. }
  80. void reboot(void)
  81. {
  82.  void (far *reboot_ptr)(void);
  83.  unsigned int far *i_ptr;
  84.  clrscr();
  85.  i_ptr=MK_FP(0x0040,0x0072);
  86.  *i_ptr=0x1234;
  87.  reboot_ptr=MK_FP(0xF000,0xFFF0);
  88.  reboot_ptr();
  89. }
  90. void copyright()
  91. {
  92.  printf("n Babysoft  (R) Password Changer for Hard Disk Dog version 1.0");
  93.  printf("n Copyright (C) 1997.10 LiuYaDing,Babysoft Corp.n");
  94. }
  95. void main()
  96. {
  97.  char buffer[512];
  98.  char passwd[16],passwd1[16];
  99.  char *source;
  100.  char key;
  101.  copyright();
  102.  if(MemSize==0x280)
  103.  {
  104.   printf("na Babysoft-HDDOG Not Installed.n");
  105.   exit(1);
  106.  }
  107.  while(ReadPass(buffer)!=0);
  108.  source=buffer+0x200-32;
  109.  printf("n Old Password: ");
  110.  ReadStr(passwd);
  111.  if(CheckPass(source,passwd)==1)
  112.  {
  113.   printf("n New Password: ");
  114.   ReadStr(passwd);
  115.   printf("n V e r i f y : ");
  116.   ReadStr(passwd1);
  117.   if(CheckPass(passwd,passwd1)==1)
  118.   {
  119.    CopyPass(passwd,source);
  120.    WritePass(buffer);
  121.    printf("n Do you want to reboot to enable new password?(Y/N)");
  122.    key=getch();
  123.    if((key=='Y')||(key=='y'))reboot();
  124.    else {printf("n Password changed ok.");exit(1);}
  125.   }
  126.   else {printf("na Wrong Password!");exit(1);}
  127.  }
  128. }