[求指导]小僧论文 关于iOS应用私有API扫描

背景:
现在开发APP会用到很多第三方库,这些库是否有调用私有API不好断定,万一有调用私有API就会导致应用在提交时被拒绝。
像之前的Three20因为很多API与私有API重名,很多基于该框架的应用被拒,之后也都已经修复。如果我们自己定义的函数名
与私有API重名,也会有被拒的危险,基于此想要做这样的私有API扫描工具。

已经做过的工作:

  1. 通过扫描官方文档数据库,及各FrameWorks下的头文件构建了私有API数据库
  2. 通过class-dump(nm)得到应用中自己定义的函数等
  3. 把自己定义的函数与已经构建好的私有API数据库比较,得到潜在的可能是私有的API列表(有些看似很正常的函数也不幸“落马”),结果还需要再优化

对于要写论文,只是把上述过程描述一遍是远远不够多的,论文内容显得不够充实。切入点很小,不容易铺开。
请大家给予指点还可以添加哪些相关的内容呢?目前想到的有以下几点:

  1. Mach-O分析
  2. Runtime机制分析

其他的与私有API扫描关系比较密切的点有什么呢?
或是有什么更好的切入点来做这件事情呢?

请大大们指点。谢谢。

建议你按照功能分类:比如:网络:3G、Wifi;接打电话;收发短信;读写数据库;开启相机;照相、录像;文件读写和创建;录音功能;创建进程、线程,这这样写,切入点就多了。:lol:

也就是说,你想做一个私有API的扫描器?你的扫描对象是源码,还是编译后的二进制文件?我不知道Apple是怎么判断的,我想的情况无非就是建立公开API和私有API数据库,拿一个API在私有API数据库里扫一遍,找到了就是私有API,找不到则在公开API数据库里扫一遍,找到了就是公开API,找不到就是自定义API。如果自定义API跟私有API重名而被Apple拒掉了,那我觉得这种函数即使落马,你的答辩老师也是可以理解的。
至于你想到的MachO分析,我觉得就是把其中的符号信息提取出来作为待扫描的API。runtime的话应该就是hook几个可疑函数,然后观察它们在调用时的参数是不是私有API。可以参考这篇帖子这篇帖子。这个东西涉及的理论可大可小,我觉得你可以围绕MachO的分析过程和runtime机制在私有API扫描中的运用,来详细写写这些理论

呵呵,你太逗了:smile:

公有的API数据库已经有了,私有API的数据库我也已经建好了,目前是针对编译后二进制文件根据Mach-O中的符号表抽出函数进行比较的。

”runtime的话应该就是hook几个可疑函数,然后观察它们在调用时的参数是不是私有API“ 对于这个我不是很理解,我想把这个工具做的尽量通用,而不是针对特定的APP,因此hook可疑函数这个不太现实。

对runtime机制中的@selector()这种方法的调用,所选择的函数位于MachO的什么位置呢?

我对MachO格式不熟,但函数参数应该位于text段。我的意思就是hook这些runtime函数,如performSelector:,dlsym等等,然后获取它的参数,就是实际得到调用的函数,判断这个函数是不是私有的就可以了