iOS 应用程序 - 查找(未知)私有 api 调用

Posted

技术标签:

【中文标题】iOS 应用程序 - 查找(未知)私有 api 调用【英文标题】:iOS app - find (unknown) private api calls 【发布时间】:2014-01-23 20:14:26 【问题描述】:

我们在 iTunes 上有一个应用程序,它在 iTunes 中收到一条警告,指出它使用了未记录的 api 调用:

reateScreeniosurface
IOSurfaceAcceleratorCreate
IOSurfaceAcceleratorTransferSurface
IOServiceGetMatchingService
IOMobileFramebufferOpen
IOMobileFramebufferGetLayerDefaultSurface
kIOMasterPortDefault
IOServiceMatching
IOObjectRelease
IOServiceClose

这些都来自IOSurface api,它适用于 Mac OSX,但是,我在我们的应用程序中找不到任何这些 cal。我的猜测是我们正在使用的第三方框架之一就是问题所在。 该应用有 3 个框架可以使用这些 API:Aviary、Sincerely 和 Pritnzel。

无论如何,我的问题是,我怎样才能找到这些 api 的真正使用位置(以及是否)? 我在应用程序二进制文件以及 3 个框架(以及应用程序使用的任何其他第三方框架)上使用了 nm -uotool -L,但没有任何运气。

非常感谢

【问题讨论】:

最简单的方法是使用文本编辑器打开二进制文件并搜索IOSurface.framework 【参考方案1】:

我相信您甚至不必为此使用 nm 或工具。只需使用 grep 在 frameworks 目录中搜索提及这些 API。

但是,使用 nm 和 tool 找不到这很奇怪,尤其是在您的二进制文件中。

顺便说一句。也尝试用 grep 搜索“IOSurface”。它是一个定义这些方法的框架。

【讨论】:

谢谢。我设法通过在文本编辑器中搜索构建文件,在旧版本中找到它。 顺便说一句,这些方法被“Lookback”框架使用,它也留在了发布版本中。

以上是关于iOS 应用程序 - 查找(未知)私有 api 调用的主要内容,如果未能解决你的问题,请参考以下文章

怎么获取iOS的私有API

iOS 中不使用私有 API 的例外情况?

iOS 私有 API 调用将应用程序带到前台

如何使用私有 API 阻止 iOS 应用程序中的来电?

私有 API 到底是啥,如果使用了一个 iOS 应用程序,为啥 Apple 会拒绝它?

iOS 应用提交:该应用正在使用私有 API:_tableView