Сплайсинг в нулевом кольце на новых версиях ядра (Виста, Вин7)

Тема в разделе "WASM.NT.KERNEL", создана пользователем d2k9, 31 янв 2010.

  1. TSS

    TSS New Member

    Публикаций:
    0
    Регистрация:
    13 апр 2009
    Сообщения:
    494
    Для легальных приложений способ плох тем, что такой драйвер врятли получит сертификацию. Патч и отключение PG - это не решение, решением был бы _обход_ PG. Думаю такое решение существует, и связано оно с pde/pte, за которыми не следит patch guard.
     
  2. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    TSS
    Тоесть другой код патчить можно(для этого автору и нужно отключить), а верификатор нельзя ?
     
  3. TSS

    TSS New Member

    Публикаций:
    0
    Регистрация:
    13 апр 2009
    Сообщения:
    494
    Clerk
    Разные задачи и требования бывают, автору насколько я понял нужно просто отрубить PG любым способом, неважно патчем ли, или перебивкой контрольных сумм в контролируемом коде или третьим способом. А если поставить задачу обхода патч гварда, не трогая сам PG и контролируемые им данные( а такая задача может быть у легальных драйверов ), то любые патчи отпадают, т.к. они из легального приложение быстро сделают его нелегальным =]
     
  4. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    TSS
    Легальное приложение не будет обходить PG и ядро изменять тоже. Всякий код нарушающий целостность ядра не легальный.
     
  5. TSS

    TSS New Member

    Публикаций:
    0
    Регистрация:
    13 апр 2009
    Сообщения:
    494
    Согласен со второй частью фразы, но:
    Вобщем моя точка зрения: обходить PG можно, и это будет легально, если мы не трогаем того, что защищает PG, а также не трогаем код самого PG.
     
  6. d2k9

    d2k9 Алексей

    Публикаций:
    0
    Регистрация:
    14 сен 2008
    Сообщения:
    325
    Мысль конечно интересная, вот только пока реализации такой не существует :)
     
  7. J0E

    J0E New Member

    Публикаций:
    0
    Регистрация:
    28 июл 2008
    Сообщения:
    621
    Адрес:
    Panama
    Угу, слыхал что это не гарантирует безопасный патч кода который выполняется на IRQL < DISPATCH_LEVEL. ну да тебе эт не важно. и не нужно, если патчить 2х байтные инструкции.
    Ах да, ты упоминул о 64х битах, а я засмотрелся на код и "из-за пг от мелкомягких на новых версиях ядра теневую таблицу сервисов уже геморно модифицировать". Про сплайсинг я слыхал, есть такой термин молекулярной биологии. ты делаешь патч кода (сам пишешь) всю жизть так оно и называлось, пока кто то не изобрел велосипед. Патчить работающий код было есть и будет самой плохой идеей, не важно в каком месте функции.
    Жаль слово не птица, и сказать "забираю назад свои сомнения" ничего не изменит. По теме: есть проблемы с OBJECT_TYPE?
     
  8. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    d2k9
    Реализуйте, тривиальная задача ведь.
     
  9. d2k9

    d2k9 Алексей

    Публикаций:
    0
    Регистрация:
    14 сен 2008
    Сообщения:
    325
    Да больно просто - подожду пока ты во время скуки сделаешь :)
     
  10. Medstrax

    Medstrax Забанен

    Публикаций:
    0
    Регистрация:
    18 июл 2006
    Сообщения:
    673
    А чем они защищены? ))) Угнали IDT подальше, все ексепшены забрали себе, выставили TF. Все. Остается только парсить код на наличие SIDT, увидели - подсунули фейковый адрес, пусть читает из оригинальной IDT с ней все в порядке только в IDTR уже не то ;)
    При любом эксепшене дабы не терять контроль, точно так же - выставили TF и управление обратно оригинальному хэндлеру. Дабы не трейсить юзермодный код, в чем вряд ли есть необходимость, можно до кучи подменить IA32_SYSENTER_EIP + парсить еще и RDMSR,WRMSR и SYSEXIT.
     
  11. Medstrax

    Medstrax Забанен

    Публикаций:
    0
    Регистрация:
    18 июл 2006
    Сообщения:
    673
    LIDT разумеется тоже нужно ловить
     
  12. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    medstrax1
    rtfm, только потом вопросы.)
     
  13. Medstrax

    Medstrax Забанен

    Публикаций:
    0
    Регистрация:
    18 июл 2006
    Сообщения:
    673
    Сенкс, за совет конечно ))) Давай по существу.
     
  14. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    medstrax1
    По существу:
    > А чем они защищены?
    PG.
    > Угнали IDT подальше
    Угонять придётся в KPCR, уверены что PG не проверяет базу(или явно не обращается к текущей) ?
    > все ексепшены забрали себе
    Если таблицу не менять, а ставить шлюзы в текущей, то бсод будет - IDT защищены PG.
    > выставили TF
    Если трассировать много кода, то ядро слишком сильно замедлит работу, вплоть до зависания, при трассировке некоторых участков возникнут деадлоки. Если выполнять манипуляции со страницой в которой расположена IDT, возникнет исключений двойной ошибки и камень будет остановлен. Впрочем я так и не понял что и зачем трассировать.
    > IA32_SYSENTER_EIP + парсить еще и RDMSR,WRMSR и SYSEXIT.
    В x64 другие регистры. Некоторые MSR защищены PG.
     
  15. Medstrax

    Medstrax Забанен

    Публикаций:
    0
    Регистрация:
    18 июл 2006
    Сообщения:
    673
    Угоняем через LIDT. В KPCR пусть проверяет, там не трогаем. Что еще неясно? При любом эксепшене вызваем оригинальный хэндлер. Трассируем чтобы PG,или кто то еще;), не узнал новую базу IDTR через SIDT, пусть ядро считает, что IDT там же где и была, поэтому и чексумму будет считать по тем же адресам. В x64 IA32_SYSENTER_EIP никуда не делся, только там еще добавляется IA32_LSTAR. Для этого и нужно парсить RDMSR - чтоб PG не не догадался о подмене MSR'ов.
    ЗЫ.
    Конечно нужно еще парсить и popfd/iretd, чтоб не потерять TF
     
  16. Clerk

    Clerk Забанен

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

    Medstrax Забанен

    Публикаций:
    0
    Регистрация:
    18 июл 2006
    Сообщения:
    673
    А почему это нельзя хардварные трассировать? И почему нельзя трассировать все ядро?
    Собственно в этом и заключается решение - трейсить все, что не в юзермоде (сомневаюсь что в PG есть юзермодные куски)
     
  18. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    medstrax1
    Ну попробуйте.)
     
  19. Medstrax

    Medstrax Забанен

    Публикаций:
    0
    Регистрация:
    18 июл 2006
    Сообщения:
    673
    А зачем? Есть концепт, принципиальных возражений не услышал, кто захочет реализовать - ради бога, мне не надо. Один фиг ПГ это временное решение. Рано или поздно мелкомягкие опустят ядро в ринг -1, вот там уже патч будет точно невозможен. Разве только кто найдет бэкдор в интеловской VT-x
     
  20. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    medstrax1
    Трассировал я многие части ядра, в основном для захвата кода(IDP). Если код большой, то всё виснет. Да и не только это. Например TF сбрасывается при вызове шлюза в IDT. Да и железо реальное, а не виртуальное.