前言
很明显如果你抓不到包,那么写爬虫程序是一件无法下手的事情
目前很多公司越来越多的业务都转向到app端,那么app抓包就成为爬虫工程师必不可少的技能。从某种角度上讲,防止被抓包也是反爬的一种形式。下面将从各个方面讲解app抓包技巧, 讲解会遇到的各个问题及其相应的解决办法
网络七层模型
既然说到网路抓包,那么我们从网络七层模型开始说起,其实pc端爬虫往往只会关注应用层的数据抓包,但是很多大厂 的app已经很难从应用层抓到数据包,往往需要去解析传输层的数据,或者我们必须规避app去走tcp
抓包分析
其实我们很想能在应用层就抓到数据包,但是当我们打开fiddler抓包时,却会发现抓出来的包有一把锁
都是锁这特娘的怎么干活
下面我们对这些情况都分下类:
- 挂上代理后app提示没有网络,断开代理后app正常访问(证书验证)
- 挂上代理后app能正常访问,但是fiddler抓不到任何数据(不走代理)
- 挂上代理后app能正常访问,fiddler能抓到部分数据包,但是无法抓到关键数据包(发tcp)
以上就是应用层抓包你会遇到的所有问题
下面我们一个个来解决问题,在解决你的这些问题之前请确保你已经将fiddler证书安装到手机的根目录
(安卓7.0以上系统不再信任用户安装的任何证书)
可以参考这篇文章
https://blog.csdn.net/weixin_44249131/article/details/104650275
证书验证
原理:
app(客户端)往往带有ssl ping证书验证,而代理是无法直接带着真实的证书给到app客户端校验的,
解决办法:
- 选择 xposed的JustTrustMe模块,该模块是hook了Java层的主要网络请求库例如okhttp,UrlConnection等,让app不再去验证证书
- 如果方法1失败了,那么可能是开发者自己改写了网络请求库,那么你可以选择去追踪一下app的网络请求源码,去hook住那个请求库
- 直接获取apk的证书和证书密码(需要反编译),将证书安装到Charles就能顺利抓包
不走代理
原理:
- 安卓开发者可以设置apk不走代理
解决办法:
- android proxydroid 代理 APP全局代理强制把IP转发到代理端口上,关于该软件的使用可以参考
https://blog.csdn.net/weixin_33711647/article/details/92018504
不走http请求
原理:
- app开发者只用tcp去发送请求
解决办法:
- 手机端采用httpcanary抓包(可抓取tcp和http等),获取相应app的请求的服务端ip地址,然后用iptables屏蔽掉这些IP地址
- hook住app发送tcp的相关类,让他只走http
- 直接wireshark手撕tcp(高难度动作,会这波操作时请务必联系我)
写在最后
现在爬虫的门槛越来越高,停止学习的会成为真正意义上的"爬虫工程师",继续学习的会面向监狱编程,加油打工人!!!
欢迎关注"python网络爬虫大数据与逆向工程"公众号,一起学习更多关于网络爬虫和逆向工程方面的知识