格式化的源码

来源:互联网 发布:拍部网络电影要多少钱 编辑:程序博客网 时间:2024/06/05 23:12

这个问题比较老了,而且试验起来有一定的危险性,你学习的重点也不应该是这方面了,国内这方面有两本经典图书,一本是Dos大全,介绍了所有的中断,一本是将磁盘加密技术的书。  
  我原来为研究磁盘加密写过类似的程序,但很简单,全部是C的,是直接调中断进行操作。原代码很长,是一个类似PC   Tools的工具。我找出一部分给你。  
   
  void   Format(void)  
  {  
    union     REGS   reg1,reg2,reg3;  
    struct   SREGS   sr1;  
    char   ccc;  
    char   trktbl[76];  
    int   i,j,k,F_Error=0,W0_sec,n;  
    int   Disk,Trk=80,Sect,F_Disk,key;  
    char   Er_account=0;  
    char   *string[4]={"360Kb   Floppy   Disk",  
      "1.2M     Floppy   Disk",  
      "720Kb   Floppy   Disk",  
      "1.44M   Floppy   Disk",  
    };  
    Message("Format   A   or   B   driver(A/B)?");  
    Sign_on();  
    ccc=getche();  
    delay(300);  
    Sign_off();  
  .....   ........  
            textcolor(LIGHTGREEN);  
            for(i=0;i<4;i++)  
                {  
  gotoxy(25,8+i);  
  cprintf("%s",string[i]);  
                }  
            textcolor(WHITE);  
            textbackground(RED);  
            gotoxy(25,7+Disk);  
            cprintf("%s",string[Disk-1]);  
            key=1;  
            if(Disk==2   ||   Disk==4)  
                {while(key!=7181   &&   key!=283)  
      {key=specialkey();  
        if(key==18432   ||   key==20480)  
            {textcolor(LIGHTGREEN);  
              textbackground(11);  
              gotoxy(25,7+Disk);  
              cprintf("%s",string[Disk-1]);  
              if(Disk==2||Disk==4)   Disk--;  
              else   if(Disk==1||Disk==3)   Disk++;  
              textcolor(WHITE);  
              textbackground(RED);  
              gotoxy(25,7+Disk);  
              cprintf("%s",string[Disk-1]);  
            }  
      }  
                }  
                //根据用户选择的磁盘,确定在磁盘的0道0扇写的数据  
            if(key==7181)  
  {  
    switch(Disk)  
        {case   1:Trk=40;  
        Sect=9;  
        Boot_Sec[0xd]=2;  
        Boot_Sec[0x18]=9;  
        Boot_Sec[0x11]=112;  
        Boot_Sec[0x13]=0xd0;  
        Boot_Sec[0x14]=0x02;  
        Boot_Sec[0x16]=0x2;  
        W0_sec=11;  
        break;  
          case   2:Trk=80;  
        Sect=15;  
        Boot_Sec[0xd]=1;  
        Boot_Sec[0x18]=15;  
        Boot_Sec[0x11]=224;  
        Boot_Sec[0x13]=0x60;  
        Boot_Sec[0x14]=0x09;  
        Boot_Sec[0x16]=0x7;  
        W0_sec=28;  
        break;  
          case   3:Trk=80;  
        Sect=9;  
        Boot_Sec[0xd]=2;  
        Boot_Sec[0x18]=9;  
        Boot_Sec[0x11]=112;  
        Boot_Sec[0x13]=0x90;  
        Boot_Sec[0x14]=0x05;  
        Boot_Sec[0x16]=0x7;  
        W0_sec=17;  
        break;  
          case   4:Trk=80;  
        Sect=18;  
        Boot_Sec[0xd]=1;  
        Boot_Sec[0x18]=18;  
        Boot_Sec[0x11]=112;  
        Boot_Sec[0x13]=0x40;  
        Boot_Sec[0x14]=0x0b;  
        Boot_Sec[0x16]=0x9;  
        W0_sec=32;  
        }  
    textcolor(RED);  
    textbackground(11);  
    gotoxy(15,12);  
    cprintf("This   floppy   disk   have   %3d   Track   and   %3d   Sector",Trk,Sect);  
    pokeb(0,0x525,2);  
    pokeb(0,0x526,Sect);  
    pokeb(0,0x529,0x54);  
    pokeb(0,0x528,2);  
    pokeb(0,0x52A,0xf6);  
    if(Trk==40)   pokeb(0,0x529,0x50);  
   
    reg1.x.bx=FP_OFF(trktbl);  
    sr1.es=FP_SEG(trktbl);  
    reg1.h.ah=0x05;  
    reg1.h.dl=F_Disk;  
    for(i=0;i<Trk;i++)  
          {for(j=0;j<2;j++)  
  {  
    for(k=0;k<Sect;k++)  
          {  
            trktbl[k*4]=i;  
            trktbl[k*4+1]=j;  
            trktbl[k*4+2]=k+1;  
            trktbl[k*4+3]=2;  
          }  
    gotoxy(30,13);  
    cprintf("Trk=%-5d   Head=%-5d/n",i,j);  
    for(Er_account=0;Er_account<3;Er_account++)  
          {  
            reg1.h.ch=i;  
            reg1.h.dh=j;  
            //格式化各个磁道  
            int86x(0x13,&reg1,&reg2,&sr1);  
            if(reg2.h.ah!=0)  
    {  
      Er_account++;  
      cprintf("Error11111=%d/n",reg2.h.ah);  
      F_Error=reg2.h.ah;  
    }  
            else   break;  
          }  
    if(F_Error!=0)   break;  
  }  
            if(F_Error!=0)   break;  
          }  
    if(F_Error==0)  
          {reg1.h.ah=3;  
            reg1.h.al=1;  
            reg1.h.ch=0;  
            reg1.h.cl=1;  
            reg1.h.dh=F_Disk;  
            reg1.h.dl=0;  
            reg1.x.bx=FP_OFF(Boot_Sec);  
            sr1.es=FP_SEG(Boot_Sec);  
            int86x(0x13,&reg1,&reg2,&sr1);  
            if(reg2.h.ah!=0)  
    F_Error=reg2.h.ah;  
            else  
  for(i=0;i<512;i++)   Disk_trk[i]=0;  
  //写入0道0扇  
            if(F_Error==0)  
                for(n=2;n<=Sect;n++)  
    {reg1.h.ah=3;  
      reg1.h.al=1;  
      reg1.h.ch=0;  
      reg1.h.cl=n;  
      reg1.h.dh=0;  
      reg1.h.dl=F_Disk;  
      reg1.x.bx=FP_OFF(Disk_trk);  
      sr1.es=FP_SEG(Disk_trk);  
      int86x(0x13,&reg1,&reg2,&sr1);  
      if(reg2.h.ah!=0)  
          {  
            printf("Error=%d/n",reg2.h.ah);  
            F_Error=88;  
            break;  
          }  
    }  
            W0_sec=W0_sec-Sect+1;  
            //写如FAT表  
            if(F_Error==0)  
              for(n=1;n<W0_sec;n++)  
  {reg1.h.ah=3;  
    reg1.h.al=1;  
    reg1.h.ch=0;  
    reg1.h.cl=n;  
    reg1.h.dh=1;  
    reg1.h.dl=F_Disk;  
    reg1.x.bx=FP_OFF(Disk_trk);  
    sr1.es=FP_SEG(Disk_trk);  
    int86x(0x13,&reg1,&reg2,&sr1);  
    if(reg2.h.ah!=0)  
          {  
            F_Error=88;  
            break;  
        }  
  }  
          }  
  if(F_Error!=0)   Disk_er(F_Error);  
  }  
          }  
      else   if(ccc!=65&&ccc!=97&&ccc!=66&&ccc!=98)  
              Alarm();  
      List_dir(B_List[1],B_List[0]);  
  }  
  Top

21 楼fullsail(远航)回复于 2003-01-17 00:57:36 得分 0

我当年就是在这种没前途的东西上花费了太多的时间,但磁盘加密技术没有继续使用下去我的确比较奇怪,因为从技术上将,他不比软件狗好破解。  
   
  代码中有很多都是界面上的显示部分,你可以不在意。主要看中断部分,你同时还要熟悉磁盘结构。  
  下面是0道0扇磁盘扇区部分。  
   
  unsigned   char   Boot_Sec[512]={  
  0xeb,0x3c,0x90,0x4d,0x59,0x20,0x54,0x4f,0x4f,0x4c,0x53,0x00,0x02,0x01,0x01,  
  0x00,0x02,0xe0,0x00,0x40,0x0b,0xf0,0x09,0x00,0x12,0x00,0x02,0x00,0x00,0x00,  
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x29,0x3a,0x0a,0x7f,0x98,0x36,0x33,  
  0x30,0x41,0x31,0x37,0x31,0x33,0x30,0x32,0x31,0x46,0x41,0x54,0x31,0x32,0x20,  
  0x20,0x20,0xfa,0x33,0xc0,0x8e,0xd0,0xbc,0x00,0x7c,0x16,0x07,0xbb,0x78,0x00,  
  0x36,0xc5,0x37,0x1e,0x56,0x16,0x53,0xbf,0x3e,0x7c,0xb9,0x0b,0x00,0xfc,0xf3,  
  0xa4,0x06,0x1f,0xc6,0x45,0xfe,0x0f,0x8b,0x0e,0x18,0x7c,0x88,0x4d,0xf9,0x89,  
  0x47,0x02,0xc7,0x07,0x3e,0x7c,0xfb,0xcd,0x13,0x72,0x79,0x33,0xc0,0x39,0x06,  
  0x13,0x7c,0x74,0x08,0x8b,0x0e,0x13,0x7c,0x89,0x0e,0x20,0x7c,0xa0,0x10,0x7c,  
  0xf7,0x26,0x16,0x7c,0x03,0x06,0x1c,0x7c,0x13,0x16,0x1e,0x7c,0x03,0x06,0x0e,  
  0x7c,0x83,0xd2,0x00,0xa3,0x50,0x7c,0x89,0x16,0x52,0x7c,0xa3,0x49,0x7c,0x89,  
  0x16,0x4b,0x7c,0xb8,0x20,0x00,0xf7,0x26,0x11,0x7c,0x8b,0x1e,0x0b,0x7c,0x03,  
  0xc3,0x48,0xf7,0xf3,0x01,0x06,0x49,0x7c,0x83,0x16,0x4b,0x7c,0x00,0xbb,0x00,  
  0x05,0x8b,0x16,0x52,0x7c,0xa1,0x50,0x7c,0xe8,0x92,0x00,0x72,0x1d,0xb0,0x01,  
  0xe8,0xac,0x00,0x72,0x16,0x8b,0xfb,0xb9,0x0b,0x00,0xbe,0xdf,0x7d,0xf3,0xa6,  
  0x75,0x0a,0x8d,0x7f,0x20,0xb9,0x0b,0x00,0xf3,0xa6,0x74,0x18,0xbe,0x9e,0x7d,  
  0xe8,0x5f,0x00,0x33,0xc0,0xcd,0x16,0x5e,0x1f,0x8f,0x04,0x8f,0x44,0x02,0xcd,  
  0x19,0x58,0x58,0x58,0xeb,0xe8,0x8b,0x47,0x1a,0x48,0x48,0x8a,0x1e,0x0d,0x7c,  
  0x32,0xff,0xf7,0xe3,0x03,0x06,0x49,0x7c,0x13,0x16,0x4b,0x7c,0xbb,0x00,0x07,  
  0xb9,0x03,0x00,0x50,0x52,0x51,0xe8,0x3a,0x00,0x72,0xd8,0xb0,0x01,0xe8,0x54,  
  0x00,0x59,0x5a,0x58,0x72,0xbb,0x05,0x01,0x00,0x83,0xd2,0x00,0x03,0x1e,0x0b,  
  0x7c,0xe2,0xe2,0x8a,0x2e,0x15,0x7c,0x8a,0x16,0x24,0x7c,0x8b,0x1e,0x49,0x7c,  
  0xa1,0x4b,0x7c,0xea,0x00,0x00,0x70,0x00,0xac,0x0a,0xc0,0x74,0x29,0xb4,0x0e,  
  0xbb,0x07,0x00,0xcd,0x10,0xeb,0xf2,0x3b,0x16,0x18,0x7c,0x73,0x19,0xf7,0x36,  
  0x18,0x7c,0xfe,0xc2,0x88,0x16,0x4f,0x7c,0x33,0xd2,0xf7,0x36,0x1a,0x7c,0x88,  
  0x16,0x25,0x7c,0xa3,0x4d,0x7c,0xf8,0xc3,0xf9,0xc3,0xb4,0x02,0x8b,0x16,0x4d,  
  0x7c,0xb1,0x06,0xd2,0xe6,0x0a,0x36,0x4f,0x7c,0x8b,0xca,0x86,0xe9,0x8a,0x16,  
  0x24,0x7c,0x8a,0x36,0x25,0x7c,0xcd,0x13,0xc3,0x0d,0x0a,0x4b,0x65,0x69,0x6e,  
  0x20,0x53,0x79,0x73,0x74,0x65,0x6d,0x20,0x6f,0x64,0x65,0x72,0x20,0x4c,0x61,  
  0x75,0x66,0x77,0x65,0x72,0x6b,0x73,0x66,0x65,0x68,0x6c,0x65,0x72,0x0d,0x0a,  
  0x57,0x65,0x63,0x68,0x73,0x65,0x6c,0x6e,0x20,0x75,0x6e,0x64,0x20,0x54,0x61,  
  0x73,0x74,0x65,0x20,0x64,0x72,0x81,0x63,0x6b,0x65,0x6e,0x0d,0x0a,0x00,0x49,  
  0x4f,0x20,0x20,0x20,0x20,0x20,0x20,0x53,0x59,0x53,0x4d,0x53,0x44,0x4f,0x53,  
  0x20,0x20,0x20,0x53,0x59,0x53,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  
  0x55,0xaa}; 
原创粉丝点击