Здравствуйте хотел поинтересоваться возможно ли такое. например я перехватываю некоторые функции в ядре и делаю это сплайсингом. использую отправку DPC, атомарный патч. достаточно ли это безопасно?
нет. боль-менее безопасный патч такой: ты замораживаешь все логические процессоры кроме одного, на том который остался отключаешь доставку прерываний, теперь смотришь списки потоков никто ли не остановился из них в том диапазоне ip адресов в том адресном пространстве что ты патчишь. если нет то делаешь патч, иначе размораживаешь процессоры и снова делаешь тоже самое через какое-то время. но и он не идеальный есть нескока причин тому: 1) один и тот же физ. адрес мб отображен в др. адресное пространство по другому вирт. адресу и ты не заметишь что какойто поток остановил там свое выполнение если будешь действовать по указанной логике. Поэтому на самом деле надо еще смотреть трансляцию страниц. 2) хакерский руткит который ты подцепил использует свой планировщик и виндоус ничего не знает о его потоках. Вся эта канитель образуется потому что нельзя сделать обычный "сплайсинг" атомарно те так, чтобы это произошло за один захват шины процессором (мб на х64 можно) + потому что кое-кто мог встрять поперек создаваемого тобой патча
но ты можешь сделать патч с помощью 0xСС бреакпоинта простой инструкцией mov. Во-первых это будет атомарно, во-вторых ты заменишь лишь 1 байт в начале функции значит ты никакой код на серединке не порвешь так что безопасный патч будет выглядеть тупо так: mov byte ptr [address], 0xCC
SashaTalakin Это утверждение относиться только к пользовательскому адресному пространству, тут захват в системном ап: cpplamo Атомарная модификация используется если рабочих процессоров более одного. Но это не спасает от многопоточности полностью, так как и сказали тред может быть прерван исполняя модифицируемое место, в дальнейшем он может вернуться туда спустя большое время. Это не имеет смысла при захвате функций которые исполняются с замаскированными прерываниями, в таком случае достаточно только атомарной модификации, ибо ничто тред в это время прервать не может.