浅析APP代理检测对抗( 二 )


针对Proxy.,先测试一下,系统代理是否真的不能抓包 。
如下图先设置系统代理,burp监听8888,此时打开APP,点击发送请求无任何反应,burp中也抓不到包,说明系统代理被禁了 。
4.2、使用代理
用过这款软件的都知道,当开启代理服务后状态栏会有个钥匙的标志,这可能也是基于VPN模式工作的特征 。
同样的APP,点击请求,此时成功绕过了Proxy.检测!也说明了VPN协议在HTTP协议的下层 。
安卓VPN检测
VPN也是代理的一种,但是由于通讯协议的差异,所以检测代码也不一样 。
当客户端运行VPN虚拟隧道协议时,会在当前节点创建基于eth之上的tun0接口或ppp0接口,所以一旦出现带有明显特征的网络接口名称,就可以认定是使用了VPN协议进行通信 。
下面这段代码的检测方式:出现特征tun0或者ppp0则退出应用,也就是我们看到的闪退效果 。
private void isDeviceInVPN() {try {Enumeration networkInterfaces = NetworkInterface.getNetworkInterfaces();while (networkInterfaces.hasMoreElements()) {String name = networkInterfaces.nextElement().getName();if (name.equals("tun0") || name.equals("ppp0")) {stop();}}} catch (SocketException e) {e.printStackTrace();}}
在点击监听中放置()功能,点击即触发,如果检测到了使用了VPN则直接退出 。
@Overridepublic void onClick(View view){if (view.getId() == R.id.send_request){isDeviceInVPN();sendRequestWithHttpURLConnection();}}
5.1、使用代理
当前场景:APP同时开启了代理检测以及VPN检测
这时使用进行数据转发的软件进行测试,开启之后,系统状态栏不会出现钥匙的形状,这时再次进行抓包测试 。
burp成功获取到了请求,至此代理与VPN的应对方法均已实现 。所以,竟然能从OSI的 2、3层下面走吗,下面我们继续分析 。
6.原理

浅析APP代理检测对抗

文章插图
我们都知道安卓使用的是linux内核,而linux内核提供的防火墙工具是/ 。
是由linux内核集成的IP数据包过滤系统,其工作在内核内部,而则是让用户定义规则集的表结构 。
也就是,是一个命令行工具,位于用户空间,它真正操作的框架实现在内核当中 。
是一个数据包处理模块,它具有网络地址转换、数据包内容修改、数据包过滤等功能 。要使能够工作,就需要将所有的规则读入内存中 。
自己维护一个内存块,在此内存块中有4个表:表、NAT表、表和raw表 。在每个表中有相应的链,链中存放的是一条条的规则,规则就是过滤防火的语句或者其他功能的语句 。也就是说表是链的容器,链是规则的容器 。实际上,每个链都只是一个hook函数(钩子函数)而已 。
主要工作在OSI七层的2.3.4层,好像也没比VPN的工作协议低,反而还有高的,但是测试结果证明,是我想错了,不是由于协议低,而是没有出现tun0或者ppp0这两个关键的网卡特征,所以成功绕过了VPN的检测 。
基于这个流量转发,我还发现了一个新的名词,叫做“透明代理”,的转发模式就是这种 。
由此,延伸了一个新的代理模式,通过burp进行“透明代理”,网上的教程错综复杂,亲测使用过程如下 。
透明代理
原理:透明代理技术可以让客户端感觉不到代理的存在,用户不需要在浏览器中设置任何代理,只需设置缺省网关即可 。在访问外部网络时,客户端的数据包被发送到缺省网关,通过缺省网关的路由,最终到达代理服务器,最后代理服务器运行代理进程,数据实际被重定向到代理服务器的代理端口,即由本地代理服务器向外请求所需数据然后拷贝给客户端 。接下来我将尝试:结合安卓端的透明代理技术与burp存在的模式