2013-04-03 2 views
0

Я сделал пример, который записывает в память процесса с помощью task_for_pid() и mach_vm_write().Предотвращение доступа к памяти процесса

task_for_pid(mach_task_self(), pid, &target_task); 
mach_vm_write(target_task, address, '?', local_size); 

Есть ли способ, чтобы блокировать доступ к памяти конкретного процесса от других процессов, таких как читы двигатель на OS X.

Как предотвратить другой процесс от вызова task_for_pid?

Не то, чтобы многие другие приходят на ум, за исключением крючков.

ответ

1

В OS X вызовы task_for_pid регулируются заданием. В принципе, если это не ваша задача, или вы root (или, в более старых системах, член группы procview), вы не получите этот неуловимый порт задачи. Но если вам разрешено, то у вас есть порт, и вы можете делать в основном все, что хотите.

Подключиться не поможет, так как task_for_pid - это механическая ловушка - люди могут вызвать ее напрямую, используя интерфейс системного вызова. iOS имеет гораздо более жесткие средства управления (благодаря AppleMobileFileIntegrity.kext). Если вы хотите контролировать ловушку, эффективно единственный способ сделать это - написать небольшой kext, чтобы сделать трюк для вас.

+0

Я создал kext, чтобы заменить task_for_pid на task_for_pid. Он блокирует доступ к определенному процессу, но множество приложений вызывает task_for_pid. Существует побочный эффект вызова моей задачи_for_pid. Некоторые приложения не могут выполняться. – tnrgus

+0

Все, что вам нужно сделать, это просто разрешить приложениям нормально работать, если это не процесс/задача, которую вы пытаетесь защитить. Таким образом, другие приложения будут выполняться и работать корректно. – Technologeeks

+0

Если мой kext запускается после запуска приложения, которое я хочу защитить, нет проблем. Я не знал, что task_for_pid вызывается при запуске приложения. Могу ли я узнать, какой процесс называется task_for_pid? – tnrgus

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