iOS(越狱)通过 SBAppContextHostManager 显示应用程序

Posted

技术标签:

【中文标题】iOS(越狱)通过 SBAppContextHostManager 显示应用程序【英文标题】:iOS (jailbroken) Displaying application via SBAppContextHostManager 【发布时间】:2013-08-04 21:17:22 【问题描述】:

基本上,我正在尝试使用 SpringBoard 的私有 API SBAppContextHostManager 显示应用程序。到目前为止,我有这个代码:

SBAppContextHostManager *app = [[objc_getClass("SBAppContextHostManager") alloc] init];

[app setAppBundleID:@"com.apple.springboard"]; // just as an example

[app enableHostingForRequester:@"uniqueID" priority:1];

[app orderRequesterFront:@"uniqueID"];

SBHostWrapperView *view = [app hostViewForRequester:@"uniqueID"];

然后我打电话给

UIGraphicsBeginImageContextWithOptions([UIScreen mainScreen].bounds.size, YES, [UIScreen mainScreen].scale);
CGContextRef c = UIGraphicsGetCurrentContext();
CGContextSetAllowsAntialiasing(c, YES);
[view.layer renderInContext:c];
UIImage *img = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

获取包含应用程序的视图的 UIImage。但是,这个 UIImage 的输出是完全空白的,这导致我认为我对 SBAppContextManager 的调用不正确,从而导致空白 SBHostWrapperView。因此,我应该如何以这种方式显示应用程序?

【问题讨论】:

哦,顺便说一句,我发现 SO 确实不是向 MobileSubstrate 提问的最佳场所。我只是碰巧在这里。我们大多数越狱开发者都在 irc.saurik.com 的 #theos 中闲逛。在那里提问很可能比在这里提问得到更好的回答。 谢谢,刚刚又问了一个问题;老实说,根本不知道频道存在! 【参考方案1】:

如果您尝试预览应用程序,渲染 SBHostWrapperView 将不起作用。你看,SBHostWrapperViews 不会复制应用程序的渲染输出,它只是在屏幕上提供一个不同的位置供应用程序渲染。

相反,您可以在 SBUIController 类中使用 - (SBFullscreenZoomView*)systemGestureSnapshotWithiosurfaceSnapshotOfApp:(SBApplication*)arg1 includeStatusBar:(BOOL)arg2;

该方法返回一个 SBFullscreenZoomView,它是 UIView 的子类,并带有 arg1 中提供的应用程序快照。您可以使用您提供的第二个 sn-p 代码来获取 SBFullscreenZoomView 的 UIImage。这应该可以满足您的要求,为您提供仅特定应用程序的屏幕截图。

【讨论】:

干杯,效果很好,除了我的代码看起来像在 SD 设备上一样轻微像素化后生成的图像。关于为什么会这样的任何想法? 这很奇怪。你在视网膜设备上吗?另外,您是否对图像进行了任何转换?试试抗锯齿,可能吗? 是的,它是视网膜,图像上没有任何变换;我会尝试抗锯齿,然后调整比例 排序后发现我使用了错误的缩放比例;用正确的代码更新问题。

以上是关于iOS(越狱)通过 SBAppContextHostManager 显示应用程序的主要内容,如果未能解决你的问题,请参考以下文章

ios14越狱到最高版本后出现这些漏洞

iOS越狱开发

iOS越狱开发

22-越狱 & OpenSSH

Nativescript - 在 iOS 上检测越狱和动态检测

iOS逆向工具之Theos(MacOS)介绍