home *** CD-ROM | disk | FTP | other *** search
- #include <cmin.h>
-
- #define __Clib
- #define __Memory
- #include <def.h>
-
- #define DDName "@DSKREET"
- #define DumpName "d.d"
-
- #define MAXS 8
-
- typedef struct {
- byte len;
- byte pos;
- byte symb[256];
- } psymb;
-
- typedef struct {
- byte cc;
- psymb c[MAXS];
- } pstr;
-
- char *nextpw(char *pbuf,pstr *ps)
- {
- byte i,j,k;
- for(i=ps->cc-1,j=0;i<0xFF;--i)
- {
- if((k=ps->c[i].pos)>0) {pbuf[j]=ps->c[i].symb[k-1];++j;}
- };
- for(i=0;i<ps->cc;++i)
- {
- if(++ps->c[i].pos>ps->c[i].len)
- {
- if(i==ps->cc-1) pbuf[0]=0;
- else ps->c[i].pos=1;
- } else break;
- }
- return pbuf;
- };
-
- #define SYMBS 26+10
-
- static pstr cps={MAXS,{SYMBS,1}};
-
- static char cpw[MAXS+1];
-
- __Beg
-
- byte ii,jj;
- word ddh,dh,dc,t;
-
- _ES=_DS;
-
- for(ii=0;ii<MAXS;++ii)
- {
- if(ii>0) {cps.c[ii].len=SYMBS;cps.c[ii].pos=0;}
- for(jj='A';jj<='Z';++jj)
- {
- cps.c[ii].symb[jj-'A']=jj;
- }
- for(jj='0';jj<='9';++jj)
- {
- cps.c[ii].symb[jj-'0'+('Z'-'A'+1)]=jj;
- }
- };
- /*
- cps.c[0].pos=0;*/
- cps.c[1].pos=1;
- cps.c[2].pos=1;
- cps.c[3].pos=1;
- cps.c[4].pos=1;
- cps.c[5].pos=1;
-
- for(ii=0;ii<=MAXS;++ii) cpw[ii]=0;
-
- ddh=open_(DDName,MR);
- dh=open_(DumpName,MR);
- dc=readf_(dh,freeseg,0,0xFFF0);
-
- close_(dh);
-
- putzs_(Stderr,"Testing, please wait ...");fnewl_(Stderr);
-
- for(;;)
- {
- if(inpb_(0x60)==0x01) break;
-
- nextpw(cpw,&cps);
- if(!cpw[0]) break;
-
- if(inpb_(0x60)==0x39) {putzs_(Stderr,cpw);fnewl_(Stderr);}
-
- _ES=freeseg;scpyf__(_DS,cpw,3,MAXS+1);
- pokeb__(1,0);
-
- push_ds;
- _CX=dc;
- _BX=ddh;
- _DS=freeseg;
- _DX=0;
- _AX=0x4403;
- int_(0x21);
- pop_ds;
-
- ii=peekb__(1);_ES=_DS;
- if(ii!=7) {putzs_(Stdout,"Possible password: ");putzs_(Stdout,cpw);fnewl_(Stdout);}
- if(ii==0) break;
- };
-
- close_(ddh);
-
- __End