безопасные перехваты под NT

Тема в разделе "WASM.NT.KERNEL", создана пользователем cpplamo, 1 сен 2009.

  1. cpplamo

    cpplamo New Member

    Публикаций:
    0
    Регистрация:
    11 авг 2009
    Сообщения:
    38
    Здравствуйте
    хотел поинтересоваться возможно ли такое.
    например я перехватываю некоторые функции в ядре и делаю это сплайсингом.
    использую отправку DPC, атомарный патч.
    достаточно ли это безопасно?
     
  2. SashaTalakin

    SashaTalakin New Member

    Публикаций:
    0
    Регистрация:
    15 дек 2008
    Сообщения:
    261
    нет. боль-менее безопасный патч такой:

    ты замораживаешь все логические процессоры кроме одного, на том который остался отключаешь доставку прерываний, теперь смотришь списки потоков никто ли не остановился из них в том диапазоне ip адресов в том адресном пространстве что ты патчишь. если нет то делаешь патч, иначе размораживаешь процессоры и снова делаешь тоже самое через какое-то время.

    но и он не идеальный есть нескока причин тому:
    1) один и тот же физ. адрес мб отображен в др. адресное пространство по другому вирт. адресу и ты не заметишь что какойто поток остановил там свое выполнение если будешь действовать по указанной логике. Поэтому на самом деле надо еще смотреть трансляцию страниц.
    2) хакерский руткит который ты подцепил использует свой планировщик и виндоус ничего не знает о его потоках.

    Вся эта канитель образуется потому что нельзя сделать обычный "сплайсинг" атомарно те так, чтобы это произошло за один захват шины процессором (мб на х64 можно) + потому что кое-кто мог встрять поперек создаваемого тобой патча
     
  3. SashaTalakin

    SashaTalakin New Member

    Публикаций:
    0
    Регистрация:
    15 дек 2008
    Сообщения:
    261
    но ты можешь сделать патч с помощью 0xСС бреакпоинта простой инструкцией mov. Во-первых это будет атомарно, во-вторых ты заменишь лишь 1 байт в начале функции значит ты никакой код на серединке не порвешь так что безопасный патч будет выглядеть тупо так:

    mov byte ptr [address], 0xCC
     
  4. Clerk

    Clerk Забанен

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