crawl app from 25pp and App Store
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
Android
iOS
.gitignore
LICENSE
README.md
iOS-spider.png

README.md

另一篇介绍文章

iOS爬虫

iOS的应用爬虫,是一个很大的难点, 因为iOS对于隐私的限制,所以我们只能通过URL Scheme(私有方法肯定不予考虑)来判断应用是否安装, 而获取其他应用设定的URL Scheme就必须下载并解析相应的应用。

整体来说,iOS上判断应用的安装情况,是困难且不够准确的 :

  1. 获取URL Scheme困难, 必须要下载ipa并解压分析,才能知道URL Scheme
  2. 必须将要判断的URL Scheme以配置的形式打包进APP中供苹果审核, 也就决定了我们不能动态去更新。
  3. URL Scheme不是唯一的,且是可变的。 所以一些应用会更新URL Scheme的配置, 一些应用会伪造URL Scheme的配置,一些应用没有URL Scheme的配置, 这都会影响判断的准确性。

所以,iOS应用判断是困难且不准确的。

而下载ipa也是比较困难的一件事,AppStore的请求都进行了加密,通过逆向工程来分析AppStore购买应用并下载应用的请求流程也较为复杂,难度较高。(水平有限,逆向能力不够,汇编代码不熟。 一般越狱平台都应该能逆向其请求逻辑,所以我们选择从越狱平台去下载应用)。

iOS爬虫实现说明

当前iOS爬虫,采取python语言做预处理, 采用flask做一个控制中枢, 编写tweak使用越狱机做app爬虫节点。 总体来说,还算是一个分布式的爬虫系统。

整个爬虫流程分为4个步骤 :

  • 预处理, 先尝试在越狱平台 pp助手上爬取大部分的应用。
  • 服务器, 控制中枢,向爬虫节点分发任务,以及汇总数据。
  • tweak爬虫, 模拟操作,以自动下载APP,并上诉数据给服务器。
  • 整理 , 整理收集到的数据,进行去重检测。

预处理

预处理,是先尝试在越狱平台,如pp助手, 爬取大部分的数据。

越狱平台应该拥有技术能力去逆向 appstore,以批量下载应用。 但是我们没有这个技术能力, 只能从这些平台上爬数据。

这部分比较简单,主要在pre-process.py 这个文件中,先通过苹果的一些接口以获取APP的基本信息, 然后通过pp助手网站,尝试进行下载。 对于一些应用,pp助手上没有提供,所以会有接下来,我们自己的方式来爬取appstore.

在一部分的开发经验,就是不要使用python的相关接口去下载应用,因为应用是大文件,很容易下载失败,而直接使用wget等工具去下载,这些工具拥有自动重试的功能,会方便可靠很多。

服务器

服务器, 这里将pp助手中无法下载的应用,进行任务分发,以在越狱机上进行下载。

flask是一个简单好用的python服务器框架。

改部分主要在server.py这个文件中。

tweak

这个部分就需要一定的iOS逆向工程的知识,需要了解tweak的编写。 简单来说,iOS的逆向工程,通过分析APP,以编写tweak,注入到目标APP中,以篡改APP的逻辑或者添加新的功能。 而我们这里做的就是对Appstore这个系统APP进行逆向工程,以编写一个tweak来批量下载应用。(这里由于水平有限,没有尝试逆向工程APPStore,以分析出其请求逻辑,以及加密策略,以脱离iOS编写批量爬虫)。

tweak位于./iOS/tweak文件夹下。该部分代码可能不能直接使用,需要下载applist库和PTFakeTouch。(如果遇到问题,可以先使用文件夹下已经打好的包)

tweak注入到AppStoreSpringBoard这2个应用中。

SpringBoard部分是辅助功能,只是接受通知,以卸载安装好的应用。

AppStore部分是主要功能, 主要就是跟服务器交互,以获取下载任务,然后模拟操作以下载应用,并上传所需数据回服务器。

整理

最终所有数据汇总到excel表格中,但是这里需要去重。 因为URL Scheme可能出现重复,可能某些应用没有设置, 所以在 summary.py 文件中,进行汇总与去重操作。

Android爬虫

Android爬虫较为简单,主要的包名一般都会明文记录在应用市场的页面内。 在Android目录下,有一部分简单的安卓爬虫代码。