Android如何防止App被抓包

众所周知,我们不管是在与公司APP联调,还是想要获取第三方APP的接口数据,第一反应就是手机开启WI-FI代理,通过Fiddler,Charles进行网络抓包。可以很轻松的能获取网络请求的数据。那么问题来了,如何能避免自己的接口被对方知道呢?能规避的方式有很多,但都只能说加强被破解的难度,没有绝对的严防死守!现在我们来谈一下在网络层上面如何防止App被抓包:

是否正在使用WIFI代理

public static boolean isWifiProxy(Context context) {
        String proxyAddress;
        int proxyPort;
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) {
            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);
        }
        return (!TextUtils.isEmpty(proxyAddress)) && (proxyPort != -1);
    }

是否正在使用VPN

    public static boolean isVpnProxy() {
        try {
            Enumeration<NetworkInterface> nifs = NetworkInterface.getNetworkInterfaces();
            if (nifs != null && nifs.hasMoreElements()) {
                for (NetworkInterface intf : Collections.list(nifs)) {
                    if (!intf.isUp() || intf.getInterfaceAddresses().size() == 0) {
                        continue;
                    }
                    if ("tun0".equals(intf.getName()) || "ppp0".equals(intf.getName())) {
                        return true;
                    }
                }
            }
        } catch (Throwable e) {
            e.printStackTrace();
        }
        return false;
    }

But此两种方式肯定影响用户体验,治标不治本。在OkHttp框架中,设置proxy(Proxy.NO_PROXY)属性,禁止使用代理。在构造OkHttpClient时是可以设置的,其默认值是ProxySelector.getDefault(),该默认值会反应出系统的代理信息。