一枚酸心果子

果子果子果子果子果子~~~

Android代理检测与绕过技术:攻防对抗的艺术

Android代理检测原理

检测机制概述

Android系统提供了多种API来检测网络配置状态,开发者可以利用这些API来识别用户是否使用了代理或VPN:

  • ConnectivityManager:检测网络连接状态和代理设置
  • NetworkInterface:检测网络接口信息
  • 系统属性:检测DNS服务器等系统配置
  • 网络能力:检测网络传输类型

为什么需要检测?

应用开发者检测代理和VPN的主要原因:

  • 防止数据泄露:避免敏感信息被截获
  • 反爬虫机制:防止自动化工具滥用API
  • 地理限制:确保用户来自特定地区
  • 安全审计:符合企业安全策略要求

通俗理解:就像商家不想让你用”代购”一样,他们希望直接和你交易,而不是通过中间人。

常见的检测方法

1. ConnectivityManager检测

代理检测

1
2
3
4
5
6
7
8
9
10
11
public boolean isProxySet(Context context) {
ConnectivityManager cm = (ConnectivityManager)
context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetwork = cm.getActiveNetworkInfo();

if (activeNetwork != null && activeNetwork.isConnected()) {
String proxyHost = android.net.Proxy.getDefaultHost();
return (proxyHost != null && proxyHost.length() > 0);
}
return false;
}

检测原理:这个检测方法会检查系统是否设置了代理服务器,如果设置了就返回true。

VPN检测

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public boolean isVpnConnected(Context context) {
ConnectivityManager cm = (ConnectivityManager)
context.getSystemService(Context.CONNECTIVITY_SERVICE);

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
Network[] networks = cm.getAllNetworks();
for (Network network : networks) {
NetworkCapabilities capabilities = cm.getNetworkCapabilities(network);
if (capabilities != null && capabilities.hasTransport(
NetworkCapabilities.TRANSPORT_VPN)) {
return true;
}
}
}
return false;
}

检测原理:这个方法会遍历所有网络连接,检查是否有VPN类型的连接。

2. NetworkInterface检测

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public boolean isVpnConnected() {
try {
Enumeration<NetworkInterface> networkInterfaces =
NetworkInterface.getNetworkInterfaces();

while (networkInterfaces.hasMoreElements()) {
NetworkInterface networkInterface = networkInterfaces.nextElement();

if (networkInterface.isUp() &&
networkInterface.isVirtual() &&
!networkInterface.isLoopback()) {
return true; // 检测到VPN接口
}
}
} catch (SocketException e) {
e.printStackTrace();
}
return false;
}

检测原理:这个方法会检查网络接口,寻找虚拟接口(如tun、ppp等),这些通常是VPN创建的。

绕过技术详解

1. 基础VPN模式软件

Postern - 简单易用的代理工具

特点:传播广泛,上手简单,适合新手
下载地址https://apkpure.com/postern/com.tunnelworkshop.postern

Postern主界面

Postern配置界面

图2-3:Postern工具的主界面和配置界面

使用步骤

  1. 下载安装:从官网下载APK文件并安装
  2. 添加代理:点击”+”号添加新的代理配置
  3. 配置参数:选择代理类型、填写服务器信息
  4. 启用代理:点击开关启用代理服务
  5. 配置规则:选择哪些应用使用代理

优势:界面友好,配置简单,支持多种代理协议

VProxid - Android平台的Proxifier替代工具

特点:Android平台的Proxifier替代工具,功能强大
下载地址https://github.com/EasyLazyBean/VProxid

VProxid界面

图4:VProxid工具界面

使用步骤

  1. 安装应用:下载并安装VProxid
  2. 配置代理服务器:设置代理类型、服务器地址和端口
  3. 选择应用:勾选需要代理的应用
  4. 启用代理:启动代理服务

优势:可以为每个应用设置不同代理,配合Burp Suite使用效果更佳

2. 使用Frida进行代码Hook(这里粗略介绍一下,深入的用法后面再组织文章整)

什么是Frida?

Frida是一个动态插桩工具,可以在运行时修改应用程序的行为。简单来说,就是可以在应用运行的时候”偷梁换柱”,把检测函数的结果改成我们想要的值。

环境准备

  1. 安装Python:确保系统已安装Python 3.6+
  2. 安装Fridapip install frida-tools
  3. 下载Frida-server:从官网下载对应Android版本的frida-server
  4. 推送frida-serveradb push frida-server /data/local/tmp/
  5. 启动frida-serveradb shell "chmod 755 /data/local/tmp/frida-server && /data/local/tmp/frida-server &"

绕过ConnectivityManager检测

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
function bypassConnectivityManager() {
Java.perform(function () {
var ConnectivityManager = Java.use("android.net.ConnectivityManager");

ConnectivityManager.getNetworkInfo.overload('int').implementation = function (type) {
console.log("[+] Hooked getNetworkInfo, type: " + type);
var result = this.getNetworkInfo(type);

if (type == 17) { // VPN类型
console.log("[+] Bypassing VPN detection");
// 可以返回WiFi或移动网络状态
}
return result;
};
});
}

绕过NetworkInterface检测

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
function bypassNetworkInterface() {
Java.perform(function () {
var NetworkInterface = Java.use("java.net.NetworkInterface");

NetworkInterface.getAll.implementation = function() {
var interfaces = this.getAll();

for (var i = 0; i < interfaces.length; i++) {
var ni = interfaces[i];
var name = ni.name.value;

if (name.indexOf("tun") >= 0 || name.indexOf("ppp") >= 0) {
ni.name.value = "wlan0";
ni.displayName.value = "wlan0";
}
}
return interfaces;
};
});
}

3. 高级绕过技术

系统设置修改

方法1:通过设置菜单

  1. 进入”设置” → “Wi-Fi”
  2. 长按当前Wi-Fi网络
  3. 选择”修改网络”
  4. 勾选”显示高级选项”
  5. 设置代理为”手动”
  6. 填写代理服务器信息

方法2:通过ADB命令

1
2
3
4
5
# 设置HTTP代理
adb shell settings put global http_proxy 192.168.1.100:8080

# 清除代理设置
adb shell settings put global http_proxy :0

检测绕过策略总结

分层绕过策略

基于OSI七层模型,我们可以采用以下策略:

  1. 应用层检测:使用Frida Hook相关API
  2. 传输层检测:使用VPN模式软件
  3. 网络层检测:使用iptables进行流量转发
  4. 数据链路层检测:修改网络接口信息

工具选择建议

  • 简单场景:Postern或VProxid
  • 复杂检测:Frida + 自定义脚本
  • 系统级绕过:ProxyDroid + iptables
  • 组合使用:多种工具结合使用

结语

Android代理检测与绕过技术是一个不断演进的攻防对抗过程。理解检测原理,学习绕过技术,是每个“安全测试人员”的必备技能。

本文关键点

  1. 分层理解:基于OSI模型分析理解检测机制
  2. 工具选择:根据检测复杂度选择合适的工具(工具太多,我写的是我常用的几个)
  3. 持续掌握:检测技术在不断更新,需要持续掌握

下一篇我们将深入探讨高级绕过技术:iptables与透明代理,看看如何在系统底层”偷天换日”

持续输出技术分享,您的支持将鼓励我继续创作!