Разбираться готов сам, подскажите направление.
Направление было подсказано. Это перехват функций, работающих с памятью.
Однако перехватывать в третьем кольце довольно муторное занятие - тебе придётся не только внедрить свой код во все работающие процессы, но так же контролировать создание новых. Гораздо легче производить фильтрацию в ядре, для этого достаточно контролировать лишь два сервиса:
NtReadVirtualMemory и
NtWriteVirtualMemory.
Но не стоит так же забывать, что из ядра твою память можно читать и в обход этих функций. Думаю что найдётся немало утилит, способных аттачиться к целевому процессу с помощью
KeStackAttachProcess и работать с его памятью напрямую, как со своей (так, к примеру, поступает плагин ExtremeDumper для PETools).
Можно пойти еще дальше и взять под надзор
KeStackAttachProcess и
KeAttachProcess, но и тут найдутся обходные пути: начиная от изменения регистра cr3 до чтения физической памяти.
В общем, всё это борьба с ветряными мельницами. Если кому-то потребуется прочитать/модифицировать твою память, он сделает это в любом случае.
А я все практикую лечение травами...