Может ли кеширование macOS внедрить код в конкретные процессы (как это сделал mach_inject)? - PullRequest
0 голосов
/ 17 декабря 2018

Хотя mach_inject был удобным (но рискованным) решением для вставки части кода в другие приложения (в основном используется для настройки Finder), он не работает с 10.11.Есть ли возможность достичь той же функциональности, используя какой-нибудь кекст?

Цель этого - добавить некоторые визуальные эффекты поверх окон для определенных приложений.Может быть, есть более простое решение, такое как Accessibility API?Спасибо!

1 Ответ

0 голосов
/ 17 декабря 2018

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

...