文中均为Android环境下,实战中可以尝试降低APP版本或是尝试抓一下iOS版APP的包(如果有),但不建议太过依赖iOS版APP
助人为乐的我又来了,这次又是在逛v2ex时看到的一个求助帖。
帖子内容:
最近在抓包一个 APP:淘最热点 一款新闻 APP 抓不到新闻列表内容 只抓到了新闻图片 其他同类型的 APP 也抓过 没出现这种问题 用的 charles 抓的,证书设置没问题 不知道是不是这个 APP 的新闻列表走了其他协议 有大佬帮忙抓下看看嘛
看起来这位同学是遇到了一个APP的请求不走代理,以至于出现抓包时看不到关键的请求的问题,我们先来把这个APP装上,抓个包看看具体情况吧。
抓到的包里确实没有看到新闻列表的请求,除了图中的这些部分以外全都是图片以及CONNECT请求。
插播一个小提示:Fiddler在这个地方可以移除图片、CONNECT类型的请求等干扰项哦。
如果抓不到包的话就没法继续写爬虫了,那么这种情况应该怎么办呢?不要慌,看完这篇文章后你就能轻松通杀90%以上无法通过直接设置系统代理就抓到包的APP。
这里说两种非常简单的方案吧:
1、使用强制全局代理
这里选用Proxy Droid这个工具来实现强制全局代理的效果。注意:需要有ROOT权限才能使用
Proxy Droid的原理是通过iptables将所有TCP连接重定向到代理服务器上,强制性地让APP的HTTP请求通过代理。
在安装Proxy Droid时可以选择clone一份GitHub仓库的代码然后自己编译安装,也可以选择直接在应用商店下载安装,推荐在GooglePlay上下载,如果你没有科学上网的话,在其他应用商店比如UpToDown和ApkHere上也可以下载到。(安装完之后记得要给它ROOT权限)
使用方法很简单,设置好系统代理后打开Proxy Droid并设置好代理服务器的IP和端口,然后点击开启按钮。
此时再抓包就能抓到这个APP的列表页请求了。
2、使用VPN抓包
如果使用强制全局代理方案的时候发现APP内请求速度明显变慢很多或是完全无效的话,可以尝试一下使用VPN抓包,这里使用Packet Capture来实现。注意:这个APP不需要ROOT权限
Packet Capture的原理是在本地创建一个VPN,使所有请求都从VPN中流过,从而实现不适用代理抓包的效果。(这个APP不是开源的,且处理部分都是调用的so库,APP本身只是一个壳而已,想要看代码的话需要有一定的Android逆向知识和经验)
因为没有开源,所以这个APP只能在应用商店里下载,推荐在GooglePlay上下载,如果没有科学上网话酷安也是有的。
界面展示:
再插播一个小提示:使用Packet Capture抓包时可以只看某个APP的请求,设置方式如下:
点击图中画框的图标,会出现一个搜索界面,输入你要抓包的APP名并点击一下就会开始抓包了,会过滤掉其他无关APP的请求,只保留你想要的这一个APP的。
那么我们来试试它的效果吧,打开抓包后,在淘最热点的新闻列表里随便翻几下页。
然后切回Packet Capture。
可以看到已经抓到很多请求包了,找一个大小比平均值小的点进去看看(因为这里有图片,一般缩略图的大小和来源都比较相似,排除掉这些就是需要的那个API的请求了)。
轻松地抓到了它的列表页请求。
不过Packet Capture的缺点也很明显,因为只有手机上的APP,并且没有能从PC上连接的工具或接口,所以如果被抓包的APP在短时间内发出的请求过多,想要找到需要的那一个就是一件很令人头疼的事情了。
好了,学会了这两招的你,现在可以通杀90%以上抓不到包的APP了,接下来的中级篇里将会告诉你如何破掉开启了SSL Pinning的APP,将这90%提升至99%。
中级篇传送门:当你写爬虫抓不到APP请求包的时候该怎么办?【中级篇】
如果这篇文章有帮到你,请大力点赞,谢谢~~ 欢迎关注我的知乎账号loco_z,我会时不时地发一些爬虫相关的干货和黑科技,说不定能让你有所启发。