Проверка целостности драйвера

Тема в разделе "WASM.WIN32", создана пользователем ksu_ant, 17 мар 2006.

  1. ksu_ant

    ksu_ant New Member

    Публикаций:
    0
    Регистрация:
    28 сен 2005
    Сообщения:
    273
    Здравствуйте!

    Как можно проконтролировать целостность драйвера? Имеются ввиду не алгоритмы, так же понятно как проверить файл драйвера на диске. Вопрос в том, как это сделать в памяти (т.е. драйверу найти самого себя - и посчитаться)?

    И еще: насколько реально осуществить патч драйвера в памяти. Файл патчить, насколько я понимаю, в принципе, - возможно.

    Заранее благодарен за конструктивные ответы.
     
  2. CARDINAL

    CARDINAL Member

    Публикаций:
    0
    Регистрация:
    23 янв 2004
    Сообщения:
    551
    Адрес:
    Moscow
    ну и чево тебе мешает ? если ты будешь проверять драйвер из стороннего кода, думаю , не составит труда перечислить модули загруженные, найти и посчитать, или отправь драйверу запрос, пусть скажет где он есть, но можно пофиксить. Патчить файл очень даже реально, только тебе пототом контрольную сумму пересчитать надо, тулзовин для этого валом.
     
  3. ksu_ant

    ksu_ant New Member

    Публикаций:
    0
    Регистрация:
    28 сен 2005
    Сообщения:
    273
    Желательно бы не только из стороннего, но из самого драйвера проверить его же.

    Контрольная сумма - не стандартная (виндовая CRC), а алгоритм, вроде RMD и т.д.
     
  4. CARDINAL

    CARDINAL Member

    Публикаций:
    0
    Регистрация:
    23 янв 2004
    Сообщения:
    551
    Адрес:
    Moscow
    ну и что тебе мешает посчитать контрольную сумму собственных кодовых секций ?????
     
  5. ksu_ant

    ksu_ant New Member

    Публикаций:
    0
    Регистрация:
    28 сен 2005
    Сообщения:
    273
    Вопрос: как их (эти секции) найти в памяти?

    Если можно, какой-нибудь исходник, просвещающий по этому поводу...
     
  6. Dimson

    Dimson New Member

    Публикаций:
    0
    Регистрация:
    7 июл 2005
    Сообщения:
    59
    Адрес:
    Russia
    Драйвер - исполняемый файл PE-формата. Там есть таблица секций, по которой можно определить их адреса и всё остальное. Документации по PE и по тому, как его парсить, навалом, в т.ч. и на васме.
     
  7. ksu_ant

    ksu_ant New Member

    Публикаций:
    0
    Регистрация:
    28 сен 2005
    Сообщения:
    273
    Это понятно.

    Не понятно, как найти сам "кусок" памяти (оперативной), в котором содержится загруженный драйвер, и посчитать его. Формат, в данном случае, по-моему мне мало поможет.
     
  8. MegaZu

    MegaZu New Member

    Публикаций:
    0
    Регистрация:
    22 июл 2005
    Сообщения:
    290


    NtQuerySystemInformation

    SystemInfoClass == SystemModuleInfo



    typedef struct _SYSTEM_MODULE

    {

    ULONG Reserved[2];

    ULONG Base;

    ULONG Size;

    ULONG Flags;

    USHORT Index;

    USHORT Unknown;

    USHORT LoadCount;

    USHORT ModuleNameOffset;

    CHAR ImageName[256];

    } SYSTEM_MODULE, *PSYSTEM_MODULE;



    typedef struct _SYSTEM_MODULE_INFORMATION

    {

    ULONG uCount;

    SYSTEM_MODULE sSystemModule[];

    } SYSTEM_MODULE_INFORMATION, *PSYSTEM_MODULE_INFORMATION;
     
  9. ksu_ant

    ksu_ant New Member

    Публикаций:
    0
    Регистрация:
    28 сен 2005
    Сообщения:
    273
    To MegaZu:

    Вот это другой разговор.

    Конкретные прототипы даны.

    Спасибо!
     
  10. MegaZu

    MegaZu New Member

    Публикаций:
    0
    Регистрация:
    22 июл 2005
    Сообщения:
    290
    ksu_ant



    Всегда рад помочь:)
     
  11. eugene_

    eugene_ New Member

    Публикаций:
    0
    Регистрация:
    15 дек 2005
    Сообщения:
    93
    Адрес:
    Russia
    Считать контрольную сумму кода ничего не мешает, однако сравнивать ее с контрольной суммой драйвера на диске не выйдет - ибо релоки будут по любому.

    Обходить релоки - гимор лишний.

    Можно конечно посчитать из DriverEntry и использовать как эталон при последующих сторонних проверках (когда релоки уже посчитаны). Или строить bitmap байтов из имиджа драйвера, которые используют релоки и обходить их
     
  12. ksu_ant

    ksu_ant New Member

    Публикаций:
    0
    Регистрация:
    28 сен 2005
    Сообщения:
    273
    To eugene_:

    Спасибо за ответ.

    Конечно, сама методика контроля еще будет обдумываться, вопрос был про принцип.
     
  13. MegaZu

    MegaZu New Member

    Публикаций:
    0
    Регистрация:
    22 июл 2005
    Сообщения:
    290




    хммм ..., а что мешает промапить файл с диска учитывая релоки,и сравнивать ?



    [add]



    упс, забыл о #pragma code_seg("INIT") , #pragma code_seg("PAGE")



    Хотя если это твой драйвер то все можно предусмотреть ... но если чужой то могут быть траблы ..
     
  14. CARDINAL

    CARDINAL Member

    Публикаций:
    0
    Регистрация:
    23 янв 2004
    Сообщения:
    551
    Адрес:
    Moscow
    создаете себе геморой, данная задача в общем случае не имеет решения. Так что советую незаморачиваться