4

我有一个 IPA 文件,其中包含 info.plist、可执行文件、package.info、配置证书、动态库、代码资源等。我想知道首先执行哪个文件以及执行的顺序。我想向 IPA 添加一些内容,为此我需要了解现有 IPA 的工作原理。

提前致谢。

4

1 回答 1

9

IPA 文件只是应用程序的 zip 文件。它包含二进制文件本身、Info.plist、代码设计文件、图标和其他资源。

当您从 AppStore 下载应用程序时,IPA 文件与元文件一起下载到 /var/mobile/Media/Downloads。完全下载后,将运行安装守护程序 (installd),它将 IPA 提取到 /var/mobile/Applications/<UUID here>/。在这个目录中有:

  • .app 文件夹,其中包含应用程序的所有资源和可执行文件。
  • 用于存储任何类型文件(读/写权限)的 Documents 文件夹。
  • 一个库文件夹,用于使用 NSUserDefaults (Library/Preferences/.plist) 以 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)验证配置或保存文件,这使得在不让应用程序拒绝它们的情况下编辑这些文件变得更加困难。许多其他应用程序根本不使用 plist 或其他易于编辑的文件类型。他们要么使用鲜为人知的或专有的格式,要么不使用配置文件。

了解您正在进入的领域之前,先了解一下。我并不是在劝阻你尝试;我只是想帮助您了解必须克服的障碍才能实现这一目标。

于 2012-06-26T06:03:45.953 回答