2013-06-02 4 views

ответ

5

Отсутствует обработка WriteProcessMemory в текущем процессе. Это происходит внутри ОС - он отображает внешний процесс в адресное пространство текущего процесса, записывает в память и снова отображает память.

Если вам нужно защитить от этого, вам придется заблокировать все процессы с помощью WriteProcessMemory (или, по крайней мере, перехватить его и проверить, был ли выбран ваш процесс). Это, вероятно, не позволит отладчикам работать в этой системе, если вы не будете осторожны. Это может расстроить людей, и кто-то, кто знает, что они делают, может, возможно, обходить его.

+0

И VirtualProtectEx, CreateRemoteThread также ничего не вызывает в текущем процессе? –

+0

Правильно, все они происходят внутри ОС - CreateRemoteThread, очевидно, заставляет другой поток запускаться в исходном процессе, и это, вероятно, может быть обнаружено, если ваш код знает, сколько потоков он должен «иметь» (путем перечисления всех потоков в процессе - но он предполагает, что вы знаете, что графический драйвер, аудиодрайвер, физический движок и т. д. и т. д. не создают произвольные потоки [на определенном оборудовании и т. д.]. VirtualProtect и его братья и сестры являются полностью частью ОС, поэтому вы не можете см. это из «целевого» процесса. –

+0

Чтобы добавить немного здесь: в типичном случае целевой процесс будет приостановлен, когда происходит «WriteProcessMemory». Таким образом, он обычно не может реагировать вообще. –

Смежные вопросы