инжект в юзермод, TEB, PEB и вещества

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

  1. oneiron

    oneiron New Member

    Публикаций:
    0
    Регистрация:
    3 июн 2009
    Сообщения:
    3
    некий драйвер создает в csrss.exe поток с помощью ZwCreateThread. этому потоку жизненно необходимо узнать линейный адрес PEB, что он и делает с помощью mov eax fs:[30h].

    при загруженной системе запуск драйвера происходит как по маслу - поток в csrss.exe создается, запускается и выполняет свои прямые обязанности. если же драйвер запускается со стартом системы, начинаются странные проблемы - mov eax, fs:[30h] в csrss.exe вызывает access violation. mov eax, fs:[18h] тоже. эта ошибка приводит к завершению csrss.exe и windows показывает нам красивый синий экран.

    ошибка при загрузке происходит не всегда. в 10% случаев (!) fs:[30h] все-таки указывает куда нужно, и загрузка проходит без эксцессов. вкупе с тем, что при уже загруженной системе инжект также замечательно работает, вариант с неверной инициализацией потока отпадает.

    дамы и господа, не могли бы вы подсказать - что ускользнуло от моего сознания? что может служить причиной столь непристойного поведения регистра fs?

    PS: значение fs для потока задается из драйвера и равно 0x38. ось - xp sp3
     
  2. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Что в Cs/Ss ?
     
  3. oneiron

    oneiron New Member

    Публикаций:
    0
    Регистрация:
    3 июн 2009
    Сообщения:
    3
    Clerk, cs = 0x18, ss = 0x20
     
  4. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Значит юзермодный тред, нужна маска в сегментных регистрах в таком случае(RPL_MASK = 3).
    Ошибки не должно быть, опишите подробнее.
     
  5. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    мб PEB на тот момент еще не проинициализирован.
    Что содержит fs?
    И куда он указывает?
     
  6. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    n0name
    Раз поток начал выполняться значит страница с TEB создана и дескриптор в GDT тоже для неё.
    Чтото явно не то, желательно на момент исключения посмотреть дескриптор и пр.
     
  7. oneiron

    oneiron New Member

    Публикаций:
    0
    Регистрация:
    3 июн 2009
    Сообщения:
    3
    Clerk, n0name, спасибо огромное за помощь и правильные наводящие вопросы :) ошибка была все-таки в инициализации потока - при ручном создании контекста потока задавал ContextFlags с указанием неправильной архитектуры. теперь ума не приложу, почему в 10% случаев это работало.

    будьте внимательны, друзья! :)