GOKEEPER.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 ReadPart(char *buffer)
  47. {
  48.  union REGS ireg;
  49.  struct SREGS oreg;
  50.  ireg.x.ax=0x0201;
  51.  ireg.x.bx=FP_OFF(buffer);
  52.  ireg.x.cx=0x0003;
  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 WritePart(char *buffer)
  59. {
  60.  union REGS ireg;
  61.  struct SREGS oreg;
  62.  ireg.x.ax=0x0301;
  63.  ireg.x.bx=FP_OFF(buffer);
  64.  ireg.x.cx=0x0001;
  65.  ireg.x.dx=0x0080;
  66.  oreg.es=FP_SEG(buffer);
  67.  int86x(0x50,&ireg,&ireg,&oreg);
  68.  return ireg.h.ah;
  69. }
  70. int CheckPass(char *src,char *dest)
  71. {
  72.  unsigned char Plength,p2;
  73.  Plength=*(src+0);
  74.  p2=*(dest+0);
  75.  if(Plength!=p2)return -1;
  76.  while(Plength>0)
  77.  {
  78.   if(*(src+Plength)!=*(dest+Plength))return -1;
  79.   Plength--;
  80.  }
  81.  return 1;
  82. }
  83. void reboot(void)
  84. {
  85.  void (far *reboot_ptr)(void);
  86.  unsigned int far *i_ptr;
  87.  clrscr();
  88.  i_ptr=MK_FP(0x0040,0x0072);
  89.  *i_ptr=0x1234;
  90.  reboot_ptr=MK_FP(0xF000,0xFFF0);
  91.  reboot_ptr();
  92. }
  93. void copyright()
  94. {
  95.  printf("n Babysoft  (R) Hard Disk Keeper Killer version 1.0");
  96.  printf("n Copyright (C) 1997.12 LiuYaDing,Babysoft Corp.n");
  97. }
  98. void main()
  99. {
  100.  char buffer[512];
  101.  char passwd[16],passwd1[16];
  102.  char *source;
  103.  char key;
  104.  copyright();
  105.  if(MemSize==0x280)
  106.  {
  107.   printf("na Babysoft-Hard Disk Keeper Not Installed.");
  108.   printf("n If you boot from drive A: ,please try drive C: again.n");
  109.   exit(1);
  110.  }
  111.  while(ReadPass(buffer)!=0);
  112.  source=buffer+0x200-32;
  113.  printf("n Password: ");
  114.  ReadStr(passwd);
  115.  if(CheckPass(source,passwd)==1)
  116.  {
  117.   while((ReadPart(buffer))!=0);
  118.   while((WritePart(buffer))!=0);
  119.   printf("n Babysoft-Hard Disk Keeper Killed ok.");
  120.   printf("n Press any key reboot system...");
  121.   getch();
  122.   reboot();
  123.  }
  124.  else {printf("na Wrong Password!");exit(1);}
  125. }