我一直在 iPhone 上尝试/调试/反汇编二进制文件。
第一个障碍是二进制文件是加密的,反汇编器无法读取它们。这可以通过从 gdb 转储解密的文件内容来解决。
我的问题是关于所有 MACH-O 可执行文件的二进制文件解密(在程序启动时即时完成),这些可执行文件的 LC_ENCRYPTION_INFO 部分中的 crypto_id 设置为 1。
感谢您的指点!
从 AppStore 下载的应用程序中的主要二进制文件的 TEXT 部分按照加载命令所示进行加密
LC_ENCRYTPION_INFO{_64}
。
此加密不是由开发人员执行的,加密是在您下载应用程序时发生的。每个应用程序都会使用登录期间创建的公钥/私钥对为您在该设备上的 AppStore 帐户进行加密。
二进制文件在加载时由内核解密,因此本质上,当您想要解密二进制文件时,您可以在加载后将其从内存中转储。这意味着您需要“参与其中”,这需要越狱设备。如今,如果您正在进行研究,您会使用像 Frida 这样的工具将自己插入到流程中,许多 python 脚本 和纯 javascript 工具正是这样做的。
Stefan Esser 的项目dumpdecrypted(来自 2011 年)用 C 语言简洁地说明了二进制图像解密步骤。
无论如何,从设备上获取应用程序的解密版本都会破坏应用程序,因为它不再有效签名,并且需要重新签名整个应用程序包。要重新签署应用程序需要 Apple 开发者帐户。
只要越狱存在,所有 iOS 应用程序都容易受到重新打包攻击、静态和动态分析。