Запрет доступа к процессу можно реализовать несколькими способами: 1. Замена адреса обработчика NtOpen Process в SDT 2. Спласинг функции NtOpenProcess 3. Замена обработчика int2e/sysenter Но никак не могу определится, что лучше. Может что подскажете?
4) Изменение ACL процесса. 5) Сплайсинг PsLookupProcessByProcessId 6) Удаление записи о процессе из PspCidTable 7) Перехват юзермодных апи Короче говоря, способов много можно придумать. Самым "официальным" является способ запрета открытия процессов изменением ACL, но при вклченой дебаг привилегии процесс можно будет открыть. Замена адреса в SDT - очень часто применяемый прием, работает надежно и реализуется просто. Сплайсинг функции в принципе дает аналогичные результаты, и очень хорош для применения в руткитах (но тогда лучше сплайсить PsLookupProcessByProcessId, при этом процесс еще и окажется скрытым). Замена обработчика int2e/sysenter тоже впринципе неплохо подходит для руткитов. Недостаток только в более сложной реализации (можно наделать кучу багов). Удаление записи о процессе из PspCidTable это чистый DKOM метод, он не требует перехвата апи совсем и не даст открыть процесс обычными средствами. К слову, открывать процесс не обязательно через NtOpenProcess, можно найти его хэндл в других процессах, или вручную (в драйвере) создать нужный хэндл по указателю. В общем, рекомендую хукать через SDT, так как это самый универсальный метод провереный временем. Если это нужно для руткита - то тут DKOM однозначно рулит по уровню скрытности.
>> Если это нужно для руткита... В общем возникла идея написать локальный монитор безопасности. Следовательно необходимо контролировать запуск/уничтожение/обращение к процессам. Вот и в раздумьях как это реализовать(в смысле какой метод перехвата выбрать).