Python爬虫之对app无代理模式下的抓包分析,以及针对这种的反爬优化方案
现在这个大数据时代,流量逐渐由web端转移到移动端,而且目前主流的移动端就是安卓和ios端了,随着时间的积累,很多平台的数据也越来越庞大,数据越来越多,同时,针对这方面的爬虫分析也慢慢开始多了起来,这真是我的切身体验,现在基本都是对app的分析了,什么脱壳逆向,反编译重打包啥的都是一套流程了。
由于很多平台针对爬虫抓包app的确实头大,所以对其反制的方法也越来越多,比如什么ssl pinning检测啊,设置无代理模式啊,源码加固加混淆啥的的也越来越成了常规手段。
之前的ssl pinning我已经分析过了,今天就分析下无代理模式,源码加固等的那些后面有时间再另外写一篇分析的博文了。
进入正题
什么是无代理模式
即在app包里,给网络请求的接口部分,设置个NO_PROXY属性,比如如下,图来源于网络:
重要的部分只是那一小段:
.proxy(Proxy.NO_PROXY)
设置完就可以生效了,来试试,我这里找了个app,别人开发的作为学习使用的,但是加了无代理模式,我配置好代理证书抓包看看:
fiddler,不行,根本就没看到数据接口:
charles,也一样看不到,只抓到了图片,比fiddler好一点,至少还能看到图片:
那这么说,真的可以防止fiddler和charles等抓包工具抓包了,是不是瞬间觉得好6啊,确实6,但是,有了它就是绝对安全了吗?应该不用我多说,相信你也知道答案了。
无代理的原理
在说怎么处理这种问题之前,先说说无代理的原理,因为目前,国外不知道,国内的话,很多的对app的分析还就是直接用fiddler和charles进行抓包分析,说白了就是在在手机上配置fiddler或者charles的证书,然后http和https协议的包全部都会从抓包工具里经过,进而就可以分析接口数据了,相关步骤可以看我这篇博文里的安卓抓包配置:对app的反爬测试之apk逆向分析-frida绕过ssl pinning检测 打开后,按 ctrl +f 搜索关键词 【安卓机上安装ssl证书】就可以看到了
像上面说的在手机上配置个代理证书就可以实时监测接口数据的交互的,这种的就是代理模式,而上面刚说的用.Proxy(Proxy.NO_PROXY)设置无代理模式就刚好能够针对代理来处理,既然都已经设置了无代理模式,那么不管你用什么以代理为原理的抓包工具都无效了,再牛逼也没用。
这种方法,可以防御一大片的中级爬虫,让他们毫无头绪,一筹莫展,懵逼,傻眼,怀疑人生
当然针对稍微高级点的,有点经验的爬虫工程师,那还是没办法
对无代理的抓包
目前,据我了解,目前的方法有以下几种:
- 挂VPN抓包,安卓端使用drony,ios端使用Shadowrocket
- xposed hook
- Postern强制抓包
- wireshark抓包分析
前面说了,代理不行,那可以用vpn啊,用过vpn的兄弟,不多说啊,你懂的,毕竟说大了可是违反网络安全法的,自己懂就行了,但是我这里说的并不是可以访问国外网站的那种vpn,只是都是同一个原理而已,什么原理呢,就是一个数据中转,跟代理类似,但是并不是就行了,这个不用太过去纠结其实,因为我翻了半天资料都没看懂。
今天我就主要介绍drony这个工具
Drony
这个软件是安装在手机端的,并不是安装在pc端的哈
1.安装
直接下载我这个即可:点我下载
注:高版本的安卓安装后已无法正常使用了,我是直接在模拟器里安装的
2.配置
打开drony,右滑,滑到setting界面
点击下面的wifi
选择你抓包工具所在的网络wifi,这里我由于是在模拟器里,那肯定就只有这一个
按次序如下配置,这里的ip和端口即是抓包工具所在pc端的电脑的局域网的ip,和抓包工具的端口,我这里是用的fiddler,所以就是8888
接着往下滑,filter default value 选allow all,然后点击Rules
配置个过滤规则,右边按那个加号新建一个
action选如下,然后application选择目标app,前提你得在虚拟机里安装好目标app,且是能正常打开并请求数据的
以上就配置完了,然后一路返回,返回到settings里,然后左滑到LOG,点击下面的OFF,由OFF变为ON:
3.开始抓包
drony让它一直监听着不管就行,然后让它后台启动,不杀死它,打开抓包工具,我这里是fiddler,接着再打开你的目标app,用抓包工具分析:
app里展示如下:
fiddler,可以抓到
再看看charles,也可以抓到
完美是吧?
反爬优化方案
相信你如果是做安全的朋友,看了以上的一顿操作,是不是觉得一万个卧槽,这可咋整啊,怎么办呢?
根据我的经验,可以作如下处理:
1.vpn检测(待确认)
这个方式我也是看别人的文档得来的,没有实际体验过,具体怎么检测是否是vpn就自己查资料吧
2.域名检测
设置只允许设定范围内的域名才通过,比如我的域名是app.com,证书检测里只允许app.com通过,其他的全部不允许通过即可。
当然这个方法,针对能反编译的高手而言,一切的都是虚的
3.证书+域名检测
在以上的基础上,在加个证书验证,可以一定程度的防止爬虫
4.使用flutter混合开发
目前flutter也越来越大众化,近10年来java开发的APP,加固混淆都很难隐藏DEX文件中的秘密,据我最近了解,flutter框架开发的APP, 界面逻辑和网络请求都编译到so文件里了,并且flutter默认就已经是无代理模式。因为我之前分析某app就是用flutter开发的,然后最多只能看到接口的域名,看不到具体的请求参数和具体接口,然后看到某知识星球的有个哥们儿遇到了跟我一样的问题,大佬给出的结论如下:
很强吧,所以,如果你把你的app沿用flutter混合开发的话,反编译难度提升了不少,具体怎么操作自行百度看文档吧,我不是做安卓开发的,这里就略过了。