Как ProcessExplorer получает список объектов, их имена

Тема в разделе "WASM.NT.KERNEL", создана пользователем billi12, 11 ноя 2011.

  1. billi12

    billi12 New Member

    Публикаций:
    0
    Регистрация:
    31 июл 2011
    Сообщения:
    44
    Да, космос нах. Короче,все - хрень. ПОчитал msdn, написано try/except пробовать. Попробовал RegPostOpenKeyEx. Написано информационного поля касаться только при значении STATUS_SUCCESS, ибо NT_SUCCESS дает большой диапазон для true. А у меня даже такого колбэка не происходит. Короче ппц. Буду иначе пробовать.
     
  2. izl3sa

    izl3sa New Member

    Публикаций:
    0
    Регистрация:
    22 апр 2010
    Сообщения:
    164
    Адрес:
    Spb
    на xp довольно калечная имплементация cm коллбэков к сожалению =(
     
  3. x64

    x64 New Member

    Публикаций:
    0
    Регистрация:
    29 июл 2008
    Сообщения:
    1.370
    Адрес:
    Россия
    Этот код только для Windows Server 2003 и выше.
     
  4. x64

    x64 New Member

    Публикаций:
    0
    Регистрация:
    29 июл 2008
    Сообщения:
    1.370
    Адрес:
    Россия
    Попробуй изменить соответствующую строчку вот так:

    Код (Text):
    1. st = ObQueryNameString(*((PVOID*) info->Object),on,512,&l);
     
  5. billi12

    billi12 New Member

    Публикаций:
    0
    Регистрация:
    31 июл 2011
    Сообщения:
    44
    АААААААААААААААААААААААААААА!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Оно заработало!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Спасибо большущее!!!!!!!!!!!!!!!!!!!!!!!

    В чем прикол?
     
  6. x64

    x64 New Member

    Публикаций:
    0
    Регистрация:
    29 июл 2008
    Сообщения:
    1.370
    Адрес:
    Россия
    Это ошибка документации. Там не указано, что поле Object это на самом деле не PVOID, а PVOID*, т.е. не указатель на сам объект, а указатель на переменную типа PVOID, содержащую адрес объекта. К слову, коды RegNtPostOpenKey, RegNtPostCreateKey и аналогичные используются только в Windows XP, это даже в MSDN отражено:

    Я думаю, что в Microsoft просто решили не исправлять косяки в документации для уже устаревших систем. Для новых систем документация к кодам RegNtPostOpenKeyEx, RegNtPostCreateKeyEx и т.п. вполне актуальна.
     
  7. billi12

    billi12 New Member

    Публикаций:
    0
    Регистрация:
    31 июл 2011
    Сообщения:
    44
    Занимаясь перехватом NtCreate/Open file и вытаскивая имена из атрибутов объекта, я иногда получал что-нибудь типа:

    Код (Text):
    1. :Docf_(символ пика)QebiesnrMkudrfcoIaamtykdDa:$DATA от DbgView
    2. или там
    3. root#system#0000#{много цифр типа SID}\{много цифр типа SID}&{много цифр типа SID} от explorer
    Сейчас я делаю через ObjRef->QueryNameString и всё круто, но всеравно интересно что это?

    И еще. Что за прикол с длинной пути? Я про >25к символов юникода. Как это извлечь в случае чего!?
     
  8. x64

    x64 New Member

    Публикаций:
    0
    Регистрация:
    29 июл 2008
    Сообщения:
    1.370
    Адрес:
    Россия
    Имеется в виду ObQueryNameString() или что?
    Ты учитываешь RootHandle в переданных атрибутах?

    Вероятно, какие-то служебные данные.

    Вообще, максимальная длина Unicode-строки 65,534 байта или 32,767 символов.
     
  9. billi12

    billi12 New Member

    Публикаций:
    0
    Регистрация:
    31 июл 2011
    Сообщения:
    44
    Делаю по хендлу ObReferenceObjectByHandle, a там уже ObQueryNameString. Тогда каким обьемами памяти надо манипулировать!? Под каждый хук 65к выделять!? этож ппц
     
  10. x64

    x64 New Member

    Публикаций:
    0
    Регистрация:
    29 июл 2008
    Сообщения:
    1.370
    Адрес:
    Россия
    Отнюдь, надо выделять сначала небольшой кусок памяти, скажем, 512 - 1024 байт, затем функция вернёт сколько ей на самом деле надо, выделяешь снова память, вызываешь функцию повторно и получаешь наконец-то требуемые данные. Если функция не возвращает кол-во необходимых байт (такое бывает), значит повторяешь указанные манипуляции с буфером до победного (а точнее, до предела, который я указал выше в теме). Наиболее оптимальная стратегия в таких ситуациях.
     
  11. billi12

    billi12 New Member

    Публикаций:
    0
    Регистрация:
    31 июл 2011
    Сообщения:
    44
    Спасибо