安卓从开发到逆向(六)APP无法抓包原因探秘(初级)

爬虫工程师在抓取APP数据包时,经常遇到如下情形:

1、APP运行正常,可以正常抓取到数据包。

2、APP运行正常却无法抓取到相应数据包,如新闻显示正常,却抓取不到广告数据包。

3、APP运行异常,打开后显示无法加载内容,一个包也抓不到。

这是什么原因呢,APP在开发的时候做了哪些操作呢?

本文将从开发者的角度给大家展示如何屏蔽抓包软件的探测,进而找到如何破解屏蔽抓包软件的方法,一攻一防,非常有趣。

准备工具:

android studio,夜神模拟器,Xposed框架,Proxy Droid全局代理工具,Packet Capture抓包app,fiddler抓包工具

工具下载地址:

链接:https://pan.baidu.com/s/1mHOl9y-LXnETUg3oDAKNvA提取码:3ygd

首先,我们先来开发一个小demo,界面非常的简单,一个文本框,一个按钮,在文本框中输入网址,点击按钮,访问网页。

如我在文本框中输入,点击 点击访问 按钮后,显示了百度M站的页面。

其实现代码也非常的简单:

1、首先在activity_main.xml文件中添加WebView

2、编辑MainActivity.java实现访问网页

3、添加访问网页权限,编辑AndroidManifest.xml

4、如果此时编译运行,设置好手机的代理IP和端口,是可以抓取到访问百度的数据包的。

接下来,我们对访问网页这一操作增加逻辑,判断当前手机是否设置代理。

大家可以看到,通过System.getProperty方法来获取当前手机设置的代理IP和代理端口,如果设置的代理IP和代理端口,则返回true,否则返回false。

我们将这一判断逻辑加在显示布局文件之前,如果设置了代理IP和代理端口则通过Toast显示"请勿设置手机代理",否则正常显示界面。

编译一下,在手机上运行,当手机设置了代理IP和代理端口,APP会如下显示。

并且当前fiddler等抓包工具是无法抓取到数据包的,从开发者的角度实现了屏蔽抓包软件的探测。

那么当爬虫工程师遇到这种情况后,该如何操作,才能破解屏蔽抓包软件的方法。

方法有二:

1、通过反编译APP拿到屏蔽抓包软件逻辑,使用Xposed框架Hook其方法。

Xposed框架的安装和简单模块的开发,大家可以参考上一篇文章 安卓从开发到逆向(五)小白也看得懂的Xposed框架入门 本处仅展示Hook代码。

使用Xposed框架Hook后,即使设置了系统的代理IP和端口号,APP也能正常运行并抓取到数据包了。

2、使用强制全局代理软件或VPN软件的方式即不用设置系统默认的代理IP和端口。其中全局代理软件为Proxy Droid,VPN软件为Packet Capture,两款软件都为安卓应用,两款工具我都放在百度网盘中了,大家可以下载使用。

Proxy Droid需要有ROOT权限才能使用,Proxy Droid的原理是通过iptables将所有TCP连接重定向到代理服务器上,强制性地让APP的HTTP请求通过代理,即不去设置系统默认代理,而是通过Proxy Droid设置代理信息后,强制APP通过Proxy Droid来访问网络。

对ProxyDroid进行配置(基本配置)

Auto Setting不勾选,我们手动进行配置。Host:输入代理服务器IP。Port:输入代理服务器端口。(HTTP默认808,SOCKS默认1080,具体视服务器情况而定)Proxy Type选择代理服务器提供服务类型:我这里选择Socks5。Auto Connect为当2G/3G/WIFI网络开启时,自动开启代理服务。不勾选,我们手动启动,以获取最大灵活性。Bypass Addresses:相当于黑名单列表,选择排除代理的IP范围,有需要的可以自己手动设置。

认证信息配置:

Enable Authentication:如果代理服务器需要账户、密码认证,勾选。User:认证账户名。Password:认证密码。NTLM Authentication:NTLM/ NTLM2,Windows早期的一种认证方式,不用勾选。

特征设置:

Global Proxy:一定要勾选,即为全局代理,代理所有App。Individual Proxy:单独代理所选App,勾选了(1)的不用管。Bypass Mode:勾选了代表(2)中所选App不代理,勾选了(1)的不用管。DNS Proxy:开启DNS代理。

设置好代理IP和端口号后,点击开启代理。

此时通过APP访问百度,即可抓取到数据包了。

VPN软件即Packet Capture,Packet Capture的原理是在本地创建一个VPN,使所有请求都从VPN中流过,从而实现不适用代理抓包的效果。

启动Packet Capture后即可抓取到APP访问网页的数据包了。

文章参考:

Loco《当你写爬虫抓不到APP请求包的时候该怎么办?【初级篇】》 https://zhuanlan.zhihu.com/p/46433599大_熊_《教你在Android手机上使用全局代理!》 https://blog.csdn.net/codezjx/article/details/8872071

python爬虫工程师之家,不定期分享一些python爬虫开发技能及逆向破解相关知识,欢迎关注,一起学习,一起进步。