如何从 iOS 私有 api 二进制文件中获取标头和函数?如何对应用程序进行逆向工程?

Posted

技术标签:

【中文标题】如何从 iOS 私有 api 二进制文件中获取标头和函数?如何对应用程序进行逆向工程?【英文标题】:How are headers and functions obtained from iOS private api binaries ? How to reverse engineer an app? 【发布时间】:2013-01-08 12:58:01 【问题描述】:

我已经阅读了 class-dump 实用程序用于从 iphone 私有 api 转储标头。但是,它只适用于objective-c 框架。我想知道它对于用 C 编写的框架是如何工作的,例如 - iosurface、IOMobileFramebuffer 等。

问题的第二部分非常笼统。我有一个从 cydia 或 istore 下载的应用程序。我如何在越狱设备上对应用程序进行逆向工程(如果确实需要)。具体来说,我能够找到可执行的二进制文件和 dylib。我能够看到正在使用的框架。但是,如何确定应用程序正在调用框架内的哪些函数?

谢谢。

【问题讨论】:

我认为这不可能 哪一部分 - 逆向工程部分或 C 框架转储?因为存在 IOSurface、IOMobileFramebuffer 框架的标头。所以,人们已经做到了。 【参考方案1】:

我建议将这个问题分解为两个问题:

1) “我想知道它在用 C 语言编写的框架中是如何工作的,例如 - IOSurface、IOMobileFramebuffer 等。”

我也有同样的问题: Getting signatures of private API methods for iOS

答案是

   a) 尝试用谷歌搜索 C 方法,看看是否有人反汇编并找到方法签名。

   b) 如果以前没有人这样做,你可以成为第一个这样做的人

2) “我如何确定应用程序正在调用框架内的哪些函数?”

在框架/库中有两种类型的函数引用:

编译时参考

你使用了一些反汇编器,它会列出所有编译时对框架/dylibs 的引用。

运行时参考

当有人使用dlopendlsymNSBundle 来使用某些功能时,这些是参考。 您将不得不反汇编并通过反汇编代码查找/grep 以找到它们的使用位置。将有带有所使用方法名称的字符串。

【讨论】:

感谢您的回复。我在我想要逆向工程的应用程序的 dylib 上使用了 otool。然而,生成的汇编代码并没有证明有多大帮助。我找不到函数签名。但是,在苹果框架的情况下,我可以获得函数签名。但随后获得论点就成了一项艰巨的工作。 我建议您尝试 Hopper Disassmebler。它相当便宜,并且有一些有趣的功能(例如,它试图将 ASM 转换为 C 代码)。这是尝试学习方法参数的一个很好的开始。

以上是关于如何从 iOS 私有 api 二进制文件中获取标头和函数?如何对应用程序进行逆向工程?的主要内容,如果未能解决你的问题,请参考以下文章

使用 libarchive 拒绝 Apple 私有 API [关闭]

怎么获取iOS的私有API

如何从python中的URL获取标头的值? [复制]

如何使用标头、有效负载和正文制作 httpclient 获取请求?角度 API

从 C# 调用带有 C++ 标头的 dll

使用 Swagger 描述 API 的标头参数