苹果私有 API 检查工具开源项目

2015-11-17 19:05:11 +08:00
 50vip

iOS 私有 API 检查工具

iOS-private-api-checker 苹果 iOS 私有 API 检查工具 Developer tool to scan iOS apps for private API usage before submitting to Apple https://github.com/hustcc/iOS-private-api-checker
私有 API 检查的原因在于:苹果在 app 提审的时候,会检查 app 使用私有 api 的情况,对于使用了私有 api 的 app ,不予通过,这个工具的目地就是在提审之前检查一下,提高通过率。

一、功能

目前功能主要有以下:

  1. 从 ipa 中提取一些基本信息,例如 app 名字, sdk 版本,包名等,可以辅助 QA 日常工作。
  2. ipa 架构检查,可以看出是否支持 64 位架构,可以辅助 AppStore 提审。
  3. ipa 使用私有 api 情况,可以辅助 AppStore 提审。
  4. ipa info 和 provision 配置项的检查,获得授权设备 udid (参考项目 iOS-checkIPA )。
  5. 获取签名信息。
  6. 批量检查 APP ,并生成 excel 报告,截图见下方。

二、如何使用

1. 构建私有 api 库

2. 检查 ipa 私有 api

运行方式有二,建议第二种 web 方式:

  1. 修改 iOS_private.py main 方法中的 ipa 路径,运行即可。

  2. 使用 Web 上传运行的方式,运行 python run_web.py (请先配置 flask 运行环境),然后浏览器输入 127.0.0.1:9527 将 ipa 拖入上传框等待即可看到检查结果。

  3. 使用 batch_check 方法批量运行目录中的 ipa ,并生成 excel 报告。

三、 Screenshot

四、参考项目

五、 Note

  1. 私有的 api = (class-dump Framework 下的库生成的头文件中的 api - (Framework 下的头文件里的 api = 有文档的 api + 没有文档的 api)) + PrivateFramework 下的 api
  2. 私有 api 在公开的 Framework 及私有的 PrivateFramework 都有。
  3. 请暂时暂 mac 上运行, linux 上暂时没有找到合适的、代替 otool 的工具,求推荐^^!
5758 次点击
所在节点    Python
22 条回复
levyleo
2015-11-17 19:19:36 +08:00
markmark
evakiss
2015-11-17 19:20:12 +08:00
楼主,头像是你吗
50vip
2015-11-17 19:23:52 +08:00
@evakiss 是啊是啊,相信吗?
Elethom
2015-11-17 19:26:31 +08:00
Application Loader 不是會檢查麼。
evakiss
2015-11-17 19:30:45 +08:00
@50vip 当然相信咯,而且楼主还玩贴吧啊 http://tieba.baidu.com/p/1603683320
50vip
2015-11-17 19:34:21 +08:00
@evakiss 哈哈~
typcn
2015-11-17 20:10:14 +08:00
在上传二进制文件的时候,提交审核之前,就会检查私有 API 的使用情况,在提交审核之后不会检查的。

而且想要绕过是非常简单的。。。通过云端的配置文件控制开关,从服务器上动态下载二进制文件并加载执行
mzer0
2015-11-17 20:16:05 +08:00
@typcn 苹果不是做了限制吗
ileenhow
2015-11-17 20:41:31 +08:00
楼主,头像真的是你吗
secondwtq
2015-11-17 21:29:40 +08:00
@typcn iOS App 允许执行动态生成 /获取的代码?
ddqp
2015-11-17 21:39:56 +08:00
就想知道头像是谁,老司机??
palxex
2015-11-17 22:03:32 +08:00
@secondwtq 不允许,但它得能检查出来啊。。。它要是能检查出来 surge 都别想上线。
50vip
2015-11-18 09:21:42 +08:00
@typcn 配置开关的问题一旦查出来,该帐号下面的所有 app 估计都有有影响,我们现在都不做开关了~
xuzhongzhou
2015-11-18 10:04:46 +08:00
@typcn “从服务器上动态下载二进制文件并加载执行”这个是不可行的, App Store 重签名后,你自己的二进制没办法和 App 的签名一致,跑不起来。
typcn
2015-11-18 10:08:26 +08:00
@xuzhongzhou dylib , bundle ,甚至直接把 binary 从服务器读取下来并在内存中执行,不写入文件都是可以的


@50vip 然而 qq 微信支付婊淘宝都有这样的开关....也没见管过
50vip
2015-11-18 10:25:11 +08:00
@typcn appstore 本身很多条款都是模拟两可,很抽象的,比如:开关不行,但是打 patch 却是可以的,实际上两者并没有什么鸟区别。
至于哪些公司可以,哪些公司不可以,看和编辑的眼缘了~~
xuzhongzhou
2015-11-18 10:47:09 +08:00
@typcn 哦,好吧,我果然还是太实诚了,说的只是 iOS 8 新增的那个动态库能否运行的时候下载下来加载了跑。
zsj950618
2015-11-18 21:46:07 +08:00
头像。。。真的是真的吗。。。。
V 站的头像规则。。 https://www.v2ex.com/t/62637
hqs123
2015-11-19 08:11:15 +08:00
刚接触苹果开发,学习下
MrMign
2015-11-19 12:12:52 +08:00
参考项目的一个链接没有→_→

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/236858

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX