前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >[962]App爬虫思路

[962]App爬虫思路

作者头像
周小董
发布2021-04-26 10:53:23
1.8K0
发布2021-04-26 10:53:23
举报
文章被收录于专栏:python前行者

文章目录

App爬虫思路1

评估分析

在抓包前,建议一定要先分析。

有网页端抓网页端、有移动端抓移动端、有客户端抓客户端,最后的选择才是App。

举个例子。针对腾讯视频考虑顺序: 1、网页端:https://v.qq.com/ 2、移动端:https://m.v.qq.com/index.html 3、客户端:通过charles设置代理抓取 4、App

腾讯自己就有做应用加固的,旗下产品自然很难被编译

如何抓包

在知乎上也有这个问题 如何在 Android 手机上实现抓包?

但是我觉得不够全,首先对于一般的HTTP和HTTPS协议,通过最基本的Fiddler和Charles就可以抓包,具体方法请Google。需要保证两点:App走代理,证书被信任。

有些应用不走操作系统的 HTTP 代理,直接走 TCP 协议,无法使用 HTTP 代理抓包。虽然 Charles 支持 SOCKS 代理,但无法分析 TCP 包。这就需要祭出大杀器 tcpdumpWireshark

说一下DNS抓包,这个网上基本找不到资料,这也是大佬教我的,详细步骤在博客里,https://zhangslob.github.io/,感兴趣自行翻阅。

还有一个比较出名的是mitmproxy,没怎么用过。

最后,苹果公司有做一个比较详细的抓包说明 https://developer.apple.com/library/archive/qa/qa1176/_index.html

如何逆向

逆向一直是一个很大的话题,而且还专门有逆向工程师这个职位,可见其中水之深。

对于爬虫,简单了解即可。这里需要三个逆向工具:

  1. Apktool:获取资源文件和smail代码
  2. dex2jar:将dex文件转换成jar文件
  3. JD-GUI:查看到反编译后的dex的代码

最后看到的是JAVA代码,所以能看懂JAVA是必要能力。

JD-GUI我用的比较多,简单演示下。

主要是使用搜索功能,搜索前需要先花很多时间反编译。

如果对Appnium感兴趣,可以看看 Appium环境搭建超详细教程

App爬虫思路2

APP爬虫转化成网页爬虫

因为APP爬虫的难度比网页爬虫更大,相关软件也都不是很成熟。而网页爬虫就很多成熟的技术,有使用脚本的(python+各种库),也有在可视化编辑界面编辑采集流程就可的自动化采集软件的(如八爪鱼),总得来说效率会比APP爬虫高很多。所以对于一个APP爬虫任务,在使用APP爬虫技术之前,首先得确认能否转换成网页爬虫。

首先获取APP页面url。将APP页面转发到电脑上,在电脑端浏览器上打开(也可以用其它方法),获取其url,比如如下的:

https://app-wys.guahao.com/dynamic/peer/share/detail?dynamicId=105473

如果这个页面可以稳定存在,那么就可以进行网页爬虫了。但我这个页面过2秒就会自动跳转到这个页面上,要求你下载相应的APP:

这时候可试探性地修改一下url,看能不能让它不跳转。经过尝试之后,我把前面的“app-”这几个字符去掉后,页面能稳定存在:

https://wys.guahao.com/dynamic/peer/share/detail?dynamicId=105473

然后就可以进行网页爬虫了。能否试成功、转化成功需要一些运气。若无法转化,则可以进行下面的APP爬虫。

思路1:自动化驱动

难度:较容易,适合入门

使用软件:自动化驱动:Appium/Airtest

预备知识:

自动化驱动(Airtest、Appium):指定python脚本模拟实现 App 的一系列自动化动作,即模拟人工在APP上的操作过程,如自动登录,跳转到目标页面,自动滑动;也可以提取 App 中呈现的信息。

图:Airtest

方法:

通过Airtest(亦可用Appium,2者原理类似)自动化驱动使APP自动运行(并记录下对应的python脚本),同时记录下数据。这种方法不涉及抓包、数据通信,所以可以绕开思路2中涉及的所有反爬技术,简单很多。但其缺点是只能爬到可见的数据,即在APP上被展示出来的数据,而一些接口数据则爬不到。但大部分任务使用APP上所见的数据也足够了,不必使用较全的接口数据。

Airtest与Appium的对比:

(1)Appium运行不稳定

我本人在爬虫时就遇到Appium故障无法解决:手机有反应,但模拟器卡在欢迎页不动,无法进行后续的自动化测试开发。

(2)推荐Airtest

个人感觉,在做自动化驱动和爬虫时Airtest比Appium好用很多,功能更全,用起来也更便捷。

具体的可以参考如下资料(按推荐的阅读顺序排列):

【1】https://airtest.doc.io.netease.com/ Airtest官网,介绍得很系统很详细,包含了详细的教程和debug,写得很好,用Airtest的话建议仔细反复参照这个。

