我想知道IPA文件的执行流程

时间:2012-06-26 05:31:10

标签: iphone executable dylib ipa

我有一个IPA文件,其中包含info.plist,可执行文件,package.info,供应证书,动态库,代码资源等。我想知道首先执行哪个文件以及执行发生的顺序。我想在IPA中添加一些内容,为此我需要了解现有的IPA如何运作。

提前致谢。

1 个答案:

答案 0 :(得分:9)

IPA文件只是应用程序的zip文件。它包含二进制本身,Info.plist,协同处理文件,图标和其他资源。

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

  • .app文件夹,其中包含应用程序的所有资源和可执行文件。
  • 用于存储任何类型文件的文档文件夹(读/写privelages)。
  • 一个Library文件夹,用于使用NSUserDefaults(Library / Preferences / .plist)以plist格式缓存数据和存储键/值数据。
  • 用于存储临时数据的tmp文件夹。当应用未运行时,将删除此文件夹的内容。

然后删除IPA文件,从而通过删除应用程序存档来释放空间。

当加载SpringBoard(主屏幕应用程序)时,它会读取每个应用程序的Info.plist并对其进行缓存。从这里,它获取显示名称(图标下的名称),图标本身,以及可执行文件的名称等。

当您单击应用程序的图标时,SpringBoard会将应用程序的Default.png显示为启动画面,同时将可执行文件加载到内存中。它在此过程中被解密,因为每个AppStore应用程序在Apple签名时都会被加密。只要可执行文件加载到内存中,dyld(动态链接器)就会加载它所链接的任何框架或库(例如UIKit,libobjc,libSystem等)。应用不能包含任何自己的库;可执行文件必须是独立的。然后,调用app的main()函数,运行应用程序的代码。

你应该知道一些事情:

  1. 修改应用程序可执行文件中的单个字节将使代码签名无效,内核将拒绝运行该应用程序。

  2. 除非您在越狱设备上运行,否则即使在运行时也无法编辑或修改可执行文件。如果不以某种方式运行unsinged代码(二进制修改或运行时dylib注入),则无法更改应用程序运行的方式。

  3. IPA只能由您的帐户安装。您无法下载IPA并希望它能够运行。代码签名无效。

  4. 修改应用程序的运行方式并非易事。有些应用程序将所有配置设置存储在未经验证身份的plist中,但这些应用程序很少见。大多数应用程序将使用散列算法(例如md5或sha1)验证配置或保存文件,这使得在不让应用程序拒绝它们的情况下编辑这些文件变得更加困难。许多其他应用程序根本不使用plist或其他易于编辑的文件类型。它们将使用鲜为人知或专有的格式,或者不使用配置文件。

  5. 了解在关注声音之前你会遇到什么。我并不劝你不要尝试;我只是想帮助你理解为了解决这个问题必须克服的障碍。