Подтвердить что ты не робот

Список доступа к процессам на iOS 9

Начиная с iOS 9, Apple решила заблокировать sysctl, который предоставил список запущенных процессов (https://developer.apple.com/videos/wwdc/2015/?id=703).

После поиска частных API-интерфейсов я нашел класс с именем "THIRDPartyApps", который выглядит точно так, как мне нужно (имя процесса и использование данных в WiFi и WWAN). Но я не знаю, как получить список THIRDPartyApps.

Кто-нибудь знает, как это работает?

Изменить:

Найдено через Symbolication.framework 2 класса: VMUProcList и VMUProcInfo. В первом есть метод, называемый allProcInfos, возвращающий NSArray из VMUProcInfo.

Работает на устройстве 7.1.2 (я полагаю, что он тоже работает на устройствах 8.X), но больше не работает на устройстве iOS 9. У меня красивая ошибка в консоли:

Сбой вызова sysctl для получения размера буфера списка процессов: операция не разрешена

4b9b3361

Ответ 1

Я просто смотрел сессии WWDC 2015 о безопасности и конфиденциальности и собрал несколько заметок об изменениях, внесенных iOS 9, которые, как я думал, были интересными. Безопасность приложений на транспорте

Это большой вариант: по умолчанию в iOS 9 приложениям больше не разрешено инициировать HTTP-соединения с открытым текстом, и им будет необходимо использовать HTTPS с самой сильной конфигурацией TLS (TLS 1.2 и PFS cipher suites):

Можно снять эти ограничения и по-прежнему извлекать данные через HTTP-текст, добавив некоторые ключи конфигурации в приложение Info.plist. Кроме того, App Transport Security, по-видимому, доступна только для подключений, инициированных с использованием NSURLSession. В то время как NSURLConnection устаревает (заставляя всех переключиться на NSURLSession для HTTP), мне интересно, не произойдет ли соединение с открытым текстом через другие сетевые API (например, NSStream).

Отличное изменение в целом, и это может быть даже первым шагом к принудительному HTTPS в рамках политики магазина приложений. Обнаружение заблокированных заблокированных приложений

Apple закрыла три пробела в защите, которые позволили приложениям обнаруживать, какие другие приложения были установлены на устройстве.

The first technique was to use the sysctl() function to retrieve the process table (a remnant of OS X), which includes the list of running Apps. In iOS 9, sysctl() was modified to no longer allow sandboxed Apps to retrieve information about other running processes.

The second technique relied on the UIApplication canOpenUrl method to try known URI schemes implemented by specific Apps, in order to detect if these Apps were installed on the device. This was made famous by Twitter, which used a list of 2500 URI schemes to detect which Apps were installed on the device. In iOS 9, Apps have to explicitly declare which schemes they would like to use in their Info.plist file. For Apps targeting iOS 8 but running on an iOS 9 device, there is also a hard limit of 50 URI schemes that can be checked at most.

There was a third technique which relied on the icon cache being accessible to sandboxed Apps. Although it wasn’t even mentionned in the WWDC video, this privacy leak has also been addressed in iOS 9.

В целом, закрытие этих пробелов в защите - отличный шаг для пользователей, поскольку эти API были оскорблены различными приложениями и пакетами аналитики/рекламы.