【2】https://mp.weixin.qq.com/s/-Agd4uC2irXwDTf77arSDA 一个使用Airtest进行爬虫的例子

【3】https://zhuanlan.zhihu.com/p/55266133 Airtest爬虫方法,写得也不错,适合入门,可作为1中入门部分的替代

【4】https://juejin.cn/post/6888587002564837390 Airtest教程汇总

单独使用进行爬虫的缺点: (1)速度稍慢,不如抓包速度快; (2)只可以获取在 App 中看到的信息,无法直接提取接口获取的数据(比如网站的URL和用户ID就无法爬取),而用思路2得到的接口数据往往是信息量最全的。

如果上述2方面有更高的要求,那么可以采取更高难度的思路2

思路2:自动化驱动+抓包

难度:高级,适合进阶

使用软件:自动化驱动:Appium/Airtest; 抓包: mitmproxy/anyproxy

预备知识:

抓包软件(如mitmproxy、anyproxy、Charles、fiddler):这类抓包软件的原理都是中间人攻击,软件本身扮演一个代理的角色。监听请求和响应,对抓取的数据包(请求request和响应response),用对接的 Python 脚本进行处理。单独使用进行爬虫的缺点:无法自动化操作APP以产生数据,常常需要配合自动化驱动软件。

图:Charles

图:抓包软件的原理–中间人攻击(代理)

思路:

步骤1:使用Charles/fiddler等抓包软件进行抓包分析,分析哪个URL上有数据以及数据类型等。(Charles无法对接Python脚本,但软件操作页面做得比较好 ,故适合作为前期的抓包分析)

步骤2:然后通过Appium(亦可用Airtest)自动化驱动使APP自动运行(并记录下对应的python脚本1),以此产生包含所需数据的数据包。

步骤3:然后用mitmproxy对接python脚本2截获这些数据包进行分析。将2个脚本合并即是最终的爬虫代码。

难点:数据加密,获取困难

思路2这个方法在之前比较常用也很好用,但随着反爬技术的升级,这个方法出现了很多问题,使得使用这个方法的难度越来越大。主要有以下2方面困难:

(1)数据的通信和数据包的内容都已加密。现在的APP都已采用加密的通信方式(https等)。若要让代理被信任,需要在手机上安装证书。但现在的新手机又普遍不信任用户自行安装的mitmproxy和charles的证书,只信任系统的证书(好像要root之后才能将证书安装到系统的证书里),导致这2个抓包软件都无法正常代理,无法截获采用加密通信方式的数据包。虽然对mitmproxy有如下解决方案https://blog.csdn.net/andrew_wf/article/details/84991989,但此使用方案之后仍有少部分数据包无法获取。(更新:可考虑用安卓模拟器跑低版本的按照系统,这样就能装证书了,然后再使用上述方法抓包。)

(2)此外,即便使用了上述方法截获了数据包,数据包里面的内容也是加密的。解密也很繁琐,很多时候需要破解APP,去其代码里面找加密算法来解密。破解APP涉及APK文件反编译技术,但很多时候APP开发者还采用了很多APP保护手段,如代码混淆(使反编译得到的代码难以理解)、应用加固(加壳)(防止APP被反编译;即反编译之后得到的是壳的代码),这使得APP爬虫面对的逆向工程极其复杂。

克服这2方面的难点需要很强的技术,若对爬虫无更高的话可以采取思路1。

具体实现方法可以参考如下资料(按推荐的阅读顺序排列):

【1】https://cuiqingcai.com/5052.html

看其1.7的软件安装和11的APP爬虫教程。讲得很系统很好。其中11.6是最好的思路,也是本文思路1所提到的。但内容比较早,在现在先进的反爬技术下很多都不能直接用。

【2】https://blog.wolfogre.com/posts/usage-of-mitmproxy/

一个比较详细的mitmproxy的使用教程

【3】https://crifan.github.io/crawl_your_data_spider_technology/website/core_logic/main_step.html

讲得也比较系统。内容比较新,涉及到了很多上面提到的问题和部分解决方案。

【4】http://appium.io/docs/cn/about-appium/intro/

Appium官网

【5】https://docs.mitmproxy.org/stable/concepts-options/

mitmproxy官网

其它资料集

APP爬虫学习路径:

https://cuiqingcai.com/9075.html

APP爬虫练习:

https://cuiqingcai.com/9522.html

其它可以进行APP爬虫的自动化驱动软件:

【触控精灵】http://www.locoy.com/index/buy_detail/id/5

来源:https://zhuanlan.zhihu.com/p/50627576 https://zhuanlan.zhihu.com/p/343303142

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021/04/24 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
  • App爬虫思路1
    • 评估分析
      • 如何抓包
        • 如何逆向
        • App爬虫思路2
          • APP爬虫转化成网页爬虫
            • 思路1:自动化驱动
              • 思路2:自动化驱动+抓包
                • 其它资料集
                领券
                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档