Frida hook NO_PROXY限制

java 常用的两种请求库 Okhttp3和HttpURLConnection都支持NO_PROXY模式,会导致无法直接使用抓包工具抓包,这里使用frida 越过限制

hook Okhttp3 jS 代码
// hook OKhttp3 NO_PROXY为null
Java.perform(function () {
    var OkHttpClient = Java.use('okhttp3.OkHttpClient$Builder');
    OkHttpClient.proxy.implementation = function (proxy) {
        // 默认代理,修改此处可以设置为其他代理
        var defaultProxy = null;
        return this.proxy.call(this, defaultProxy);
    }
});

hook HttpURLConnection js 代码

// Hook HttpURLConnection 函数
Java.perform(function () {
        var Proxy = Java.use('java.net.Proxy');
        let URL = Java.use("java.net.URL");
        URL.openConnection.overload("java.net.Proxy").implementation = function (proxy) {
            // console.log("传入的参数为:", proxy, "类型为:", typeof proxy)
            // console.log("Proxy.NO_PROXY.value为:", Proxy.NO_PROXY.value,  "类型为:", typeof Proxy.NO_PROXY.value)

            // 判断是否是NO_PROXY,不是直接返回原函数回调,避免部分本地代理服务
            if (proxy.equals(Proxy.NO_PROXY.value)) {
                console.log("hook了HttpURLConnection")
                console.log(proxy);
                return this.openConnection();
            }
            console.log("未使用NO_PROXY,返回原函数")
            return this.openConnection.overload("java.net.Proxy").call(this, proxy);
        }
    }
);

因为实际使用中,部分请求可能会有本地代理情况,所有需要识别下,不然全部把NO_PROXY变成default,会导致功能异常

你可能感兴趣的:(Frida)