OBJECT_HEADER в Windows7 build 7100

Тема в разделе "WASM.NT.KERNEL", создана пользователем reader, 7 июн 2009.

Статус темы:
Закрыта.
  1. reader

    reader New Member

    Публикаций:
    0
    Регистрация:
    6 июн 2009
    Сообщения:
    8
    Доброго времени суток уважаемые :)

    В NT 6.1 изменились ряд системных структур, которые ранее не менялись десятилетиями. Это касается прежде всего OBJECT_HEADER из которой изьяли указатель на тип объекта, заменив однобайтовым индексом типа.

    WinObjEx естественно перестал 100% функционировать, что очень досадно т.к. программа очень полезная :dntknw:

    и вопрос к вам профи: я так понимаю теперь нужно самому получить список типов объектов и потом шариться по нему с индексом из заголовка? Например, мне нужно проверить по заголовку является ли объект объектом типа Section или Thread. Либо существуют другие кошерные методы, не требующие жутких манипуляций?
    Пожалуйста, поправьте если что.

    Спасибо.
     
  2. reader

    reader New Member

    Публикаций:
    0
    Регистрация:
    6 июн 2009
    Сообщения:
    8
    Немного облажался) WinObjEx работает, надо было с правами админа запустить. Тем не менее мой вопрос про заголовок актуален:)
     
  3. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Ну так сравни тип с необходимым, например с [PsThreadType]. Обычо код знает что за обьект, а нелегально манипуляци нужны.
     
  4. x64

    x64 New Member

    Публикаций:
    0
    Регистрация:
    29 июл 2008
    Сообщения:
    1.370
    Адрес:
    Россия
    Во-первых, что мешает идентифицировать тип объекта вот по этому самому индексу? Во-вторых, если по каким-то причинам это не подходит, тогда можно воспользоваться относительно документированным методом: ZwQueryObject() с классом ObjectTypeInformation, на выходе будет PUBLIC_OBJECT_TYPE_INFORMATION. На самом деле полей там больше, но этого вполне достаточно, первое же поле - имя типа, по нему и идентифицировать.
     
  5. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    x64
    На том уровне где вручную парсинг таблиц и обьектов ни о каких сервисах речи быть не может.
     
  6. x64

    x64 New Member

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

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    x64
    Чтоб вы ерунду не советовали.
     
  8. x64

    x64 New Member

    Публикаций:
    0
    Регистрация:
    29 июл 2008
    Сообщения:
    1.370
    Адрес:
    Россия
    Аргументируй, что ли...
     
  9. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    x64
    Товарищ собрался хидеры обьектов разбирать, а вы ему предлогаете сервис юзать, да причём Zw!
     
  10. x64

    x64 New Member

    Публикаций:
    0
    Регистрация:
    29 июл 2008
    Сообщения:
    1.370
    Адрес:
    Россия
    Ты не знаешь, что товарищ собрался делать, из первого поста это не очевидно.
     
  11. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    А что, это уже религиозно запрещено?
     
  12. reader

    reader New Member

    Публикаций:
    0
    Регистрация:
    6 июн 2009
    Сообщения:
    8
    Всем спасибо, особенно x64.
    Ничего не мешает, собственно примерно так я и собирался поступить, написав об этом ещё в первом посте :) Я понимаю любовь некоторых людей к чистому DKOM, но это не всегда подходит для моей работы :) Там вообще-то и был сплошной DKOM и первое же изменение в структурах объектов винды поставило его раком.
     
  13. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    reader
    Я так понял что вместо сравнения численного значения, вы хотите сравнивать имя типа, полученное из его значения. Что тут сказать.. хуже не придумать. Это всравно как для определения что регистр Eax содержит 10, нужно сконвертировать значение в строку а затем сравнить с "10"..
     
  14. reader

    reader New Member

    Публикаций:
    0
    Регистрация:
    6 июн 2009
    Сообщения:
    8
    Я хотел получить список объектов с их индексами, запомнить его куда-нибудь и потом уже сравнивать именно индексы. Вы хотите предложить какое-нибудь другое решение, которое будет работать на 7100 и далее?
     
  15. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    В зависимости от версии изменять тип проверки.
    Сказаное про Zw-стуб для сервиса решение неверное. Вобще заглушки предназначены для вызова из юзермода, ядреный код не должен их использовать. Главная причина - вызов пройдёт через SST, а это логово зверя, все там перехваты ставят. Не изветсно что в данном случае будет. Попытка доступа из сервиса к какомуто обьекту, не принадлежащему вызывающему процессу будет расценена как нарушение общей защиты(внедрение и пр.) и дальнейшее поведение вызывающего потока не определено, он может быть завершён. А NtQueryObject не экспортируется. Нормальный код, который вызывает сервисы из ядра должен пропускать пролог(исполнять оригинальный отдельно) для обхода перехвата начала функции посредством сплайсинга.
     
  16. AntiFreeze

    AntiFreeze Дмитрий

    Публикаций:
    0
    Регистрация:
    26 июн 2008
    Сообщения:
    65
    Clerk, согласись, это всё равно половинчатое решение. Модификация кода может быть где угодно - в середине функции, или в другой функции, которая вызывается исходной. Например, NtQueryObject может быть чистая, а похукана ObReferenceObjectByHandle, которая вызывается самой NtQueryObject. Тут вариантов миллион.
    Всё-таки лучше ядро с диска грузить и руками выдирать тот код, который нужен.. А вообще всё от задач зависит. Я к тому, что иногда можно даже и Zw* юзать.
     
  17. AntiFreeze

    AntiFreeze Дмитрий

    Публикаций:
    0
    Регистрация:
    26 июн 2008
    Сообщения:
    65
    Clerk, может быть. Если ты ищещь объекты PsThreadType, или скажем PsProcessType, или ещё что-то и потом работаешь только с ними, то я с тобой соглашусь. Имена тут никому не нужны и идентифицировать объект по имени, когда есть его тип по меньшей мере глупо (а если этот тип ещё и экспортируется, то глупо вдвойне). Но если ты пишешь гуёк аля WinObj для просмотра директорий объектов, то почему бы и сразу имена объектов не выводить?
     
  18. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Наверно я чегото не понимаю. Может как освобожусь чисто ради теоритического интереса попробую чтонибудь для CPL=0 собрать на VBA. Пока не представляю как, это не полноценный компилятор, но думаю решение найдётся.
    Может и паранойя, я никогда не понимал зачем лезть в дебри выполняя тысячи инструкций если достаточно двух-трёх.
     
  19. x64

    x64 New Member

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

    reader New Member

    Публикаций:
    0
    Регистрация:
    6 июн 2009
    Сообщения:
    8
    Я сравниваю индексы и указатели, а не занимаюсь демагогией вроде
    Кстати, не вижу никакой корреляции между моим вопросом и его толкованием Clerk'ом. У меня есть список всех типов объектов, полученный из директории объектов (без вызовов ZwQueryObject), с их именами типов, индексами и указателями. Мне собственно больше ничего не нужно, кроме обеспечения совместимости с будущими билдами, пока снова не изменяться ключевые структуры.

    Я не совсем понимаю рвение с которым здесь некоторые люди пытаются доказать убогость использования документированных способов.

    Так как я оказался автофагом - сам задал вопрос, сам же на него ответил, я не вижу смысла заниматься ерундой и вступать в безрезультатную полемику, кто за кем следит, на каком уровне бога нужно разбирать объекты, и каким образом их парсить.

    Для меня тема исчерпана и закрыта, всем кто давал советы по теме - спасибо :)
     
Статус темы:
Закрыта.