C ++ и защита памяти процесса - PullRequest
7 голосов
/ 19 сентября 2009

Я знаю, что WinAPI имеет встроенные функции взлома.

Я даже использовал их в C # с Pinvoke ... Взломать Сапер ... Это было легко ... Так ...

Как я могу защитить свое приложение от редактирования памяти процесса, запрета внедрения DLL и других способов взлома. КАК?! * * 1005

Надеюсь, что WinAPI имеет что-то вроде void DontTouchMeOrIWillTerminateYou(bool protect) ...

Ответы [ 4 ]

9 голосов
/ 19 сентября 2009

Контроль доступа в Windows осуществляется отдельно для каждого объекта. Если вы хотите защитить объект процесса, вам нужно установить ACL объекта процесса, либо при создании процесса (через lpProcessAttributes из CreateProcess), либо впоследствии (через SetKernelObjectSecurity ). Если вы добавляете запись «запретить все» в ACL, попытки злоумышленника открыть процесс не удаются.

Конечно, владелец процесса (и, следовательно, любой вредоносный код, выполняемый пользователем) может изменить ACL обратно на прежний - однако, вредоносный код может быть не готов к этому. Чтобы эффективно предотвратить атаки из пользовательского пространства, необходимо запустить процесс как неинтерактивный пользователь (например, как LocalSystem).

Никакая защита не может предотвратить атаки из пространства ядра, поэтому любой, кто может установить драйверы, может также взломать любой процесс в системе.

4 голосов
/ 19 сентября 2009

Взлом? Это называется отладка (по большей части)

И короткий ответ на ваш вопрос: «Нет, вы не можете этого сделать». Я слышал, что в Vista и более поздних версиях есть некоторые процессы ОС, которые вы не можете отлаживать (процессы DRM и т.п.), но я не уверен, что вы можете заставить свои процессы работать таким образом.

Реальный вопрос в том, почему вы хотите это сделать, и вам не о чем беспокоиться (скажем, о производительности и удобстве использования, не говоря уже о правильности вашего программного обеспечения)?

1 голос
/ 19 сентября 2009

Что касается редактирования памяти, тривиальным способом ее обнаружения будет сохранение контрольной суммы для некоторых ваших данных.

0 голосов
/ 19 сентября 2009

Не развертывайте / не запускайте ваш процесс на машине, управляемой конечным пользователем: вместо этого запустите ваш процесс на своей собственной машине, и пусть конечные пользователи будут общаться с вашим процессом через Интернет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...