DNS

Тема в разделе "WASM.NT.KERNEL", создана пользователем at0s, 2 май 2010.

  1. at0s

    at0s New Member

    Публикаций:
    0
    Регистрация:
    13 июл 2009
    Сообщения:
    91
    Есть ли в ядре возможность, зная имя сайта ( напр www.wasm.ru ), узнать его IP
     
  2. x64

    x64 New Member

    Публикаций:
    0
    Регистрация:
    29 июл 2008
    Сообщения:
    1.370
    Адрес:
    Россия
    Есть, но только начиная с Windows 7 (см. здесь), иначе DNS-запросы руками слать.
     
  3. Dian

    Dian Member

    Публикаций:
    0
    Регистрация:
    19 июн 2008
    Сообщения:
    222
    [offtop]
    Виндовс 7 способствует переходу троянов в kernel mode?
    [/offtop]
     
  4. slesh

    slesh New Member

    Публикаций:
    0
    Регистрация:
    6 фев 2009
    Сообщения:
    214
    2 at0s DNS в ядре чаще всего приходилось реализовывать на основе собственного построения запроса и отсылке по UPD и то приходилось брать IP DNS серваков из реестра. Или таскать простенькую базу своих. Да и то гемора было просто ужас сколько с этим делам. пару сотен строк для норм работы - это минимум что надо написать. А вообще когдато эта тема обсуждалась на форуме rootkits.su в раздела Kernel Programming
    Но это было гдето полтора года назад
     
  5. at0s

    at0s New Member

    Публикаций:
    0
    Регистрация:
    13 июл 2009
    Сообщения:
    91
    прочитал,...стало страшно :))), действительно геморой. Кроме RFC 1035 на какую-нибудь документацию можешь ткнуть ?
     
  6. slesh

    slesh New Member

    Публикаций:
    0
    Регистрация:
    6 фев 2009
    Сообщения:
    214
    2 at0s если тебе нужен резолв только A записей, то в принципе там не составит труда это сделать, темболее A запрос строится легко.
    Самый простой вариант построить запрос.
    Код (Text):
    1. USHORT SEQ = 1;
    2.  
    3. int NameToQName(char* buf, char* domain)
    4. {
    5.     int start;
    6.     int len;
    7.     int pos = 0;
    8.    
    9.     while (domain[pos])
    10.     {
    11.         start = pos;
    12.         len = 0;
    13.         while (domain[pos] && domain[pos] != '.')
    14.         {
    15.             buf[pos + 1] = domain[pos++];
    16.             len++;
    17.         }
    18.         pos++;
    19.         buf[start] = len;
    20.     }
    21.    
    22.     buf[pos++] = 0x00;
    23.    
    24.     return pos;
    25. }
    26.  
    27. int BuildDNSQuery(char* buf, char* domain)
    28. {
    29.     int pos;
    30.  
    31.     *(USHORT*)buf = SEQ++;
    32.     *(ULONG*)(buf+2) = 0x01000001;
    33.     *(ULONG*)(buf+6) = 0x00000000;
    34.     *(USHORT*)(buf+10) = 0x0000;
    35.    
    36.     pos = NameToQName(buf + 12, domain);
    37.     *(ULONG*)(buf + pos + 12) = 0x01000100;
    38.  
    39.     return 16 + pos;
    40. }
    BuildDNSQuery даешь адрес буфера для пакета и доменное имя, на выходе - размер пакета в байтах.
    И потом уже отсылаешь в ручную. Отпарсить ответ тоже не сложно.
     
  7. at0s

    at0s New Member

    Публикаций:
    0
    Регистрация:
    13 июл 2009
    Сообщения:
    91
    slesh
    спасибо
    DNS пашет из кернела без проблем, просто как трудное, оставил в конце