mrmign
(mrmign)
1
背景:
现在开发APP会用到很多第三方库,这些库是否有调用私有API不好断定,万一有调用私有API就会导致应用在提交时被拒绝。
像之前的Three20因为很多API与私有API重名,很多基于该框架的应用被拒,之后也都已经修复。如果我们自己定义的函数名
与私有API重名,也会有被拒的危险,基于此想要做这样的私有API扫描工具。
已经做过的工作:
- 通过扫描官方文档数据库,及各FrameWorks下的头文件构建了私有API数据库
- 通过class-dump(nm)得到应用中自己定义的函数等
- 把自己定义的函数与已经构建好的私有API数据库比较,得到潜在的可能是私有的API列表(有些看似很正常的函数也不幸“落马”),结果还需要再优化
对于要写论文,只是把上述过程描述一遍是远远不够多的,论文内容显得不够充实。切入点很小,不容易铺开。
请大家给予指点还可以添加哪些相关的内容呢?目前想到的有以下几点:
- Mach-O分析
- 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扫描中的运用,来详细写写这些理论
mrmign
(mrmign)
5
公有的API数据库已经有了,私有API的数据库我也已经建好了,目前是针对编译后二进制文件根据Mach-O中的符号表抽出函数进行比较的。
”runtime的话应该就是hook几个可疑函数,然后观察它们在调用时的参数是不是私有API“ 对于这个我不是很理解,我想把这个工具做的尽量通用,而不是针对特定的APP,因此hook可疑函数这个不太现实。
对runtime机制中的@selector()这种方法的调用,所选择的函数位于MachO的什么位置呢?
我对MachO格式不熟,但函数参数应该位于text段。我的意思就是hook这些runtime函数,如performSelector:,dlsym等等,然后获取它的参数,就是实际得到调用的函数,判断这个函数是不是私有的就可以了