逆向过程
- 使用抓包工具charles或者构建frida抓取隐藏的https网络请求,截取curl 请求;将对应curl请求转换为具体的python requests请求。查看参数在不删减的情况下,请求结果是否正常返回。如正常返回,删减参数,查看对应的返回结果。分析等到具体的可变参数。一般情况下可变参数定义都会带有sig等字段。
- 根据需要爬取的App,使用root的设备、xposed、frida、jadx-gui、unidbg等工具分析App的加密点。最后使用hook工具hook相关的加密点,查看参数送入和返回的情况。
- 构建hook脚本,将hook脚本部署到web server中;验证其破解的流程是否正确。
基于App的爬虫框架
- 使用逆向分析得到的逻辑,构建App爬虫脚本。
- 或者构建apk app api,构建设备签名的破解等。
- 设备池构建:如果需要并发的爬取,需要构建对应的设备队列。实现数据请求的并发处理。
- 任务队列构建:使用redis构建任务队列,任务使用redis可缓存、可还原,可记录错误的用户信息。
- 任务失败队列:需要记录任务失败的用户ID;当所有的任务爬取完成,重新爬取失败的任务。
- log日志:log日志的存储,分文件的存储。
- 数据保存:一个是返回的数据以mongo形式保存,便于数据的映射错误的纠错;一份是抽取的想要的结构化数据以mysql的形式存储。
- 爬取数据分析:构建前端页面分析得到的数据以及mongo等数据。
- 自动化运行脚本:在App爬虫的构建过程中,发现大量的获取数据时,存在着app的风控;为了规避这些风控,采用了appium构建自动化点击脚本,在app在点击的过程中使得app的log回传,避免出发app的风控等。
设备池子的构建
- 可通过华为云或者实际的物理机或者模拟器构建。
- 或者通过逆向的方式,突破app的注册和激活。
任务队列的构建
- 构建要爬取的数据中心,即数据中心的来源。
- 根据所构建的任务队列,重复的日更新数据或者月更新数据。
假数据的处理
- 需要拦截对应的爬取的userid以及当前返回的useid是否一致;防止假数据对爬取库的污染。
主要技术点分析
- android app okhttp网络调用过程分析,分析具体的hook点。
- 使用jadx分析具体的加密点;如可能的话,使用java还原sig的加密算法。
- 使用frida以及构架js的破解脚本等。
- 或者使用xposed构建基于apk的签名接口等。
- 使用python构建爬虫脚本,调用破解的签名接口等。
- 使用redis构建缓存队列以及使用mongodb构建中间数据存储等。
- 使用appium构建自动化的点击脚本,绕过app的风控等。
- 将所有的服务部署到centos上,安装appium和frida的开发环境,生成环境的爬虫服务的正式上线。
- 基于爬取得到的数据封装后端api接口。
- 调用封装好的数据api接口,构建前端页面显示逻辑。
- 自动发布邮件通知,回顾爬虫昨天一天的爬取正确率以及错误率。
- 纠正爬取错误的数据。
网友评论