Iphone iOS应用程序显示记录器如何在不使用私有API的情况下记录屏幕?

Iphone iOS应用程序显示记录器如何在不使用私有API的情况下记录屏幕?,iphone,objective-c,ios,Iphone,Objective C,Ios,iOS应用程序声称能够记录iOS设备的屏幕,即使它在后台。鉴于UIGetScreenImage()是私有API,当Apple运行的静态分析检测到应用程序提交时将导致拒绝,他们如何能够在批准的应用程序中进行此记录 此外,该应用程序在录制时会在屏幕顶部显示一个红色条,类似于本机iOS的通话功能 我做iOS开发者已经有一段时间了,我有点困惑于这是怎么做到的,甚至是在应用程序之外将红色条放在顶部的细节。我的印象是,当应用程序在后台运行时,我们基本上无法控制发生了什么,缺少一些关键功能(如音频播放等) 即

iOS应用程序声称能够记录iOS设备的屏幕,即使它在后台。鉴于
UIGetScreenImage()
是私有API,当Apple运行的静态分析检测到应用程序提交时将导致拒绝,他们如何能够在批准的应用程序中进行此记录

此外,该应用程序在录制时会在屏幕顶部显示一个红色条,类似于本机iOS的通话功能

我做iOS开发者已经有一段时间了,我有点困惑于这是怎么做到的,甚至是在应用程序之外将红色条放在顶部的细节。我的印象是,当应用程序在后台运行时,我们基本上无法控制发生了什么,缺少一些关键功能(如音频播放等)


即使开发人员利用私有API/库来实现这一点,他们如何能够以审查期间未检测到的方式实现这一点?如果我遗漏了一些明显的东西,我深表歉意,这些东西是在这里随更高版本的iOS引入的。

@C0deH4cker对IOSurface框架的建议已经足够疯狂了。iSurface为矩形像素缓冲区(屏幕抓取)提供了内核接口(允许应用程序悄悄地从沙箱中滑出),可以使用与框架相关的方法将其转换为CGImage或UIImage

就连苹果公司也表示,该框架存在的理由是:

包含用于在应用程序之间共享图形表面的低级接口


最棒的是,它在iOS中是不合法的。该框架在iOS 2.x中曾被称为CoreSurface,在3.x中很快被悄然弃用,但后来被iOSurface取代。我想,它是私有的,未在iOS参考中列出,这意味着应用商店测试人员没有对它进行测试。有趣。

研究了它,它与IOSurface没有联系。然而,我确实发现它使用了
dlsym
,经过一些反向工程后,我发现:

/System/Library/Frameworks/IOKit.framework/IOKit
IOServiceGetMatchingServices
IOServiceGetMatchingService
IOServiceMatching
IOMasterPort
IOIteratorNext
IORegistryEntryCreateCFProperty
IOObjectRelease
/System/Library/Frameworks/UIKit.framework/UIKit
UIGetScreenImage
/System/Library/PrivateFrameworks/IOMobileFramebuffer.framework/IOMobileFramebuffer
IOMobileFramebufferOpen
IOMobileFramebufferGetLayerDefaultSurface
/System/Library/PrivateFrameworks/IOSurface.framework/IOSurface
IOSurfaceAcceleratorCreate
IOSurfaceAcceleratorTransferSurface
IOSurfaceLock
IOSurfaceUnlock
IOSurfaceGetWidth
IOSurfaceGetHeight
IOSurfaceCreate
IOSurfaceGetBaseAddress
所以,正如您在这里看到的,在每个框架路径之后是它从每个框架动态加载的符号字符串。这是为了避免在链接到私有框架时遇到麻烦。由于它是在运行时加载的,静态分析器无法判断此应用程序是否使用它,从而逃避检测

看起来我最初的怀疑是正确的;它正在使用IOSurface潜入沙箱限制,以获得原始屏幕访问权限。它还使用
UIGetScreenImage
,我认为这是生成视频的第二种方法。它还使用一些IOKit函数和IOMobileFramebuffer函数。应用程序似乎正在从
IOMobileFramebufferGetLayerDefaultSurface
函数中抓取IOSurface。但不太清楚它使用IOKit做什么

总之,这个应用程序使用了一些狡猾的技术来避免被静态分析器检测到:它不会链接到私有框架,而是动态地抓取符号。它使用IOSurface和IOMobileFramebuffer的组合来录制视频,或者使用另一种模式的
UIGetScreenImage
。这是一个棘手的应用程序,将从AppStore中推出,因此如果你想要它,最好现在就开始

更新: 看起来这个应用确实是从AppStore中提取的。如果你足够幸运,在它被拉出来之前抓到一个副本,那就太好了。我知道我很高兴我得到了它

苹果可能通过声明该应用程序使用了私有API来证明其决定的合理性,这可能被视为一个潜在的安全问题(一个在你输入iTunes密码时监视你的应用程序就是一个例子,可怕的想法)。我想知道这是否会改变他们的审查过程,但我们可能永远也不会知道。我感兴趣的一件事是,开发人员还可能使用更多的技巧来隐藏其应用程序的行为,使其不受静态分析的影响。没有一个审查过程是完美的,但他们可以做得很好。即使苹果自动拒绝链接到
dlsym
符号的应用程序,也有一些方法可以用来绕过检测

更新2: 显然,AppStore中现在有这个应用程序的另一个版本。它被称为“Disp Recorder”,与第一个图标完全相同。图形用户界面看起来与原来的图形用户界面几乎相同,只是做了一些小改动。我还没有推翻较新的一个,但我愿意打赌,他们使用相同的技术来隐藏非法行为。我将更新这个答案,一旦我扭转了新的版本。新的一款售价5美元,但如果你曾经想在一个没有故障的设备上安装一个屏幕录制应用程序,你应该在它被拉出之前抓取它

更新3:
看起来我对这个应用程序的工作原理非常正确。GitHub上有一个名为的开源实现。如果你仍然想知道这个应用程序是如何工作的,我建议你去看看。

Magic/promissions/。。。。我怀疑该应用程序正在疯狂地截图并合成它们。那个应用程序会被拉出来,而且很快,无论如何。它是怎么被批准的????取决于行星的排列!月亮的当前相位等等。。。。苹果的审批过程是绝密的,有时看起来是随机的。一个月前被接受的应用程序今天可能会被拒绝,反之亦然。正如rooster117所说:他们可能真的很幸运,我的应用程序在更新时被批准和拒绝。他们可能真的很幸运。我自己下载的,质量很差。感觉像是1fps,我试着用视频录制一个应用程序,但它根本没有录制视频,所以我同意可能是将屏幕截图放在一起制作视频。此外,它的录音声音通过麦克风,这可能是他们如何能够得到批准,并在后台运行