необходимо найти базовый адрес ntdll.dll без использования апи-функций (GetModuleHandle и LoadLibrary) и не через базу данных загрузчика (fs/gs -> PEB -> LDR)... может стать известен адрес какой-нить функции из kernel32.dll, например HeapAlloc, которая судя по всему во всех виндах форвардится на RtlAllocateHeap из ntdll.dll, это - как вариант... есть какие-нить еще альтернативы? спасибо...
Архитектура Windows такова, что вынуждает грузить ntdll.dll всегда по одному и тому же адресу: 0x7c900000. Можно его просто захардкодить, но это не есть гуд. Пруф: www.nynaeve.net/?p=198
Код (Text): вынуждает грузить ntdll.dll всегда по одному и тому же адресу: 0x7c900000 это для какой оси ? у меня на win7 совсем другой адрес
karabas_barabas Да, сорри, туплю, адрес постоянный будет только для одной ОС (в моем случае - XP SP3), но меняется от сервис пака и от версии самой ОС Так что отпадает
Если знаешь базу kernel32 то можно пропарсить PE заголовок и залезть в секцию импорта, там найти любую функцию из ntdll, т.е. получить адрес внутри ntdll. Теперь можно листать страницы вниз, пока по указателю не будет валидный PE
да, наверное так и буду делать... спасибо, в принципе это надежнее, чем предполагать, что HeapAlloc всегда и везде форвардится...
sender0 RtlCaptureStackBackTrace() - как сие заюзать, если адрес нэйтива не определён(в стеке мусор, это ничо не даст) ? Да вы товирищ наркоман, как и я
Rel Установить seh фрейм, создать исключение, далее просматривая стековые фреймы получим список адресов возвратов. Далее для каждого модулья скан памяти вниз пока не найдем MZ/PE заголовок. Из минусов адрес seh фрейма должен принадлежать какому либо модулю.В шелкоде будет сложно заюзать.
totimoud А как это касается данной темы? ТС не говорил, что его код вне модуля . А цитата с другой то темы.
XshStasX А зачем искать нэйтив, если код внутри другого модуля ? Это интуитивно понятно. Вы есчо спикок приведите ограничений, мол код в модуле, в директории конфигурации есть описатель, есчо и ссылка выравнена, а мб в Fs не годное значение, или мб сех стоит поверх.. ну вы же понимаете что это толсто. А цитата с этой темы, только ссылка другая. Это уже стопяцот раз обсуждали, с вами тоже и не только тут.
Тут еще инди способ показывал http://wasm.ru/forum/viewtopic.php?id=43476 Возможно трюк для усложнения отладки, например не заметно получить адреса процедур.