Для реализации многих системных приложений (антивирусы, системы защиты данных (DLP-системы), различные средства мониторинга) необходимы методы перехвата и контроля событий в пользовательских приложениях. Такими событиями могут быть отправка письма, посылка файла через IM-приложение, использование буфера обмена и т.д. Мой доклад посвящен описанию техник, которые могут быть применены для подобных задач, а также проблем: которые могут при этом возникнуть.
В первую очередь будут рассмотрены методы внедрения кода в пользовательское приложение:
- с использованием динамического загрузчика (DYLD_INSERT_LIBRARIES),
- mach_inject.
Затем будут описаны некоторые методы “подмены” кода в пользовательском приложении, необходимой для перехвата событий:
- DYLD_INTERPOSE,
- Objective-C method swizzling.
Отдельное внимание будет уделено Objective-C introspection и проблеме изучения внутреннего устройства приложений, написанных на Objective-C.
Также будет расмотрена проблема функционирования описанных выше методов для приложений, защищенных механизмом App Sandbox.