Содержание статьи
При работе с джейлбрейкнутым iOS-устройством могут возникнуть проблемы, решить которые можно только при помощи модификации файлов. А для этого необходимо знать базовую структуру файловой системы, понимать, где что лежит и какие файлы за что отвечают, куда устанавливаются программы и твики и как они взаимодействуют между собой. Обо всем этом мы и поговорим.
Основные каталоги и файлы
iOS — UNIX-подобная операционная система и использует очень похожую на UNIX и OS X структуру файловой системы. «Папка» здесь именуется «каталогом», а файловая система «растет» от корня /. Знаком ~ обозначается домашний каталог пользователя. В обычном режиме это каталог /var/mobile/
, в режиме корневого пользователя — /var/root
. Часть каталогов стандартны для UNIX-систем. Это /boot
— здесь в UNIX располагается ядро системы и RAM-диск (в iOS ядро лежит в каталоге /System/Library/Caches/com.apple.kernelcaches/kernelcache
), /etc
— настройки низкоуровневых сервисов, /tmp
— временные файлы, /bin
— команды для запуска с помощью терминала, /mnt
— точка монтирования внешних файловых систем (сюда подключаются флешки и прочее).
Наиболее же интересны для нас каталоги /System
, /Library
и /var
. Именно здесь хранятся сама операционная система (первый каталог), системные данные (второй), настройки приложений и их данные (третий).
Стандартные (предустановленные) приложения лежат в каталоге /Applications
. Здесь же располагаются исполняемые файлы Cydia, Zeusmos и некоторых других программ .app, для установки которых необходим джейлбрейк. Файлов здесь намного больше, чем иконок на рабочем столе iOS, так как тут расположены и некоторые внутренние службы, выделенные в качестве отдельных приложений (встроенная в iOS служба Facebook, Print Center и некоторые другие). На невзломанном устройстве этот каталог обновляется только при обновлении всей прошивки, однако некоторые приложения из Cydia устанавливаются именно в него, как и сам магазин Cydia.
Скачанные из App Store приложения хранятся в /var/mobile/Containers/Bundle/Application
, каждое в своем собственном подкаталоге. Имена этих подкаталогов закодированы, и для того, чтобы понять, что это за приложение, необходимо зайти в каталог и перейти в следующий. Приложения, установленные не из App Store, также обычно находятся здесь. За каждым приложением закрепляется подкаталог в каталоге /var/mobile/Containers/Data/Application
, внутри которого приложение хранит свои настройки и данные, созданные во время работы. Подробнее его структуру мы рассмотрим позже.
Системные обновления загружаются в каталог /var/mobile/MobileSoftwareUpdate
. Их можно удалить через стандартное приложение «Настройки». Все обои хранятся в /Library/Wallpaper
, а системные звуки — в /System/Library/Audio/UISounds
, музыка и видео с компьютера — в /var/mobile/Media/iTunes_Control/Music
.
Отдельно стоит упомянуть каталог /var/mobile/Library/caches/com.saurik.Cydia
. Именно здесь хранятся deb-пакеты твиков до перезапуска Springboard. Если появится необходимость скачать твик на компьютер, его можно взять отсюда. Также при установке твики часто создают дополнительные каталоги, где хранят собственные данные. Обычно о таких каталогах сказано в документации твиков.
Другие статьи в выпуске:
Хакер #204. Шифровальщик для Android |
Программы для работы с ФС устройства напрямую
Существует несколько программ для работы с ФС устройства после джейлбрейка.
- iTools — программа для Mac и Windows, позволяет добавлять и удалять файлы в ФС. На этом ее функции заканчиваются. Преимуществом для многих может стать панель закладок слева от окна просмотра ФС, где можно найти программы, твики, рингтоны или обои устройства.
- iFunBox — имеет значительно больше возможностей. С ее помощью можно создавать каталоги, удалять, переименовывать файлы или экспортировать их на ПК. Вызывает удивление лишь отсутствие поиска по ФС.
- Filza File Manager — позволяет прямо на устройстве просматривать метаданные файлов, переименовывать, перемещать, удалять их, открывать многие типы файлов. Есть встроенный поиск по папкам и одновременная работа с несколькими файлами.
- iFile — во многом превосходит Filza File Manager. Некоторые возможности открываются только после оплаты полной версии программы, однако интерфейс в утилите более удобный и понятный.
Разумеется, работать с файловой системой можно и при помощи терминала. Здесь есть полная поддержка UNIX-команд, так что управление ФС будет очень быстрым и удобным.
Каталоги приложений и песочницы
Кроме того что iOS размещает все установленные пользователем приложения и их данные в отдельных каталогах, она налагает на работу самих приложений серьезные ограничения (запирая их в так называемую песочницу). Приложения не могут получить прямой доступ к оборудованию, им разрешено использовать только одну треть системного API. Плюс ко всему они не могут получить доступ к системным файлам и каталогам, а также файлам других приложений. Фактически все, что видит приложение, — это свой собственный каталог и несколько каталогов в /Library
.
Что касается собственного каталога приложения, то его структура достаточно размыта, но обычно он включает четыре компонента: файл .com.apple.mobile_container_manager.metadata.plist
, содержащий данные о приложении, и каталоги tmp
, Documents
и Library
. В последнем часто находятся также подкаталоги Caches
и Preferences
. Иногда встречаются и другие, все зависит от потребностей программы.
Все документы приложение хранит в Documents
. Этот каталог также используется для добавления файлов в приложение с помощью iTunes (File Sharing). В tmp
могут храниться файлы, скачанные из интернета. Обычно каталог пустует, так как программа перемещает все документы оттуда в Documents
, а затем удаляет их. Library
также содержит временные файлы и пользовательские параметры приложения. В подкаталоге Preferences
могут быть и настройки подключенных к приложению нативных модулей (например, mobilesafari).
Нетрудно догадаться, что при таком подходе, когда каждая программа имеет доступ лишь к нескольким общим каталогам, обмен файлами между приложениями представлялся крайне затруднительным. Например, если файл был переслан, а затем изменен в одной программе, разумеется, изменения не появлялись в другом, так как это два разных файла. За это очень долго упрекали Apple, но компания наконец-то нашла возможность без ущерба для безопасности системы и приложений реализовать функциональность редактирования файла разными утилитами.
В iOS 8 появился новый механизм, названный Document Picker. Он позволяет одним приложениям «видеть» специальные каталоги, созданные другими приложениями, и изменять их «на месте», без переноса в песочницу программы. Для этого используются так называемые публичные песочницы, которые, по сути, представляют собой каталоги, где каждая программа имеет права на запись и на чтение. Фактически это аналог кнопки «Импортировать» на Mac, только доступ дается не ко всей файловой системе, а к отдельным каталогам программ. Технологию поддерживают iCloud Drive, Dropbox и некоторые другие сервисы. Очевидно, их количество будет увеличиваться. Для успешного применения технологию должны поддерживать и программы, откуда будут переноситься файлы, и программа, куда они будут переноситься.
Как происходит установка приложений
Стоит знать, какие каталоги создаются при установке пакетов приложений. Рассмотрим этот вопрос для твиков и программ из App Store. Твики распространяются в deb-пакетах, которые представляют собой архив с файлами: динамические библиотеки (.dylib), настройки (.plist), каталог с самим приложением (.app), каталог с документами и другие. При установке такой файл просто разворачивается в систему. Причем не в пользовательский каталог, а в системные (либо и те и другие), ограничения песочницы на него не действуют.
Рассмотрим файловую структуру установленного твика на примере AudioRecorder. В каталоге /Library/MobileSubstrate/DynamicLibraries
хранятся динамические библиотеки твика и его настройки. В данном случае это AudioRecorder.dylib
, AudioRecorder.plist
, AudioRecorderUI.plist
, AudioRecorderUI.dylib
. Библиотек может быть больше или меньше, все зависит от сложности приложения.
Языковая локализация твика и некоторые настройки размещаются в /Library/PreferenceBundles
. Здесь хранится также несколько изображений, используемых в программе. Исполняемый файл и основная часть графики находятся в /var/db/stash/_.YWqibn/Applications
. В /var/mobile/Library/Mobile Documents
создается также пустой каталог net~limneos~AudioRecorder
. Пользовательские же данные хранятся по пути /var/mobile/Documents/AudioRecorder
.
Разумеется, данная структура крайне вариативна. Обязательны хотя бы один файл настроек, хотя бы одна динамическая библиотека и исполняемый файл. Графика, файлы настроек, вспомогательные файлы по всей ФС аппарата добавляются уже на усмотрение разработчика.
С программами из App Store все значительно проще. В /var/mobile/Containers/Bundle/Application/<шестнадцатеричный код приложения>
хранится графика программы, локализации, исполняемый файл. Каталог /var/mobile/Containers/Data/Application/<шестнадцатеричный код приложения>
— «песочница» программы (документы, пользовательские настройки). На этом структура установленного файла .ipa заканчивается.
Изменяем системные файлы
Теоретически изменением файлов в ФС напрямую можно сделать очень много. Достаточно хотя бы оценить количество файлов с расширением plist — в основной массе это настройки программ и системных сервисов. Потому перечислить все возможные операции с файлами практически нереально, ограничимся лишь некоторыми примерами их использования.
Например, если ты захочешь сменить какой-либо текст на экране блокировки или на рабочем столе, это можно сделать, перейдя в каталог /System/Library/CoreServices/Springboard.app
и перейдя в необходимый локализационный пакет, название которого совпадает с установленным языком интерфейса на устройстве. Файлы здесь хранятся в формате String, и открыть их в «читаемом» виде можно, например, при помощи Filza File Manager, речь о котором шла выше. Для смены надписи Slide to Unlock (или «Разблокируйте» в русском варианте) необходимо открыть Springboard.string
и сменить параметр AWAY_LOCK_LABEL, введя необходимый текст. Не забудь сохранить изменения файла и перезагрузить устройство.
Можно изменять также параметры нативных приложений, которые хранятся внутри их пакетов .app в каталоге /Applications
. Например, в Preferences.app
можно изменять номер сборки или версии системы, а также названия разделов и функций настроек. Если необходимо самостоятельно модифицировать, к примеру, темы для WinterBoard, знание о расположении директорий также пригодится. Так, все темы лежат в папке /Library/Themes
, где их можно видоизменять. Тут есть модифицированные иконки стандартных утилит, можно добавить собственную кастомизированную иконку или поменять уже существующую.
Выводы
Это, конечно же, не все, что можно сказать о файловой структуре iOS, однако в рамках одной статьи мы не можем рассмотреть все ее аспекты и ограничились лишь базовыми понятиями. Имея джейлбрейк, ты можешь пойти дальше и изучить систему самостоятельно. Отличным источником информации может также стать the iPhone wiki.