iOS 应用程序受 Apple 的 DRM 系统保护。该系统加密应用程序的某些段。据我所知,该加密的密钥对于每个设备或每个设备平台都是唯一的。我在 FairPlay 上花费不多,所以我不知道加密密钥是什么,但我怀疑它是GID 密钥或UID 密钥。我怀疑是后者。
为了解密应用程序,您需要一个越狱设备,以便在其上运行您自己的未签名代码。请注意,越狱您的设备可能会使您的 Apple 保修失效。通常有三种常见的应用程序明文转储方法,它们都依赖于应用程序加载到内存时必须由加载程序解密的事实。其中两个要求您安装 OpenSSH 之类的东西,它可以通过 Cydia 获得。你可以使用任何给你一个 shell 并且可以远程访问的东西,但是 SSH 很好,很标准,还提供了一种拉取和推送二进制文件的好方法。
请注意,所有设备上的默认 root 密码都是“alpine”,因此请务必更改它。我的建议是,除非您真的知道自己在做什么,否则请将您的研究设备仅放在本地网络上,不要将其暴露在 Internet 上。
最简单的方法是使用用于破解应用程序的应用程序,例如 Crackulous 或 Clutch,它们会为您转储该应用程序的解密版本。这种方法简单但不可靠且无趣,因为它可能教给你的东西最少。
第二种方法是使用调试器并在加载之后或之前将其附加到应用程序。然后中断调试器并将应用程序的代码部分转储到闪存中。然后将此转储粘贴回加密应用程序,覆盖加密部分。您可能还想更新任何加密标志。这种方法会教你更多关于正在发生的事情。
在我看来,第三种方法是目前最好的。它包含一个由 Stefan Esser 编写的名为DumpDecrypted的动态库. 这个库被添加为一个库,它被加载器强制添加到所有创建的进程中。在加载时,库会转储二进制文件的解密版本以供您闪存。此方法要求您具有为 iOS 构建库的能力,这通常意味着您需要 SDK。它只解密由加载器加载的 FAT 二进制文件的一部分,因此您可能会得到一个或多个保持加密的代码部分,但它们都应该为不同的平台执行相同的功能。这种方法非常可靠,因为应用程序很难发现额外的库,除非它专门寻找它。您可以通过重命名库等来解决这个问题。
在设备上解密应用程序后,您可以使用例如 SCP 或 SFTP 通过 SSH 服务器将其拉回。然后你可以开始使用像 Hex-Rays ARM 反编译器或 Hopper 这样的东西来反编译它。
这是一篇关于使用 iOS 应用程序的简短论文。我认为Pedram Amini 2009 年的旧文章很好地介绍了正在发生的事情。