Найти базовый адрес ntdll.dll без использования PEB?

Тема в разделе "WASM.WIN32", создана пользователем Rel, 3 фев 2012.

  1. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.323
    необходимо найти базовый адрес ntdll.dll без использования апи-функций (GetModuleHandle и LoadLibrary) и не через базу данных загрузчика (fs/gs -> PEB -> LDR)... может стать известен адрес какой-нить функции из kernel32.dll, например HeapAlloc, которая судя по всему во всех виндах форвардится на RtlAllocateHeap из ntdll.dll, это - как вариант... есть какие-нить еще альтернативы? спасибо...
     
  2. steelfactor

    steelfactor New Member

    Публикаций:
    0
    Регистрация:
    26 апр 2007
    Сообщения:
    501
    Архитектура Windows такова, что вынуждает грузить ntdll.dll всегда по одному и тому же адресу: 0x7c900000.
    Можно его просто захардкодить, но это не есть гуд.
    Пруф: www.nynaeve.net/?p=198
     
  3. karabas_barabas

    karabas_barabas Member

    Публикаций:
    0
    Регистрация:
    9 авг 2009
    Сообщения:
    168
    Код (Text):
    1. вынуждает грузить ntdll.dll всегда по одному и тому же адресу: 0x7c900000
    это для какой оси ?
    у меня на win7 совсем другой адрес
     
  4. steelfactor

    steelfactor New Member

    Публикаций:
    0
    Регистрация:
    26 апр 2007
    Сообщения:
    501
    karabas_barabas
    Да, сорри, туплю, адрес постоянный будет только для одной ОС (в моем случае - XP SP3), но меняется от сервис пака и от версии самой ОС
    Так что отпадает
     
  5. LMaster

    LMaster New Member

    Публикаций:
    0
    Регистрация:
    31 янв 2010
    Сообщения:
    14
    А ASLR?
     
  6. 100gold

    100gold New Member

    Публикаций:
    0
    Регистрация:
    26 фев 2010
    Сообщения:
    165
    Если знаешь базу kernel32 то можно пропарсить PE заголовок и залезть в секцию импорта, там найти любую функцию из ntdll, т.е. получить адрес внутри ntdll. Теперь можно листать страницы вниз, пока по указателю не будет валидный PE
     
  7. bormashinne

    bormashinne New Member

    Публикаций:
    0
    Регистрация:
    3 фев 2012
    Сообщения:
    3
    MOV EAX, [HeapAlloc]
    AND EAX,FFF00000
     
  8. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.323
    да, наверное так и буду делать... спасибо, в принципе это надежнее, чем предполагать, что HeapAlloc всегда и везде форвардится...
     
  9. totimoud

    totimoud New Member

    Публикаций:
    0
    Регистрация:
    2 фев 2012
    Сообщения:
    78
    Сискол вот это вот наше всё. Пруфкод для немного поиска.
     
  10. sender0

    sender0 New Member

    Публикаций:
    0
    Регистрация:
    2 июл 2011
    Сообщения:
    25
    потоки все начинаются с ntdll, по стеку пройти назад (RtlCaptureStackBackTrace или вручную)
     
  11. totimoud

    totimoud New Member

    Публикаций:
    0
    Регистрация:
    2 фев 2012
    Сообщения:
    78
    sender0
    RtlCaptureStackBackTrace() - как сие заюзать, если адрес нэйтива не определён(в стеке мусор, это ничо не даст) ?

    Да вы товирищ наркоман, как и я :lol:
     
  12. XshStasX

    XshStasX New Member

    Публикаций:
    0
    Регистрация:
    9 авг 2008
    Сообщения:
    991
    Rel
    Установить seh фрейм, создать исключение, далее просматривая стековые фреймы получим список адресов возвратов. Далее для каждого модулья скан памяти вниз пока не найдем MZ/PE заголовок.

    Из минусов адрес seh фрейма должен принадлежать какому либо модулю.В шелкоде будет сложно заюзать.
     
  13. totimoud

    totimoud New Member

    Публикаций:
    0
    Регистрация:
    2 фев 2012
    Сообщения:
    78
    XshStasX
    NX-сех, не ?
     
  14. XshStasX

    XshStasX New Member

    Публикаций:
    0
    Регистрация:
    9 авг 2008
    Сообщения:
    991
    Что ты хочешь этим сказать?
     
  15. totimoud

    totimoud New Member

    Публикаций:
    0
    Регистрация:
    2 фев 2012
    Сообщения:
    78
    XshStasX
    - ваш же текст, зачем делать вид что не помните ?
     
  16. XshStasX

    XshStasX New Member

    Публикаций:
    0
    Регистрация:
    9 авг 2008
    Сообщения:
    991
    totimoud
    А как это касается данной темы?
    ТС не говорил, что его код вне модуля .

    А цитата с другой то темы.
     
  17. totimoud

    totimoud New Member

    Публикаций:
    0
    Регистрация:
    2 фев 2012
    Сообщения:
    78
    XshStasX
    А зачем искать нэйтив, если код внутри другого модуля ?
    Это интуитивно понятно. Вы есчо спикок приведите ограничений, мол код в модуле, в директории конфигурации есть описатель, есчо и ссылка выравнена, а мб в Fs не годное значение, или мб сех стоит поверх.. ну вы же понимаете что это толсто.
    А цитата с этой темы, только ссылка другая. Это уже стопяцот раз обсуждали, с вами тоже и не только тут.
     
  18. XshStasX

    XshStasX New Member

    Публикаций:
    0
    Регистрация:
    9 авг 2008
    Сообщения:
    991
    Тут еще инди способ показывал
    http://wasm.ru/forum/viewtopic.php?id=43476

    Возможно трюк для усложнения отладки, например не заметно получить адреса процедур.