反编译 iPhone 应用程序

逆向工程 艾达 拆卸 反编译 ios 六线谱
2021-06-12 00:36:42

我一直在搜索这个网站,但我没有太多运气。我想反编译一个应用程序以查看它的一部分是如何工作的,并且我已经尝试了多个程序。我试过 Hopper、IDA 和其他一些最终什么也没做的程序。Hopper 和 IDA 都生成汇编代码(我相信它就是这样,我不太熟悉逆向工程之类的东西),它为我提供函数名称并生成不可读的代码。我有包含 Hex-Rays 的 IDA Pro(Hex-Rays 被认为是一个反编译器),但 IDA Pro 中的 Hex-Rays 选项卡正在产生更多不可读的垃圾。

国际开发协会专业版:

国际开发协会专业版

我使用 iFunBox 从我手机的 IPA 中提取应用程序文件。我可能在这里做错了什么,所以如果有人有任何反编译应用程序或将汇编代码转换为人类可读代码的经验,那会非常好和有帮助。

谢谢。

1个回答

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 年的旧文章很好地介绍了正在发生的事情。