Сейчас на форуме: vsv1, _MBK_ (+3 невидимых)

 eXeL@B —› Вопросы новичков —› HELP -> Работа с NTDLL.DLL
Посл.ответ Сообщение

Ранг: 51.7 (постоянный)
Активность: 0.020
Статус: Участник

Создано: 25 ноября 2007 20:49 · Поправил: GlOFF
· Личное сообщение · #1

Из своей программы, получаю адресс загрузки NTDLL.DLL и хочу анализировать PE-заголовок, но при попытки проверки MZ-сигнатуры выдается сообщение об ошибки, ошибка доступа к памяти, доступ к памяти запрешен!
VirtualProtect на весь SizeOfImage из NTDLL.DLL тоже не помогает, хотя функция возвращает не ноль.
При просмотре программы через ollyDBG, моя программа анализирует загловок NTDLL.DLL и выполняет то, что запланировано без ошибок.

Как я понел: При выполнении моей проги в контексте отладчика (т.е. при просмотре в ольке) ошибок при обращении к адрессному пространству NTDLL.DLL - НЕТ, без отладчика как этого добиться???



Ранг: 13.0 (новичок)
Активность: 0.020
Статус: Участник

Создано: 27 ноября 2007 13:49
· Личное сообщение · #2

Проблема вся в том, что ntdll.dll загружен системой в том участке памяти, на который доступ пользовательским программам запрещён (как на запись, так и на чтение). При попытке обращения к таким участкам памяти, процессор вызывает так называемую "Exception", что есть вызов системной рутины закрытия текущего процесса и выдачи соответствующего сообщения.

Думаю тебе надо анализировать не загруженный в память образ *.dll а через свою программу анализировать сам файл на диске.

GlOFF пишет:
При выполнении моей проги в контексте отладчика (т.е. при просмотре в ольке) ошибок при обращении к адрессному пространству NTDLL.DLL - НЕТ, без отладчика как этого добиться???


Отладчики, которые работают в 0-вом кольце имеют полный доступ ка всей памяти (если я не ошибаюсь). Поэтому ты через отладчик можешь делать всё что угодно (я подчёркиваю в 0-вом кольце)

Для решения задачи предлагаю 2 способа:

1. Анализировать заголовок *.dll прямо на диске (не запуская на исполнение), т.е считывание отдельных разделов в память с последующим анализом.

2. Написать драйвер через который можно получить доступ к уже загруженной в памяти *.dll.

Второе не пробовал, но для этого есть отладчики.




Ранг: 387.4 (мудрец)
Активность: 0.170
Статус: Участник
системщик

Создано: 27 ноября 2007 21:26
· Личное сообщение · #3

GlOFF, google вообще-то об этом бы тебе подсказал

Если кратко, то ntdll содержит большие куски kernel mode API и из обычного процесса не вызывается. Если ты хочешь аналазаровать код, то загрузи файл в IDA или свой tool. Если хочешь вызывать ф-ции, то скомпиль простейший драйвер.


 eXeL@B —› Вопросы новичков —› HELP -> Работа с NTDLL.DLL
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати