2012-06-26 3 views
4

У меня есть файл IPA, который содержит info.plist, исполняемый файл, package.info, сертификат обеспечения, динамическую библиотеку, ресурсы кода и т. Д. Я хочу знать, какой файл выполняется первым и в каком порядке выполняется исполнение. Я хочу добавить некоторый контент в IPA, и для этого мне нужно понять, как работает существующий IPA.Я хочу знать поток выполнения файла IPA

Заранее спасибо.

ответ

9

Файл IPA - это просто zip-файл приложения. Он содержит сам двоичный файл, Info.plist, коды, определяющие файлы, значки и другие ресурсы.

Когда вы загружаете приложение из AppStore, файл IPA загружается в/var/mobile/Media/Downloads вместе с метафайлом. После его полной загрузки запускается демон установки (installd), который извлекает IPA в/var/mobile/Applications/< UUID здесь > /. В этом каталоге идет:

  • . Папка .app, которая содержит все ресурсы приложения и исполняемый файл.
  • Папка «Документы» для хранения файлов любого типа (чтение/запись).
  • Папка библиотеки для кэширования данных и хранения данных ключа/значения в формате plist с использованием NSUserDefaults (Library/Preferences/.plist).
  • Папка tmp, используемая для хранения временных данных. Содержимое этой папки удаляется, когда приложение не запущено.

Затем файл IPA удаляется, освобождая пространство, удаляя архив приложения.

Когда загружается SpringBoard (приложение для рабочего стола), он считывает Info.plist каждого приложения и кэширует его. Из этого, помимо прочего, он получает отображаемое имя (имя под значком), сам значок и имя исполняемого файла.

Когда вы нажимаете на значок приложения, SpringBoard отображает приложение Default.png в качестве заставки, когда исполняемый файл загружается в память. Он расшифровывается во время этого процесса, поскольку каждое приложение AppStore зашифровывается, когда оно подписывается Apple. Как только исполняемый файл загружается в память, dyld (динамический компоновщик) загружает любые фреймворки или библиотеки, с которыми он связан (например, UIKit, libobjc, libSystem и т. Д.). Приложения не могут включать в себя какие-либо библиотеки; исполняемый файл должен быть автономным. Затем вызывается функция main() приложения, и код приложения запускается.

Есть несколько вещей, которые вы должны знать:

  1. Модификация так как один байт в исполняемый файл приложение, будет аннулируют подписи кода, и ядро ​​будет отказаться, чтобы запустить приложение.

  2. Если вы не работаете на джейлбрейк-устройстве, исполняемый файл не может быть отредактирован или изменен даже во время выполнения. Вы не можете изменить способ запуска приложения, не запуская некорректный код так или иначе (двоичная модификация или инъекция dylib времени исполнения).

  3. IPA может быть установлен только ВАШИМ СЧЕТОМ. Вы не можете загрузить IPA и ожидать ее запуска. Подпись кода недействительна.

  4. Непросто изменить способ запуска приложения. Некоторые приложения сохраняют все свои параметры конфигурации в plist, чья личность не проверена, но эти приложения немного и далеко друг от друга.Большинство приложений будут проверять конфигурацию или сохранять файлы с помощью алгоритма хеширования (например, md5 или sha1), что значительно затрудняет редактирование этих файлов, не отклоняя приложение. Многие другие приложения просто не используют plists или другие легко редактируемые типы файлов. Они будут либо использовать менее известный, либо фирменный формат, либо они не будут использовать файлы конфигурации.

Поймите, с чем вы сталкиваетесь, прежде чем прислушиваться к нему. Я не обескураживаю вас от попытки; Я просто пытаюсь помочь вам понять препятствия, которые необходимо преодолеть, чтобы снять это.

+0

+1 для такого приятного объяснения :) – Iducool

+1

Ive копал в iOS около трех лет, поэтому я знаю это наизусть. iOS - интересная платформа. – C0deH4cker

+0

Отредактировано для добавления сведений об установке приложения. – C0deH4cker

Смежные вопросы