Путь к файлу образа в Vista

Тема в разделе "WASM.NT.KERNEL", создана пользователем Twister, 4 май 2008.

  1. Twister

    Twister New Member

    Публикаций:
    0
    Регистрация:
    12 окт 2005
    Сообщения:
    720
    Адрес:
    Алматы
    Доброго времени суток.

    Собственно, возникла необходимость в ядре вытащить полный путь к файлу образа какого-либо процесса. Луканулся, было, прочитать из PEB, да оказалось смещения изменились. Хотел из секции - SectionObject в EPROCESS тоже хрен знает где теперь лежит. В списках InLoadOrderModuleList и им подобных записи об ЕХЕ-шнике нет, да и не факт, что в Висте смещение LoaderData в PEB не поменялось.

    Но меня вдохновляет то, что RkU, ProcessExplorer прекрасно справляются с задачей - значит задача решаема. ;)

    Мне только что предложили один извращенный способ, но мне он не нравится по вполне понятным причинам:

    Способ основан на вызове из ядра GetModuleFileNameW - задираем IRQL, патчим LdrUnlockLoaderLock и LdrLockLoaderLock, чтоб в их начале был валидный ret, дергаем GetModuleFileNameW и восстанавливаем пропатченное. Патч необходим потому, что Ldr(Unl/L)ockLoaderLock вызывают sysenter, а это, в нашем случае, ни к чему хорошему не приведет.

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

    Вот и прошу поделиться кто чем может - смещениями, методами...
     
  2. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    Я же тебе написал когда предлагал этот способ - что такого то?
    Постоянный патч ну и что. Мы задираем IRQL, ставим патч, делаем все, что надо, снимаем патч и снижаем IRQL.
    Не уверен насчет многопроцессорных машин, но на однопроцессорной точно не будет никаких проблем - другие потоки не смогут выполниться пока стоит патч, а когда смогут выполниться - мы на этот момент его уже снимем.
    Поэтому первую причину не вижу реальной..
    Вторая следовательно тоже.
     
  3. Twister

    Twister New Member

    Публикаций:
    0
    Регистрация:
    12 окт 2005
    Сообщения:
    720
    Адрес:
    Алматы
    Хех... Стоило об этом упомянуть в причинах. Я пишу как раз-таки на CoreDuo. ;)
     
  4. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    Насчет MP отписал в асю.

    кстати можно не получать каждый раз имя процесса.
    можно повеситься на создание процесса PsSetCreateProcessNotifyRoutine и вести таблицу соответствия PID -> FileName. когда надо делать просто лукап по таблице
     
  5. soveren

    soveren Дмитрий Петерсон

    Публикаций:
    0
    Регистрация:
    6 мар 2008
    Сообщения:
    94
    Адрес:
    Россия
    Twister
    Уважаемый Twister, вы что-то путаете. Смещение на Section объект действительно поменялось, но все остальное остается неизменным.

    А то, что вы тут активно обсуждаете, господа, вы меня извините, но это дикий способ, примерно как выдирание гланд через одно место.
     
  6. Twister

    Twister New Member

    Публикаций:
    0
    Регистрация:
    12 окт 2005
    Сообщения:
    720
    Адрес:
    Алматы
    Вообще, конечно, не исключено что я ошибся - экспериментировал я поздно ночью, когда сильно хотелось спать. Сегодня я еще раз проверю. Но тем не менее - PEB не самый удачный в плане документированности способ и мне, по возможности, хотелось бы его избежать. Есть идеи?
     
  7. soveren

    soveren Дмитрий Петерсон

    Публикаций:
    0
    Регистрация:
    6 мар 2008
    Сообщения:
    94
    Адрес:
    Россия
    Зато он самый стабильный и юзабельный. PEB растет только вверх.
     
  8. GMax

    GMax Member

    Публикаций:
    0
    Регистрация:
    3 июл 2006
    Сообщения:
    218
    Смещение для Vista и Vista SP1 в EPROCESS (поле ImageFileName) -- 14Ch
    RkU использует в том числе и этот метод.
     
  9. Twister

    Twister New Member

    Публикаций:
    0
    Регистрация:
    12 окт 2005
    Сообщения:
    720
    Адрес:
    Алматы
    Проверил - нужные смещения в PEB действительно не изменились.

    А SectionObject? Вообще, есть полный define?
     
  10. GMax

    GMax Member

    Публикаций:
    0
    Регистрация:
    3 июл 2006
    Сообщения:
    218
    http://www.wasm.ru/forum/viewtopic.php?id=20973
    http://www.nirsoft.net/kernel_struct/vista/EPROCESS.html
     
  11. TarasCo

    TarasCo New Member

    Публикаций:
    0
    Регистрация:
    2 фев 2005
    Сообщения:
    106
    А Вам для каких целей? Если для мирных :), можно воспользоваться ф. ZwQueryInformationProcess + класс ProcessImageFileName. Работает она с дескриптором процесса, поэтому для начала его нужно поиметь с помощью ZwOpenProcess. Работать будет начиная с WinXP.
     
  12. Twister

    Twister New Member

    Публикаций:
    0
    Регистрация:
    12 окт 2005
    Сообщения:
    720
    Адрес:
    Алматы
    Для мирных. Для очень мирных. Скоро (я думаю, что скоро) выложу бету этого проекта на суд общественности. Это проактивный монитор.

    Поддержку w2k делать не думаю. Но еще не уверен.

    За способ спасибо, но это медленно, лучше PEB, ведь ZwQueryInformationProcess скорее всего от туда и берет.