home *** CD-ROM | disk | FTP | other *** search
/ For Beginners & Professional Hackers / cd.iso / hackers / tools / diskreet.ha / DC.C < prev    next >
Encoding:
C/C++ Source or Header  |  1996-03-20  |  1.7 KB  |  113 lines

  1. #include <cmin.h>
  2.  
  3. #define __Clib
  4. #define __Memory
  5. #include <def.h>
  6.  
  7. #define DDName        "@DSKREET"
  8. #define DumpName        "d.d"
  9.  
  10. #define MAXS        8
  11.  
  12. typedef struct {
  13.     byte len;
  14.     byte pos;
  15.     byte symb[256];
  16. } psymb;
  17.  
  18. typedef struct {
  19.     byte cc;
  20.     psymb c[MAXS];
  21. } pstr;
  22.  
  23. char *nextpw(char *pbuf,pstr *ps)
  24. {
  25. byte i,j,k;
  26.     for(i=ps->cc-1,j=0;i<0xFF;--i)
  27.     {
  28.         if((k=ps->c[i].pos)>0) {pbuf[j]=ps->c[i].symb[k-1];++j;}
  29.     };
  30.     for(i=0;i<ps->cc;++i)
  31.     {
  32.         if(++ps->c[i].pos>ps->c[i].len)
  33.         {
  34.             if(i==ps->cc-1) pbuf[0]=0;
  35.             else ps->c[i].pos=1;
  36.         } else break;
  37.     }
  38.     return pbuf;
  39. };
  40.  
  41. #define    SYMBS        26+10
  42.  
  43. static pstr cps={MAXS,{SYMBS,1}};
  44.  
  45. static char cpw[MAXS+1];
  46.  
  47. __Beg
  48.  
  49. byte ii,jj;
  50. word ddh,dh,dc,t;
  51.  
  52.     _ES=_DS;
  53.  
  54.     for(ii=0;ii<MAXS;++ii)
  55.     {
  56.         if(ii>0) {cps.c[ii].len=SYMBS;cps.c[ii].pos=0;}
  57.         for(jj='A';jj<='Z';++jj)
  58.         {
  59.             cps.c[ii].symb[jj-'A']=jj;
  60.         }
  61.         for(jj='0';jj<='9';++jj)
  62.         {
  63.             cps.c[ii].symb[jj-'0'+('Z'-'A'+1)]=jj;
  64.         }
  65.     };
  66. /*
  67. cps.c[0].pos=0;*/
  68. cps.c[1].pos=1;
  69. cps.c[2].pos=1;
  70. cps.c[3].pos=1;
  71. cps.c[4].pos=1;
  72. cps.c[5].pos=1;
  73.  
  74.     for(ii=0;ii<=MAXS;++ii) cpw[ii]=0;
  75.  
  76.     ddh=open_(DDName,MR);
  77.     dh=open_(DumpName,MR);
  78.     dc=readf_(dh,freeseg,0,0xFFF0);
  79.  
  80.     close_(dh);
  81.  
  82.     putzs_(Stderr,"Testing, please wait ...");fnewl_(Stderr);
  83.  
  84.     for(;;)
  85.     {
  86.         if(inpb_(0x60)==0x01) break;
  87.  
  88.         nextpw(cpw,&cps);
  89.         if(!cpw[0]) break;
  90.  
  91.         if(inpb_(0x60)==0x39) {putzs_(Stderr,cpw);fnewl_(Stderr);}
  92.  
  93.         _ES=freeseg;scpyf__(_DS,cpw,3,MAXS+1);
  94.         pokeb__(1,0);
  95.  
  96.         push_ds;
  97.         _CX=dc;
  98.         _BX=ddh;
  99.         _DS=freeseg;
  100.         _DX=0;
  101.         _AX=0x4403;
  102.         int_(0x21);
  103.         pop_ds;
  104.  
  105.         ii=peekb__(1);_ES=_DS;
  106.         if(ii!=7) {putzs_(Stdout,"Possible password: ");putzs_(Stdout,cpw);fnewl_(Stdout);}
  107.         if(ii==0) break;
  108.     };
  109.  
  110.     close_(ddh);
  111.  
  112. __End
  113.