Используя kext, вы, безусловно, можете получить дескриптор задачи для любого процесса;эта часть больше не работает из пользовательского пространства с момента SIP.Указатель task_t
в kext можно преобразовать в специальный порт с помощью task_get_special_port(task, TASK_KERNEL_PORT, &task_port)
, который затем можно отправить в задачу пространства пользователя с помощью mach_msg_send_from_kernel()
.Если у вас есть порт в пользовательском пространстве, вы можете выполнять обычные действия, такие как выделение, чтение и запись памяти в целевой задаче и т. Д. Однако, если в целевой задаче установлены очень строгие флаги подписывания кода, любая попытка выполнить код в памятистраницы, которые не подписаны, завершатся сбоем процесса.Это означает, что он не будет работать на большинстве собственных приложений Apple.Как вы упомянули, другие методы, кроме внедрения кода, могут быть проще и безопаснее.