Проверка того, что исполняемый файл подписан

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

  1. Forever

    Forever Виталий

    Публикаций:
    0
    Регистрация:
    12 апр 2008
    Сообщения:
    244
    Нужна помощь по следующеу вопросу. Необходимо написать код в kernel-mode, который будет узнавать подписан ли исполняемый файл. Под подписан имеется ввиду есть ли у него подписка Microsoft (Authenticode). Все способы, что я нашел в основном используют эзермодную библиотеку Wintrust.dll. А как сделать это в кернел моде?
     
  2. Osen

    Osen Рие

    Публикаций:
    0
    Регистрация:
    5 апр 2008
    Сообщения:
    283
    Адрес:
    Париж
    Forever
    Доверяй юзермодному коду делать это, или реверси wintrust.dll
     
  3. reverser

    reverser New Member

    Публикаций:
    0
    Регистрация:
    27 янв 2004
    Сообщения:
    615
    http://www.microsoft.com/whdc/winlogo/drvsign/Authenticode_PE.mspx
     
  4. Osen

    Osen Рие

    Публикаций:
    0
    Регистрация:
    5 апр 2008
    Сообщения:
    283
    Адрес:
    Париж
    Вот и отлично, формат открытый, осталось все это дело теперь реализовать в ядре. Думается все-таки сделать это в r3, т.к. кода там немерянно и дублировать его в r0 ИМХО не имеет смысла.
     
  5. VENOM4X

    VENOM4X New Member

    Публикаций:
    0
    Регистрация:
    18 мар 2008
    Сообщения:
    29
    Forever
    Для ядра не знаю, а для user mode можно взать пример кода отсюда http://roceun.tistory.com/38
     
  6. Forever

    Forever Виталий

    Публикаций:
    0
    Регистрация:
    12 апр 2008
    Сообщения:
    244
    Данный документ я уже видел и прочитал его. ТАм содержится общая информация о подписке исполняемых файлов. Есть конечно и словестное описание алгоритма проверки целостности файла. Однако если при реализации данного алгоритма придется мимоходом написать алгоритм хеш функций SHA1 и MD5, и возможно еще много чего(я даже не говорю о разборе PE). Так что сами понимаете реализация будет не очень простая, особенно если учесть, что это все нужно написать в ядре. Фактически это дублирование кода Wintrust.dll. Есть возможность взять исходники wintrust.dll для WINE. Однако там кода немеряно, и притом большая часть лишняя для меня.
    Здесь еще нужно учесть, что проект для которого все это нужно написать пишется для Vista SP1 и Server 2008. Все что версией ниже поддерживаться не будет (включая Vista без сервиспака). Возникала идея заюзать CI.dll - библиотека ядра, которую загрузчик ОС использует для проверки целостности модулей ядра, однако она не документирована, и даже не понятно подойдет ли это мне. Так что лучший на сегодня вариант - это доверить проверку юзермодному приложению.
     
  7. Forever

    Forever Виталий

    Публикаций:
    0
    Регистрация:
    12 апр 2008
    Сообщения:
    244
    Этот исходник имеется в наличии в MSDN. Именно его я использовал как отправную точку для поиска. Но все, к чему это привело - описано выше.