【问题标题】:Cannot bind() a socket inside Apple Calendar (dylib injection)无法在 Apple 日历中绑定()套接字(dylib 注入)
【发布时间】:2015-01-23 10:23:34
【问题描述】:

我正在尝试在Reveal 上检查 iOS 8.1 的 Apple 日历 (MobileCal.app),关注this guide

为此,我注入了libReveal.dylib,它启动了自己的 HTTP 服务器,OS X Reveal 应用程序连接到该服务器。

这种技术适用于大多数 iOS 系统应用程序(电话、便笺、提醒等),但日历中的某些东西阻止了 HTTP 服务器的设置。

运行日历时,libReveal.dylib 已正确注入,但随后我在日志中看到:

MobileCal[5110]:错误:启动 HTTP 服务器时出错:错误域=NSPOSIXErrorDomain 代码=1“不允许操作”UserInfo=0x17426aa40 {NSLocalizedDescription=不允许操作,NSLocalizedFailureReason=bind() 函数中的错误}

MobileCal[5110]:错误:显示服务器无法启动,错误:错误域=NSPOSIXErrorDomain 代码=1“不允许操作”UserInfo=0x17426aa40 {NSLocalizedDescription=不允许操作,NSLocalizedFailureReason=bind() 函数中的错误}

关于什么可以阻止在日历中设置 HTTP 服务器的任何想法?我注意到MobileCal.app 包有一个Entitlements.plist 文件,而大多数其他系统应用程序没有。这个问题可能与权利文件有关吗?


我也是contacted Reveal support,他们反应灵敏,但无法确定问题的原因。使用 Cydia 中的 RevealLoader 会产生相同的结果。

【问题讨论】:

    标签: ios objective-c reverse-engineering jailbreak dylib


    【解决方案1】:

    Entitlements.plist 是对的。问题很简单 - MobileCal.app 正在使用自定义沙箱配置文件。

    iOS 中实际上有很多沙盒配置文件,而不仅仅是 AppStore 应用程序。许多 iOS 系统组件都使用它们。要知道您需要查看哪个应用程序的权利。更具体地说,seatbelt-profiles 键。

    MobileCal.app 使用 MobileCal 个人资料签名。这正是您不能使用bind() 的原因。我怀疑所有网络都被阻止了。 Camera.app 也是如此。它使用MobileSlideShow 配置文件,该配置文件也阻止所有网络。

    对于这个问题,我能想到并实际使用了两种解决方案:

    1. 编写一个守护进程。守护进程将完成沙盒配置文件阻止的所有工作。应用程序和守护进程将通过一些 IPC API(如通知或 mach 端口)进行通信。主要问题 - IPC API 也可能被沙箱配置文件阻止。例如,Camera.app 沙盒会阻止所有可以发送任意数据的 IPC API。只有无法发送任意数据的达尔文通知有效。有办法解决这个问题,但会很丑。

    2. 退出应用并删除沙盒配置文件。这样,应用程序将可以访问所有内容,并且您可以在注入的 dylib 中完成所有工作。这是我现在使用的,效果很好。这也是一种 hack,但它不必处理 IPC 及其复杂性,从而显着改进了您的代码。对我来说值得。

    大体上就是这样。对于您的情况,我认为只有第二种解决方案可行。

    当然,仅仅编辑Entitlements.plist 是不够的。实际权利在应用程序的二进制文件中。您可以在您的 mac 或 iDevice 本身上辞职。在 Mac 上,您可以选择 codesignldid。在 iDevice 上,您唯一的选择是 ldid。

    让我们看看如何使用 ldid 解决问题。首先,您使用

    转储权利
    ldid -e MobileCal > entitlements.xml
    

    然后您编辑转储的权利并使用

    退出应用程序二进制文件
    ldid -Sentitlements.xml MobileCal
    

    (是的,-S 和授权文件之间没有空格)。

    就是这样。

    【讨论】:

    • 感谢详细的解释!删除沙盒配置文件后,如何退出应用程序?我认为仅删除设备上@9​​87654337@ 捆绑包上的seatbelt-profiles 键是不够的。
    • 更新了答案。抱歉,忘记解释实际的解决方案了。
    • 像魅力一样工作。非常感谢,先生!
    猜你喜欢
    • 2021-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-25
    • 2016-04-20
    相关资源
    最近更新 更多