Android抓包攻防技术
字数 1333 2025-08-22 12:22:36

Android抓包攻防技术详解

一、代理检测与绕过

1. 代理检测原理

APP在发起网络请求前会检测系统是否设置了代理,如果发现代理则可能不发起请求。以下是典型的代理检测代码:

public static boolean isWifiProxy(Context context) {
    final boolean IS_ICS_OR_LATER = Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH;
    String proxyAddress;
    int proxyPort;
    
    if (IS_ICS_OR_LATER) {
        proxyAddress = System.getProperty("http.proxyHost"); // 获取代理主机
        String portStr = System.getProperty("http.proxyPort"); // 获取代理端口
        proxyPort = Integer.parseInt((portStr != null ? portStr : "-1"));
    } else {
        proxyAddress = android.net.Proxy.getHost(context);
        proxyPort = android.net.Proxy.getPort(context);
    }
    
    Log.i("代理信息", "proxyAddress:" + proxyAddress + "prot:" + proxyPort);
    return (!TextUtils.isEmpty(proxyAddress)) && (proxyPort != -1);
}

2. 特征表现

  • 设置手机代理后,APP无法获取网络数据

3. 绕过方法

  1. 系统底层流量转发:使用iptables强制转发流量(如ProxyDroid的全局模式)
  2. 代码修改:反编译APP,在smali代码中修改检测代理的逻辑

4. 参考资源

二、No Proxy绕过系统代理

1. 实现原理

APP使用NO_PROXY参数发起网络请求,直接绕过系统代理设置:

OkHttpClient okHttpClient = new OkHttpClient.Builder()
    .proxy(Proxy.NO_PROXY) // 使用此参数可绕过系统代理
    .build();

2. 特征表现

  • 设置代理后APP能正常获取数据,但抓包工具无法捕获数据包

3. 绕过方法

  1. 系统底层流量转发:使用iptables强制转发(ProxyDroid全局模式)
  2. VPN形式代理:使用Drony等工具(手机状态栏会显示VPN图标)

4. 参考资源

三、SSL Pinning证书锁定

1. 实现原理

开发者将SSL证书特征硬编码在APP中,通信时进行比对验证:

  1. 证书特征码比对:检查证书中特定字节码是否匹配
  2. 预埋证书验证:APP内置服务器证书进行验证

2. 特征表现

  • 挂代理后无法抓包且APP无法获取网络数据

3. 绕过方法

  1. 逆向提取证书
    • 证书通常位于/assets目录
    • 反编译后搜索.p12.pem.cerssl等关键词
  2. Xposed模块:使用JustTrustMe模块
  3. Frida Hook:手动编写脚本hook证书校验代码

4. 对抗混淆

开发者可能混淆证书校验代码,此时需要:

  1. 反编译分析代码
  2. 定位证书校验位置
  3. 编写定制化hook代码

5. 参考资源

四、双向认证

1. 实现原理

相比SSL Pinning,服务器也会验证客户端证书:

  • 客户端预埋服务器证书
  • 服务器验证客户端证书

2. 特征表现

  • 绕过SSL Pinning后仍无法抓包
  • APP无法获取网络数据

3. 绕过方法

  1. 逆向APP提取客户端证书
  2. 将证书挂载到抓包代理软件

4. 参考资源

五、综合防御策略

1. 防御层级

  1. 代理检测:防止普通代理设置
  2. No Proxy:绕过系统代理设置
  3. SSL Pinning:防止中间人攻击
  4. 双向认证:增强服务器对客户端的验证

2. 攻击者应对策略

  1. 系统级流量控制(iptables/VPN)
  2. 逆向工程与代码修改
  3. 运行时Hook(Xposed/Frida)
  4. 证书提取与重放

六、工具推荐

  1. 代理检测绕过

    • ProxyDroid(全局模式)
    • Drony(VPN形式)
  2. SSL Pinning绕过

    • JustTrustMe(Xposed模块)
    • Frida(动态Hook)
    • Objection(基于Frida的自动化工具)
  3. 逆向分析

    • Jadx/Ghidra(反编译)
    • Apktool(APK拆包)
    • Frida-server(动态分析)
Android抓包攻防技术详解 一、代理检测与绕过 1. 代理检测原理 APP在发起网络请求前会检测系统是否设置了代理,如果发现代理则可能不发起请求。以下是典型的代理检测代码: 2. 特征表现 设置手机代理后,APP无法获取网络数据 3. 绕过方法 系统底层流量转发 :使用iptables强制转发流量(如ProxyDroid的全局模式) 代码修改 :反编译APP,在smali代码中修改检测代理的逻辑 4. 参考资源 ProxyDroid绕过APP代理检测 App防止被抓包 二、No Proxy绕过系统代理 1. 实现原理 APP使用NO_ PROXY参数发起网络请求,直接绕过系统代理设置: 2. 特征表现 设置代理后APP能正常获取数据,但抓包工具无法捕获数据包 3. 绕过方法 系统底层流量转发 :使用iptables强制转发(ProxyDroid全局模式) VPN形式代理 :使用Drony等工具(手机状态栏会显示VPN图标) 4. 参考资源 使用Drony突破APP不走代理 如何让app不走系统代理 三、SSL Pinning证书锁定 1. 实现原理 开发者将SSL证书特征硬编码在APP中,通信时进行比对验证: 证书特征码比对 :检查证书中特定字节码是否匹配 预埋证书验证 :APP内置服务器证书进行验证 2. 特征表现 挂代理后无法抓包且APP无法获取网络数据 3. 绕过方法 逆向提取证书 : 证书通常位于 /assets 目录 反编译后搜索 .p12 、 .pem 、 .cer 、 ssl 等关键词 Xposed模块 :使用JustTrustMe模块 Frida Hook :手动编写脚本hook证书校验代码 4. 对抗混淆 开发者可能混淆证书校验代码,此时需要: 反编译分析代码 定位证书校验位置 编写定制化hook代码 5. 参考资源 Android 7.0 Https抓包解决方案 绕过SSL Pinning抓取Https请求 四、双向认证 1. 实现原理 相比SSL Pinning,服务器也会验证客户端证书: 客户端预埋服务器证书 服务器验证客户端证书 2. 特征表现 绕过SSL Pinning后仍无法抓包 APP无法获取网络数据 3. 绕过方法 逆向APP提取客户端证书 将证书挂载到抓包代理软件 4. 参考资源 双向认证抓包解决方案 五、综合防御策略 1. 防御层级 代理检测 :防止普通代理设置 No Proxy :绕过系统代理设置 SSL Pinning :防止中间人攻击 双向认证 :增强服务器对客户端的验证 2. 攻击者应对策略 系统级流量控制(iptables/VPN) 逆向工程与代码修改 运行时Hook(Xposed/Frida) 证书提取与重放 六、工具推荐 代理检测绕过 : ProxyDroid(全局模式) Drony(VPN形式) SSL Pinning绕过 : JustTrustMe(Xposed模块) Frida(动态Hook) Objection(基于Frida的自动化工具) 逆向分析 : Jadx/Ghidra(反编译) Apktool(APK拆包) Frida-server(动态分析)