无法绑定()Apple Calendar中的套接字(dylib注入)

时间:2014-11-25 12:06:33

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

我正试图在Reveal之后的this guide上检查iOS 8.1的 Apple日历MobileCal.app)。

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

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

运行日历时,libReveal.dylib已正确注入,但我在日志中看到了这一点:

  

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

     

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

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


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

1 个答案:

答案 0 :(得分:6)

你对Entitlements.plist是正确的。问题非常简单 - MobileCal.app正在使用自定义沙盒配置文件。

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

MobileCal.app已使用MobileCal个人资料签名。这正是您无法使用bind()的原因。我怀疑所有网络都被阻止了。关于Camera.app也可以这么说。它使用MobileSlideShow配置文件,它也阻止所有网络。

我能想到并且实际上使用了两个解决方案来解决这个问题:

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

  2. 在删除沙盒配置文件的情况下重新启动应用。这样,应用程序将可以访问所有内容,您可以在注入的dylib中完成所有工作。这就是我现在使用的,它运作良好。这也是一种破解,但它不需要处理IPC及其复杂性,从而显着改善了代码。对我来说值得。

  3. 这一般都是。对于我的情况,我认为只有第二种解决方案才有效。

    对于cource来说,仅仅编辑Entitlements.plist是不够的。实际权利在应用程序的二进制文件中。您可以在Mac或iDevice上重新签名。在Mac上,您可以选择codesignldid。在iDevice上,您唯一的选择是ldid。

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

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

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

    重新签名应用程序二进制文件
    ldid -Sentitlements.xml MobileCal
    

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

    就是这样。