Невозможно связать () сокет внутри Apple Calendar (инъекция dylib)
Я пытаюсь проверить Apple Calendar в iOS 8.1 (MobileCal.app
) Покажите, следуя этому руководству.
Для этого я делаю инъекцию libReveal.dylib
который запускает свой собственный HTTP-сервер, к которому подключается приложение OS X Reveal.
Этот метод отлично работает с большинством системных приложений iOS (телефон, заметки, напоминания и т. Д.), Но что-то в Календаре препятствует настройке HTTP-сервера.
Когда Календарь запущен, libReveal.dylib
правильно вводится, но потом я вижу это в журнале:
MobileCal [5110]: ОШИБКА: Ошибка запуска HTTP-сервера: Ошибка Домен =NSPOSIXErrorDomain Code=1 "Операция не разрешена" UserInfo=0x17426aa40 {NSLocalizedDescription= Операция не разрешена, NSLocalizedFailureReason= Ошибка в функции bind()}
MobileCal [5110]: ОШИБКА: не удалось запустить сервер с ошибкой: Ошибка Домен = Код NSPOSIXErrorDomain = 1 "Операция не разрешена" UserInfo=0x17426aa40 {NSLocalizedDescription= Операция не разрешена, NSLocalizedFailureReason= Ошибка в функции bind()}
Есть идеи о том, что может помешать настройке HTTP-сервера в Календаре? Я заметил, что MobileCal.app
расслоение имеет Entitlements.plist
файл, в то время как большинство других системных приложений нет. Может ли эта проблема быть связана с файлом прав?
Я также связывался со службой поддержки Reveal, они реагировали, но не могли точно определить причину проблемы. С помощью RevealLoader
от Cydia
дает тот же результат.
1 ответ
Ты прав насчет Entitlements.plist
, Проблема очень проста - MobileCal.app
использует пользовательский профиль песочницы.
На самом деле в iOS много профилей песочницы, не только для приложений AppStore. Многие компоненты системы iOS используют их. Чтобы узнать, какой из них вам нужно посмотреть на права приложения. Более конкретно, seatbelt-profiles
ключ.
MobileCal.app
подписан с MobileCal
профиль. И именно поэтому вы не можете использовать bind()
, Я подозреваю, что все сети заблокированы. То же самое можно сказать и о Camera.app
, Оно использует MobileSlideShow
профиль, который также блокирует все сети.
Я могу придумать и использовать два решения этой проблемы:
Напишите демон. Демон выполнит всю работу, заблокированную профилем песочницы. App и демон будут взаимодействовать через некоторый API IPC (например, уведомления или порты маха). Основная проблема с этим - IPC API также может быть заблокирован профилем песочницы. Например,
Camera.app
песочница блокирует все API-интерфейсы IPC, которые могут отправлять произвольные данные. Работают только уведомления Дарвина, которые не могут отправлять произвольные данные. Есть способы решить эту проблему, но это будет очень уродливо.Отказаться от приложения с удаленным профилем песочницы. Таким образом, приложение будет иметь доступ ко всему, и вы сможете выполнять всю работу внутри вашего dylib. Это то, что я использую сейчас, и это работает очень хорошо. Это также своего рода хак, но он значительно улучшает ваш код, не имея дело с IPC и его сложностью. Для меня это того стоит.
Это все в целом. В вашем случае я думаю, что будет работать только второе решение.
Конечно, просто редактирование Entitlements.plist
недостаточно. Фактические права указаны в бинарном файле самого приложения. Вы можете подать в отставку либо на своем Mac, либо на самом iDevice. На Mac у вас есть выбор кода и ldid. На iDevice ваш единственный выбор - это ldid.
Давайте посмотрим, как вы можете решить вашу проблему с помощью ldid. Во-первых, вы сбрасываете права с
ldid -e MobileCal > entitlements.xml
Затем вы редактируете дампированные права и переустанавливаете двоичный файл приложения с помощью
ldid -Sentitlements.xml MobileCal
(Да, между -S
и файл прав).
Вот и все.