如何从 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 的引用。
运行时参考当有人使用dlopen
、dlsym
或NSBundle
来使用某些功能时,这些是参考。
您将不得不反汇编并通过反汇编代码查找/grep 以找到它们的使用位置。将有带有所使用方法名称的字符串。
【讨论】:
感谢您的回复。我在我想要逆向工程的应用程序的 dylib 上使用了 otool。然而,生成的汇编代码并没有证明有多大帮助。我找不到函数签名。但是,在苹果框架的情况下,我可以获得函数签名。但随后获得论点就成了一项艰巨的工作。 我建议您尝试 Hopper Disassmebler。它相当便宜,并且有一些有趣的功能(例如,它试图将 ASM 转换为 C 代码)。这是尝试学习方法参数的一个很好的开始。以上是关于如何从 iOS 私有 api 二进制文件中获取标头和函数?如何对应用程序进行逆向工程?的主要内容,如果未能解决你的问题,请参考以下文章
使用 libarchive 拒绝 Apple 私有 API [关闭]