hooker自动化生成frida脚本和objection自动化效果对比


hooker自动生成frida脚本和objection生成脚本测试

 

我们挑一个混淆比较厉害的类看下hooker自动生成的frida脚本和objection生成的区别

 

 

hooker生成的:

//okhttp3.HttpUrl
Java.perform(function() {
    var okhttp3_HttpUrl_clz = Java.use('okhttp3.HttpUrl');
    var okhttp3_HttpUrl_clz_method_equals_6085 = okhttp3_HttpUrl_clz.equals.overload('java.lang.Object');
    okhttp3_HttpUrl_clz_method_equals_6085.implementation = function(v0) {
        var executor = this.hashCode();
        var beatText = 'public final boolean okhttp3.HttpUrl.equals(java.lang.Object)';
        var beat = newMethodBeat(beatText, executor);
        var ret = okhttp3_HttpUrl_clz_method_equals_6085.call(this, v0);
        printBeat(beat);
        return ret;
    };
    //方法名:namesAndValuesToQueryString 参数:('java.lang.StringBuilder', 'java.util.List')
    var okhttp3_HttpUrl_clz_method_namesAndValuesToQueryString_0472 = okhttp3_HttpUrl_clz.namesAndValuesToQueryString.overload('java.lang.StringBuilder', 'java.util.List');
    okhttp3_HttpUrl_clz_method_namesAndValuesToQueryString_0472.implementation = function(v0, v1) {
        var executor = 'Class';
        var beatText = 'public static void okhttp3.HttpUrl.namesAndValuesToQueryString(java.lang.StringBuilder,java.util.List)';
        var beat = newMethodBeat(beatText, executor);
        okhttp3_HttpUrl_clz_method_namesAndValuesToQueryString_0472.call(okhttp3_HttpUrl_clz, v0, v1);
        printBeat(beat);
    };
    var okhttp3_HttpUrl_clz_method_query_7752 = okhttp3_HttpUrl_clz.query.overload();
    okhttp3_HttpUrl_clz_method_query_7752.implementation = function() {
        var executor = this.hashCode();
        var beatText = 'public final java.lang.String okhttp3.HttpUrl.query()';
        var beat = newMethodBeat(beatText, executor);
        var ret = okhttp3_HttpUrl_clz_method_query_7752.call(this);
        printBeat(beat);
        return ret;
    };
    var okhttp3_HttpUrl_clz_method_encodedFragment_6652 = okhttp3_HttpUrl_clz.encodedFragment.overload();
    okhttp3_HttpUrl_clz_method_encodedFragment_6652.implementation = function() {
        var executor = this.hashCode();
        var beatText = 'public final java.lang.String okhttp3.HttpUrl.encodedFragment()';
        var beat = newMethodBeat(beatText, executor);
        var ret = okhttp3_HttpUrl_clz_method_encodedFragment_6652.call(this);
        printBeat(beat);
        return ret;
    };
    var okhttp3_HttpUrl_clz_method_uri_1829 = okhttp3_HttpUrl_clz.uri.overload();
    okhttp3_HttpUrl_clz_method_uri_1829.implementation = function() {
        var executor = this.hashCode();
        var beatText = 'public final java.net.URI okhttp3.HttpUrl.uri()';
        var beat = newMethodBeat(beatText, executor);
        var ret = okhttp3_HttpUrl_clz_method_uri_1829.call(this);
        printBeat(beat);
        return ret;
    };
    //方法名:url 参数:()
    var okhttp3_HttpUrl_clz_method_url_0157 = okhttp3_HttpUrl_clz.url.overload();
    okhttp3_HttpUrl_clz_method_url_0157.implementation = function() {
        var executor = this.hashCode();
        var beatText = 'public final java.net.URL okhttp3.HttpUrl.url()';
        var beat = newMethodBeat(beatText, executor);
        var ret = okhttp3_HttpUrl_clz_method_url_0157.call(this);
        printBeat(beat);
        return ret;
    };
    var okhttp3_HttpUrl_clz_method_parse_4513 = okhttp3_HttpUrl_clz.parse.overload('java.lang.String');
    okhttp3_HttpUrl_clz_method_parse_4513.implementation = function(v0) {
        var executor = 'Class';
        var beatText = 'public static okhttp3.HttpUrl okhttp3.HttpUrl.parse(java.lang.String)';
        var beat = newMethodBeat(beatText, executor);
        var ret = okhttp3_HttpUrl_clz_method_parse_4513.call(okhttp3_HttpUrl_clz, v0);
        printBeat(beat);
        return ret;
    };
    var okhttp3_HttpUrl_clz_method_queryParameterName_9839 = okhttp3_HttpUrl_clz.queryParameterName.overload('int');
    okhttp3_HttpUrl_clz_method_queryParameterName_9839.implementation = function(v0) {
        var executor = this.hashCode();
        var beatText = 'public final java.lang.String okhttp3.HttpUrl.queryParameterName(int)';
        var beat = newMethodBeat(beatText, executor);
        var ret = okhttp3_HttpUrl_clz_method_queryParameterName_9839.call(this, v0);
        printBeat(beat);
        return ret;
    };
    var okhttp3_HttpUrl_clz_method_port_9939 = okhttp3_HttpUrl_clz.port.overload();
    okhttp3_HttpUrl_clz_method_port_9939.implementation = function() {
        var executor = this.hashCode();
        var beatText = 'public final int okhttp3.HttpUrl.port()';
        var beat = newMethodBeat(beatText, executor);
        var ret = okhttp3_HttpUrl_clz_method_port_9939.call(this);
        printBeat(beat);
        return ret;
    };
    var okhttp3_HttpUrl_clz_method_canonicalize_8925 = okhttp3_HttpUrl_clz.canonicalize.overload('java.lang.String', 'int', 'int', 'java.lang.String', 'boolean', 'boolean', 'boolean', 'boolean', 'java.nio.charset.Charset');
    okhttp3_HttpUrl_clz_method_canonicalize_8925.implementation = function(v0, v1, v2, v3, v4, v5, v6, v7, v8) {
        var executor = 'Class';
        var beatText = 'public static java.lang.String okhttp3.HttpUrl.canonicalize(java.lang.String,int,int,java.lang.String,boolean,boolean,boolean,boolean,java.nio.charset.Charset)';
        var beat = newMethodBeat(beatText, executor);
        var ret = okhttp3_HttpUrl_clz_method_canonicalize_8925.call(okhttp3_HttpUrl_clz, v0, v1, v2, v3, v4, v5, v6, v7, v8);
        printBeat(beat);
        return ret;
    };
    var okhttp3_HttpUrl_clz_method_encodedPassword_0503 = okhttp3_HttpUrl_clz.encodedPassword.overload();
    okhttp3_HttpUrl_clz_method_encodedPassword_0503.implementation = function() {
        var executor = this.hashCode();
        var beatText = 'public final java.lang.String okhttp3.HttpUrl.encodedPassword()';
        var beat = newMethodBeat(beatText, executor);
        var ret = okhttp3_HttpUrl_clz_method_encodedPassword_0503.call(this);
        printBeat(beat);
        return ret;
    };
    var okhttp3_HttpUrl_clz_method_queryParameter_5207 = okhttp3_HttpUrl_clz.queryParameter.overload('java.lang.String');
    okhttp3_HttpUrl_clz_method_queryParameter_5207.implementation = function(v0) {
        var executor = this.hashCode();
        var beatText = 'public final java.lang.String okhttp3.HttpUrl.queryParameter(java.lang.String)';
        var beat = newMethodBeat(beatText, executor);
        var ret = okhttp3_HttpUrl_clz_method_queryParameter_5207.call(this, v0);
        printBeat(beat);
        return ret;
    };
    var okhttp3_HttpUrl_clz_method_toString_5012 = okhttp3_HttpUrl_clz.toString.overload();
    okhttp3_HttpUrl_clz_method_toString_5012.implementation = function() {
        var executor = this.hashCode();
        var beatText = 'public final java.lang.String okhttp3.HttpUrl.toString()';
        var beat = newMethodBeat(beatText, executor);
        var ret = okhttp3_HttpUrl_clz_method_toString_5012.call(this);
        printBeat(beat);
        return ret;
    };
    var okhttp3_HttpUrl_clz_method_canonicalize_3077 = okhttp3_HttpUrl_clz.canonicalize.overload('java.lang.String', 'java.lang.String', 'boolean', 'boolean', 'boolean', 'boolean', 'java.nio.charset.Charset');
    okhttp3_HttpUrl_clz_method_canonicalize_3077.implementation = function(v0, v1, v2, v3, v4, v5, v6) {
        var executor = 'Class';
        var beatText = 'public static java.lang.String okhttp3.HttpUrl.canonicalize(java.lang.String,java.lang.String,boolean,boolean,boolean,boolean,java.nio.charset.Charset)';
        var beat = newMethodBeat(beatText, executor);
        var ret = okhttp3_HttpUrl_clz_method_canonicalize_3077.call(okhttp3_HttpUrl_clz, v0, v1, v2, v3, v4, v5, v6);
        printBeat(beat);
        return ret;
    };
    var okhttp3_HttpUrl_clz_method_encodedPath_2022 = okhttp3_HttpUrl_clz.encodedPath.overload();
    okhttp3_HttpUrl_clz_method_encodedPath_2022.implementation = function() {
        var executor = this.hashCode();
        var beatText = 'public final java.lang.String okhttp3.HttpUrl.encodedPath()';
        var beat = newMethodBeat(beatText, executor);
        var ret = okhttp3_HttpUrl_clz_method_encodedPath_2022.call(this);
        printBeat(beat);
        return ret;
    };
    var okhttp3_HttpUrl_clz_method_percentDecode_3846 = okhttp3_HttpUrl_clz.percentDecode.overload('java.lang.String', 'int', 'int', 'boolean');
    okhttp3_HttpUrl_clz_method_percentDecode_3846.implementation = function(v0, v1, v2, v3) {
        var executor = 'Class';
        var beatText = 'public static java.lang.String okhttp3.HttpUrl.percentDecode(java.lang.String,int,int,boolean)';
        var beat = newMethodBeat(beatText, executor);
        var ret = okhttp3_HttpUrl_clz_method_percentDecode_3846.call(okhttp3_HttpUrl_clz, v0, v1, v2, v3);
        printBeat(beat);
        return ret;
    };
    var okhttp3_HttpUrl_clz_method_scheme_2975 = okhttp3_HttpUrl_clz.scheme.overload();
    okhttp3_HttpUrl_clz_method_scheme_2975.implementation = function() {
        var executor = this.hashCode();
        var beatText = 'public final java.lang.String okhttp3.HttpUrl.scheme()';
        var beat = newMethodBeat(beatText, executor);
        var ret = okhttp3_HttpUrl_clz_method_scheme_2975.call(this);
        printBeat(beat);
        return ret;
    };
    var okhttp3_HttpUrl_clz_method_newBuilder_7257 = okhttp3_HttpUrl_clz.newBuilder.overload('java.lang.String');
    okhttp3_HttpUrl_clz_method_newBuilder_7257.implementation = function(v0) {
        var executor = this.hashCode();
        var beatText = 'public final okhttp3.HttpUrl$Builder okhttp3.HttpUrl.newBuilder(java.lang.String)';
        var beat = newMethodBeat(beatText, executor);
        var ret = okhttp3_HttpUrl_clz_method_newBuilder_7257.call(this, v0);
        printBeat(beat);
        return ret;
    };
    var okhttp3_HttpUrl_clz_method_queryParameterValue_1549 = okhttp3_HttpUrl_clz.queryParameterValue.overload('int');
    okhttp3_HttpUrl_clz_method_queryParameterValue_1549.implementation = function(v0) {
        var executor = this.hashCode();
        var beatText = 'public final java.lang.String okhttp3.HttpUrl.queryParameterValue(int)';
        var beat = newMethodBeat(beatText, executor);
        var ret = okhttp3_HttpUrl_clz_method_queryParameterValue_1549.call(this, v0);
        printBeat(beat);
        return ret;
    };
    var okhttp3_HttpUrl_clz_method_get_0208 = okhttp3_HttpUrl_clz.get.overload('java.net.URL');
    okhttp3_HttpUrl_clz_method_get_0208.implementation = function(v0) {
        var executor = 'Class';
        var beatText = 'public static okhttp3.HttpUrl okhttp3.HttpUrl.get(java.net.URL)';
        var beat = newMethodBeat(beatText, executor);
        var ret = okhttp3_HttpUrl_clz_method_get_0208.call(okhttp3_HttpUrl_clz, v0);
        printBeat(beat);
        return ret;
    };
    var okhttp3_HttpUrl_clz_method_password_9104 = okhttp3_HttpUrl_clz.password.overload();
    okhttp3_HttpUrl_clz_method_password_9104.implementation = function() {
        var executor = this.hashCode();
        var beatText = 'public final java.lang.String okhttp3.HttpUrl.password()';
        var beat = newMethodBeat(beatText, executor);
        var ret = okhttp3_HttpUrl_clz_method_password_9104.call(this);
        printBeat(beat);
        return ret;
    };
    var okhttp3_HttpUrl_clz_method_pathSegmentsToString_8751 = okhttp3_HttpUrl_clz.pathSegmentsToString.overload('java.lang.StringBuilder', 'java.util.List');
    okhttp3_HttpUrl_clz_method_pathSegmentsToString_8751.implementation = function(v0, v1) {
        var executor = 'Class';
        var beatText = 'public static void okhttp3.HttpUrl.pathSegmentsToString(java.lang.StringBuilder,java.util.List)';
        var beat = newMethodBeat(beatText, executor);
        okhttp3_HttpUrl_clz_method_pathSegmentsToString_8751.call(okhttp3_HttpUrl_clz, v0, v1);
        printBeat(beat);
    };
    var okhttp3_HttpUrl_clz_method_getChecked_8188 = okhttp3_HttpUrl_clz.getChecked.overload('java.lang.String');
    okhttp3_HttpUrl_clz_method_getChecked_8188.implementation = function(v0) {
        var executor = 'Class';
        var beatText = 'public static okhttp3.HttpUrl okhttp3.HttpUrl.getChecked(java.lang.String) throws java.net.MalformedURLException,java.net.UnknownHostException';
        var beat = newMethodBeat(beatText, executor);
        var ret = okhttp3_HttpUrl_clz_method_getChecked_8188.call(okhttp3_HttpUrl_clz, v0);
        printBeat(beat);
        return ret;
    };
    var okhttp3_HttpUrl_clz_method_pathSegments_0753 = okhttp3_HttpUrl_clz.pathSegments.overload();
    okhttp3_HttpUrl_clz_method_pathSegments_0753.implementation = function() {
        var executor = this.hashCode();
        var beatText = 'public final java.util.List okhttp3.HttpUrl.pathSegments()';
        var beat = newMethodBeat(beatText, executor);
        var ret = okhttp3_HttpUrl_clz_method_pathSegments_0753.call(this);
        printBeat(beat);
        return ret;
    };
    var okhttp3_HttpUrl_clz_method_encodedUsername_2378 = okhttp3_HttpUrl_clz.encodedUsername.overload();
    okhttp3_HttpUrl_clz_method_encodedUsername_2378.implementation = function() {
        var executor = this.hashCode();
        var beatText = 'public final java.lang.String okhttp3.HttpUrl.encodedUsername()';
        var beat = newMethodBeat(beatText, executor);
        var ret = okhttp3_HttpUrl_clz_method_encodedUsername_2378.call(this);
        printBeat(beat);
        return ret;
    };
    var okhttp3_HttpUrl_clz_method_queryParameterValues_6878 = okhttp3_HttpUrl_clz.queryParameterValues.overload('java.lang.String');
    okhttp3_HttpUrl_clz_method_queryParameterValues_6878.implementation = function(v0) {
        var executor = this.hashCode();
        var beatText = 'public final java.util.List okhttp3.HttpUrl.queryParameterValues(java.lang.String)';
        var beat = newMethodBeat(beatText, executor);
        var ret = okhttp3_HttpUrl_clz_method_queryParameterValues_6878.call(this, v0);
        printBeat(beat);
        return ret;
    };
    var okhttp3_HttpUrl_clz_method_querySize_8078 = okhttp3_HttpUrl_clz.querySize.overload();
    okhttp3_HttpUrl_clz_method_querySize_8078.implementation = function() {
        var executor = this.hashCode();
        var beatText = 'public final int okhttp3.HttpUrl.querySize()';
        var beat = newMethodBeat(beatText, executor);
        var ret = okhttp3_HttpUrl_clz_method_querySize_8078.call(this);
        printBeat(beat);
        return ret;
    };
    var okhttp3_HttpUrl_clz_method_redact_1219 = okhttp3_HttpUrl_clz.redact.overload();
    okhttp3_HttpUrl_clz_method_redact_1219.implementation = function() {
        var executor = this.hashCode();
        var beatText = 'public final java.lang.String okhttp3.HttpUrl.redact()';
        var beat = newMethodBeat(beatText, executor);
        var ret = okhttp3_HttpUrl_clz_method_redact_1219.call(this);
        printBeat(beat);
        return ret;
    };
    var okhttp3_HttpUrl_clz_method_queryStringToNamesAndValues_2774 = okhttp3_HttpUrl_clz.queryStringToNamesAndValues.overload('java.lang.String');
    okhttp3_HttpUrl_clz_method_queryStringToNamesAndValues_2774.implementation = function(v0) {
        var executor = 'Class';
        var beatText = 'public static java.util.List okhttp3.HttpUrl.queryStringToNamesAndValues(java.lang.String)';
        var beat = newMethodBeat(beatText, executor);
        var ret = okhttp3_HttpUrl_clz_method_queryStringToNamesAndValues_2774.call(okhttp3_HttpUrl_clz, v0);
        printBeat(beat);
        return ret;
    };
    var okhttp3_HttpUrl_clz_method_newBuilder_5594 = okhttp3_HttpUrl_clz.newBuilder.overload();
    okhttp3_HttpUrl_clz_method_newBuilder_5594.implementation = function() {
        var executor = this.hashCode();
        var beatText = 'public final okhttp3.HttpUrl$Builder okhttp3.HttpUrl.newBuilder()';
        var beat = newMethodBeat(beatText, executor);
        var ret = okhttp3_HttpUrl_clz_method_newBuilder_5594.call(this);
        printBeat(beat);
        return ret;
    };
    var okhttp3_HttpUrl_clz_method_fragment_6676 = okhttp3_HttpUrl_clz.fragment.overload();
    okhttp3_HttpUrl_clz_method_fragment_6676.implementation = function() {
        var executor = this.hashCode();
        var beatText = 'public final java.lang.String okhttp3.HttpUrl.fragment()';
        var beat = newMethodBeat(beatText, executor);
        var ret = okhttp3_HttpUrl_clz_method_fragment_6676.call(this);
        printBeat(beat);
        return ret;
    };
    var okhttp3_HttpUrl_clz_method_queryParameterNames_4048 = okhttp3_HttpUrl_clz.queryParameterNames.overload();
    okhttp3_HttpUrl_clz_method_queryParameterNames_4048.implementation = function() {
        var executor = this.hashCode();
        var beatText = 'public final java.util.Set okhttp3.HttpUrl.queryParameterNames()';
        var beat = newMethodBeat(beatText, executor);
        var ret = okhttp3_HttpUrl_clz_method_queryParameterNames_4048.call(this);
        printBeat(beat);
        return ret;
    };
    var okhttp3_HttpUrl_clz_method_canonicalize_1546 = okhttp3_HttpUrl_clz.canonicalize.overload('java.lang.String', 'java.lang.String', 'boolean', 'boolean', 'boolean', 'boolean');
    okhttp3_HttpUrl_clz_method_canonicalize_1546.implementation = function(v0, v1, v2, v3, v4, v5) {
        var executor = 'Class';
        var beatText = 'public static java.lang.String okhttp3.HttpUrl.canonicalize(java.lang.String,java.lang.String,boolean,boolean,boolean,boolean)';
        var beat = newMethodBeat(beatText, executor);
        var ret = okhttp3_HttpUrl_clz_method_canonicalize_1546.call(okhttp3_HttpUrl_clz, v0, v1, v2, v3, v4, v5);
        printBeat(beat);
        return ret;
    };
    var okhttp3_HttpUrl_clz_method_canonicalize_2117 = okhttp3_HttpUrl_clz.canonicalize.overload('okio.Buffer', 'java.lang.String', 'int', 'int', 'java.lang.String', 'boolean', 'boolean', 'boolean', 'boolean', 'java.nio.charset.Charset');
    okhttp3_HttpUrl_clz_method_canonicalize_2117.implementation = function(v0, v1, v2, v3, v4, v5, v6, v7, v8, v9) {
        var executor = 'Class';
        var beatText = 'public static void okhttp3.HttpUrl.canonicalize(okio.Buffer,java.lang.String,int,int,java.lang.String,boolean,boolean,boolean,boolean,java.nio.charset.Charset)';
        var beat = newMethodBeat(beatText, executor);
        okhttp3_HttpUrl_clz_method_canonicalize_2117.call(okhttp3_HttpUrl_clz, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9);
        printBeat(beat);
    };
    var okhttp3_HttpUrl_clz_method_isHttps_5482 = okhttp3_HttpUrl_clz.isHttps.overload();
    okhttp3_HttpUrl_clz_method_isHttps_5482.implementation = function() {
        var executor = this.hashCode();
        var beatText = 'public final boolean okhttp3.HttpUrl.isHttps()';
        var beat = newMethodBeat(beatText, executor);
        var ret = okhttp3_HttpUrl_clz_method_isHttps_5482.call(this);
        printBeat(beat);
        return ret;
    };
    var okhttp3_HttpUrl_clz_method_resolve_8721 = okhttp3_HttpUrl_clz.resolve.overload('java.lang.String');
    okhttp3_HttpUrl_clz_method_resolve_8721.implementation = function(v0) {
        var executor = this.hashCode();
        var beatText = 'public final okhttp3.HttpUrl okhttp3.HttpUrl.resolve(java.lang.String)';
        var beat = newMethodBeat(beatText, executor);
        var ret = okhttp3_HttpUrl_clz_method_resolve_8721.call(this, v0);
        printBeat(beat);
        return ret;
    };
    var okhttp3_HttpUrl_clz_method_percentDecode_4953 = okhttp3_HttpUrl_clz.percentDecode.overload('okio.Buffer', 'java.lang.String', 'int', 'int', 'boolean');
    okhttp3_HttpUrl_clz_method_percentDecode_4953.implementation = function(v0, v1, v2, v3, v4) {
        var executor = 'Class';
        var beatText = 'public static void okhttp3.HttpUrl.percentDecode(okio.Buffer,java.lang.String,int,int,boolean)';
        var beat = newMethodBeat(beatText, executor);
        okhttp3_HttpUrl_clz_method_percentDecode_4953.call(okhttp3_HttpUrl_clz, v0, v1, v2, v3, v4);
        printBeat(beat);
    };
    var okhttp3_HttpUrl_clz_method_get_9104 = okhttp3_HttpUrl_clz.get.overload('java.net.URI');
    okhttp3_HttpUrl_clz_method_get_9104.implementation = function(v0) {
        var executor = 'Class';
        var beatText = 'public static okhttp3.HttpUrl okhttp3.HttpUrl.get(java.net.URI)';
        var beat = newMethodBeat(beatText, executor);
        var ret = okhttp3_HttpUrl_clz_method_get_9104.call(okhttp3_HttpUrl_clz, v0);
        printBeat(beat);
        return ret;
    };
    var okhttp3_HttpUrl_clz_method_username_7512 = okhttp3_HttpUrl_clz.username.overload();
    okhttp3_HttpUrl_clz_method_username_7512.implementation = function() {
        var executor = this.hashCode();
        var beatText = 'public final java.lang.String okhttp3.HttpUrl.username()';
        var beat = newMethodBeat(beatText, executor);
        var ret = okhttp3_HttpUrl_clz_method_username_7512.call(this);
        printBeat(beat);
        return ret;
    };
    var okhttp3_HttpUrl_clz_method_defaultPort_3581 = okhttp3_HttpUrl_clz.defaultPort.overload('java.lang.String');
    okhttp3_HttpUrl_clz_method_defaultPort_3581.implementation = function(v0) {
        var executor = 'Class';
        var beatText = 'public static int okhttp3.HttpUrl.defaultPort(java.lang.String)';
        var beat = newMethodBeat(beatText, executor);
        var ret = okhttp3_HttpUrl_clz_method_defaultPort_3581.call(okhttp3_HttpUrl_clz, v0);
        printBeat(beat);
        return ret;
    };
    var okhttp3_HttpUrl_clz_method_topPrivateDomain_5533 = okhttp3_HttpUrl_clz.topPrivateDomain.overload();
    okhttp3_HttpUrl_clz_method_topPrivateDomain_5533.implementation = function() {
        var executor = this.hashCode();
        var beatText = 'public final java.lang.String okhttp3.HttpUrl.topPrivateDomain()';
        var beat = newMethodBeat(beatText, executor);
        var ret = okhttp3_HttpUrl_clz_method_topPrivateDomain_5533.call(this);
        printBeat(beat);
        return ret;
    };
    var okhttp3_HttpUrl_clz_method_percentDecode_8474 = okhttp3_HttpUrl_clz.percentDecode.overload('java.lang.String', 'boolean');
    okhttp3_HttpUrl_clz_method_percentDecode_8474.implementation = function(v0, v1) {
        var executor = 'Class';
        var beatText = 'public static java.lang.String okhttp3.HttpUrl.percentDecode(java.lang.String,boolean)';
        var beat = newMethodBeat(beatText, executor);
        var ret = okhttp3_HttpUrl_clz_method_percentDecode_8474.call(okhttp3_HttpUrl_clz, v0, v1);
        printBeat(beat);
        return ret;
    };
    var okhttp3_HttpUrl_clz_method_encodedQuery_2429 = okhttp3_HttpUrl_clz.encodedQuery.overload();
    okhttp3_HttpUrl_clz_method_encodedQuery_2429.implementation = function() {
        var executor = this.hashCode();
        var beatText = 'public final java.lang.String okhttp3.HttpUrl.encodedQuery()';
        var beat = newMethodBeat(beatText, executor);
        var ret = okhttp3_HttpUrl_clz_method_encodedQuery_2429.call(this);
        printBeat(beat);
        return ret;
    };
    var okhttp3_HttpUrl_clz_method_pathSize_8042 = okhttp3_HttpUrl_clz.pathSize.overload();
    okhttp3_HttpUrl_clz_method_pathSize_8042.implementation = function() {
        var executor = this.hashCode();
        var beatText = 'public final int okhttp3.HttpUrl.pathSize()';
        var beat = newMethodBeat(beatText, executor);
        var ret = okhttp3_HttpUrl_clz_method_pathSize_8042.call(this);
        printBeat(beat);
        return ret;
    };
    var okhttp3_HttpUrl_clz_method_encodedPathSegments_0306 = okhttp3_HttpUrl_clz.encodedPathSegments.overload();
    okhttp3_HttpUrl_clz_method_encodedPathSegments_0306.implementation = function() {
        var executor = this.hashCode();
        var beatText = 'public final java.util.List okhttp3.HttpUrl.encodedPathSegments()';
        var beat = newMethodBeat(beatText, executor);
        var ret = okhttp3_HttpUrl_clz_method_encodedPathSegments_0306.call(this);
        printBeat(beat);
        return ret;
    };
    var okhttp3_HttpUrl_clz_method_hashCode_5973 = okhttp3_HttpUrl_clz.hashCode.overload();
    okhttp3_HttpUrl_clz_method_hashCode_5973.implementation = function() {
        var executor = this.hashCode();
        var beatText = 'public final int okhttp3.HttpUrl.hashCode()';
        var beat = newMethodBeat(beatText, executor);
        var ret = okhttp3_HttpUrl_clz_method_hashCode_5973.call(this);
        printBeat(beat);
        return ret;
    };
    var okhttp3_HttpUrl_clz_method_host_4565 = okhttp3_HttpUrl_clz.host.overload();
    okhttp3_HttpUrl_clz_method_host_4565.implementation = function() {
        var executor = this.hashCode();
        var beatText = 'public final java.lang.String okhttp3.HttpUrl.host()';
        var beat = newMethodBeat(beatText, executor);
        var ret = okhttp3_HttpUrl_clz_method_host_4565.call(this);
        printBeat(beat);
        return ret;
    };
    var okhttp3_HttpUrl_clz_method_percentEncoded_6634 = okhttp3_HttpUrl_clz.percentEncoded.overload('java.lang.String', 'int', 'int');
    okhttp3_HttpUrl_clz_method_percentEncoded_6634.implementation = function(v0, v1, v2) {
        var executor = 'Class';
        var beatText = 'public static boolean okhttp3.HttpUrl.percentEncoded(java.lang.String,int,int)';
        var beat = newMethodBeat(beatText, executor);
        var ret = okhttp3_HttpUrl_clz_method_percentEncoded_6634.call(okhttp3_HttpUrl_clz, v0, v1, v2);
        printBeat(beat);
        return ret;
    };
    var okhttp3_HttpUrl_clz_method_percentDecode_2203 = okhttp3_HttpUrl_clz.percentDecode.overload('java.util.List', 'boolean');
    okhttp3_HttpUrl_clz_method_percentDecode_2203.implementation = function(v0, v1) {
        var executor = this.hashCode();
        var beatText = 'private java.util.List okhttp3.HttpUrl.percentDecode(java.util.List,boolean)';
        var beat = newMethodBeat(beatText, executor);
        var ret = okhttp3_HttpUrl_clz_method_percentDecode_2203.call(this, v0, v1);
        printBeat(beat);
        return ret;
    };
    var okhttp3_HttpUrl_clz_init_2067 = okhttp3_HttpUrl_clz.$init.overload('okhttp3.HttpUrl$Builder');
    okhttp3_HttpUrl_clz_init_2067.implementation = function(v0) {
        var executor = this.hashCode();
        var beatText = 'public okhttp3.HttpUrl(okhttp3.HttpUrl$Builder)';
        var beat = newMethodBeat(beatText, executor);
        var returnObj = okhttp3_HttpUrl_clz_init_2067.call(this, v0);
        printBeat(beat);
        return returnObj;
    };
});


只要有调用自动打印堆栈:
[Pixel::com.ss.android.ugc.aweme]-> ------------pid:10604,startFlag:04431755,objectHash:Class,thread(id:658,name:NetNormal#56),timestamp:1615467727772---------------
public static java.lang.String okhttp3.HttpUrl.percentDecode(java.lang.String,int,int,boolean)
    at okhttp3.HttpUrl.percentDecode(Native Method)
    at okhttp3.HttpUrl$Builder.canonicalizeHost(HttpUrl.java:50462721)
    at okhttp3.HttpUrl$Builder.parse(HttpUrl.java:34013471)
    at okhttp3.HttpUrl.parse(HttpUrl.java:16973830)
    at okhttp3.HttpUrl.parse(Native Method)
    at com.bytedance.retrofit2.RequestBuilder.build(RequestBuilder.java:17236020)
    at com.bytedance.retrofit2.ServiceMethod.ServiceMethod__toRequest$___twin___(ServiceMethod.java:33947793)
    at com.bytedance.retrofit2.ServiceMethod.com_bytedance_retrofit2_ServiceMethod_com_ss_android_ugc_aweme_lancet_network_ConvertLancet_toRequest(ServiceMethod.java:50593823)
    at com.bytedance.retrofit2.ServiceMethod.toRequest(Unknown Source:27)
    at com.bytedance.retrofit2.SsHttpCall$1.run(SsHttpCall.java:327729)
    at com.bytedance.frameworks.baselib.network.dispatcher.a.run(ApiTask.java:262173)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
    at java.lang.Thread.run(Thread.java:919)
    at com.bytedance.frameworks.baselib.network.dispatcher.d$b$1.run(NetThreadPoolManager.java:196630)
------------endFlag:04431755,usedtime:8---------------

------------pid:10604,startFlag:56108498,objectHash:Class,thread(id:658,name:NetNormal#56),timestamp:1615467727807---------------
public static java.lang.String okhttp3.HttpUrl.percentDecode(java.lang.String,int,int,boolean)
    at okhttp3.HttpUrl.percentDecode(Native Method)
    at okhttp3.HttpUrl$Builder.canonicalizeHost(HttpUrl.java:50462721)
    at okhttp3.HttpUrl$Builder.parse(HttpUrl.java:34013471)
    at okhttp3.HttpUrl.parse(HttpUrl.java:16973830)
    at okhttp3.HttpUrl.parse(Native Method)
    at com.bytedance.retrofit2.RequestBuilder.build(RequestBuilder.java:17236020)
    at com.bytedance.retrofit2.ServiceMethod.ServiceMethod__toRequest$___twin___(ServiceMethod.java:33947793)
    at com.bytedance.retrofit2.ServiceMethod.com_bytedance_retrofit2_ServiceMethod_com_ss_android_ugc_aweme_lancet_network_ConvertLancet_toRequest(ServiceMethod.java:50593823)
    at com.bytedance.retrofit2.ServiceMethod.toRequest(Unknown Source:27)
    at com.bytedance.retrofit2.SsHttpCall.request(SsHttpCall.java:327733)
    at com.ss.android.ugc.aweme.app.api.a$b$1.a(ForceLogoutTTCallAdapterFactory.java:17039382)
    at com.google.common.util.concurrent.i$a.run(Futures.java:196636)
    at com.google.common.util.concurrent.m$a.execute(MoreExecutors.java:16777216)
    at com.google.common.util.concurrent.b.a(AbstractFuture.java:34013184)
    at com.google.common.util.concurrent.b.a(AbstractFuture.java:17170479)
    at com.google.common.util.concurrent.b.a(AbstractFuture.java:713)
    at com.ss.android.ugc.aweme.app.api.n$a$1$1.onFailure(TTGuavaCallAdapterFactory.java:33751065)
    at com.bytedance.retrofit2.SsHttpCall$1.callFailure(SsHttpCall.java:16973848)
    at com.bytedance.retrofit2.SsHttpCall$1.run(SsHttpCall.java:327759)
    at com.bytedance.frameworks.baselib.network.dispatcher.a.run(ApiTask.java:262173)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
    at java.lang.Thread.run(Thread.java:919)
    at com.bytedance.frameworks.baselib.network.dispatcher.d$b$1.run(NetThreadPoolManager.java:196630)
------------endFlag:56108498,usedtime:3---------------

------------pid:10604,startFlag:54796762,objectHash:Class,thread(id:659,name:NetNormal#57),timestamp:1615467728327---------------
public static java.lang.String okhttp3.HttpUrl.percentDecode(java.lang.String,int,int,boolean)
    at okhttp3.HttpUrl.percentDecode(Native Method)
    at okhttp3.HttpUrl$Builder.canonicalizeHost(HttpUrl.java:50462721)
    at okhttp3.HttpUrl$

因为在方法里面打印堆栈的代码也一起生成了

 

backtrace:
      #00 pc 000e012e  /apex/com.android.runtime/lib/libart.so!libart.so (offset 0xe0000) (art::ArtMethod::PrettyMethod(bool)+58) (BuildId: 71c71d3389a2e6b48c870366df51ee04)
      #01 pc 000e08cd  /apex/com.android.runtime/lib/libart.so!libart.so (offset 0xe0000) (art::ArtMethod::GetOatQuickMethodHeader(unsigned int)+336) (BuildId: 71c71d3389a2e6b48c870366df51ee04)
      #02 pc 00000707  <anonymous:e1984000>
***

Thank you for using Frida!
Fatal Python error: could not acquire lock for <_io.BufferedReader name='<stdin>'> at interpreter shutdown, possibly due to daemon threads
Python runtime state: finalizing (tstate=0x7f98c4700d50)

Thread 0x000070000eb8c000 (most recent call first):
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/frida_tools/repl.py", line 1014 in get_input
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/frida_tools/repl.py", line 907 in _process_requests
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/threading.py", line 870 in run
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/threading.py", line 932 in _bootstrap_inner
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/threading.py", line 890 in _bootstrap

Current thread 0x00007fffe33563c0 (most recent call first):
<no Python frame>

最后崩溃了是因为我们每个方法都hook,造成frida工作负载太高崩溃了。

最明智的方法是我们只hook某个确定的方法


//okhttp3.HttpUrl:percentDecode  这里标明了你生成这个脚本的命令,所有的percentDecode方法全部hook了
Java.perform(function() {
    var okhttp3_HttpUrl_clz = Java.use('okhttp3.HttpUrl');
    var okhttp3_HttpUrl_clz_method_percentDecode_9503 = okhttp3_HttpUrl_clz.percentDecode.overload('java.lang.String', 'int', 'int', 'boolean');
    okhttp3_HttpUrl_clz_method_percentDecode_9503.implementation = function(v0, v1, v2, v3) {
        var executor = 'Class';
        var beatText = 'public static java.lang.String okhttp3.HttpUrl.percentDecode(java.lang.String,int,int,boolean)';
        var beat = newMethodBeat(beatText, executor);
        var ret = okhttp3_HttpUrl_clz_method_percentDecode_9503.call(okhttp3_HttpUrl_clz, v0, v1, v2, v3);
        printBeat(beat);
        return ret;
    };
    var okhttp3_HttpUrl_clz_method_percentDecode_4763 = okhttp3_HttpUrl_clz.percentDecode.overload('okio.Buffer', 'java.lang.String', 'int', 'int', 'boolean');
    okhttp3_HttpUrl_clz_method_percentDecode_4763.implementation = function(v0, v1, v2, v3, v4) {
        var executor = 'Class';
        var beatText = 'public static void okhttp3.HttpUrl.percentDecode(okio.Buffer,java.lang.String,int,int,boolean)';
        var beat = newMethodBeat(beatText, executor);
        okhttp3_HttpUrl_clz_method_percentDecode_4763.call(okhttp3_HttpUrl_clz, v0, v1, v2, v3, v4);
        printBeat(beat);
    };
    var okhttp3_HttpUrl_clz_method_percentDecode_6306 = okhttp3_HttpUrl_clz.percentDecode.overload('java.lang.String', 'boolean');
    okhttp3_HttpUrl_clz_method_percentDecode_6306.implementation = function(v0, v1) {
        var executor = 'Class';
        var beatText = 'public static java.lang.String okhttp3.HttpUrl.percentDecode(java.lang.String,boolean)';
        var beat = newMethodBeat(beatText, executor);
        var ret = okhttp3_HttpUrl_clz_method_percentDecode_6306.call(okhttp3_HttpUrl_clz, v0, v1);
        printBeat(beat);
        return ret;
    };
    var okhttp3_HttpUrl_clz_method_percentDecode_6848 = okhttp3_HttpUrl_clz.percentDecode.overload('java.util.List', 'boolean');
    okhttp3_HttpUrl_clz_method_percentDecode_6848.implementation = function(v0, v1) {
        var executor = this.hashCode();
        var beatText = 'private java.util.List okhttp3.HttpUrl.percentDecode(java.util.List,boolean)';
        var beat = newMethodBeat(beatText, executor);
        var ret = okhttp3_HttpUrl_clz_method_percentDecode_6848.call(this, v0, v1);
        printBeat(beat);
        return ret;
    };
});

你可以定制化打印写参数

    var okhttp3_HttpUrl_clz_method_percentDecode_6848 = okhttp3_HttpUrl_clz.percentDecode.overload('java.util.List', 'boolean');
    okhttp3_HttpUrl_clz_method_percentDecode_6848.implementation = function(v0, v1) {
        log(v0 + "  >>>" +v1);
        var executor = this.hashCode();
        var beatText = 'private java.util.List okhttp3.HttpUrl.percentDecode(java.util.List,boolean)';
        var beat = newMethodBeat(beatText, executor);
        var ret = okhttp3_HttpUrl_clz_method_percentDecode_6848.call(this, v0, v1);
        printBeat(beat);
        return ret;
    };


 [object Object]  >>>false
https://mon.snssdk.com/monitor/collect/?sdk_version=400&device_id=2840782132759608&app_version=15.0.0&package_name=com.ss.android.ugc.aweme&channel=tengxun_1128_0226&device_platform=android&sdkmonitor_version=2.0.35-rc.3&aid=2033&minor_version=1&tt_data=a  >>>8
------------pid:15103,startFlag:78197614,objectHash:Class,thread(id:360,name:LogSender),timestamp:1615468200551---------------
public static java.lang.String okhttp3.HttpUrl.percentDecode(java.lang.String,int,int,boolean)
    at okhttp3.HttpUrl.percentDecode(Native Method)
    at okhttp3.HttpUrl$Builder.canonicalizeHost(HttpUrl.java:50462721)
    at okhttp3.HttpUrl$Builder.parse(HttpUrl.java:34013471)
    at okhttp3.HttpUrl.parse(HttpUrl.java:16973830)
    at com.bytedance.retrofit2.RequestBuilder.build(RequestBuilder.java:17236020)
    at com.bytedance.retrofit2.ServiceMethod.ServiceMethod__toRequest$___twin___(ServiceMethod.java:33947793)
    at com.bytedance.retrofit2.ServiceMethod.com_bytedance_retrofit2_ServiceMethod_com_ss_android_ugc_aweme_lancet_network_ConvertLancet_toRequest(ServiceMethod.java:50593823)
    at com.bytedance.retrofit2.ServiceMethod.toRequest(Unknown Source:27)
    at com.bytedance.retrofit2.SsHttpCall.SsHttpCall__execute$___twin___(SsHttpCall.java:327730)
    at com.bytedance.retrofit2.SsHttpCall.com_bytedance_retrofit2_SsHttpCall_com_ss_android_ugc_aweme_lancet_NetIOCheckLancet_execute(SsHttpCall.java:17104937)
    at com.bytedance.retrofit2.SsHttpCall.execute(Unknown Source:21)
    at com.byte

看到没

 


大家都用objection,看看objection

objection的如何


命令:android hooking generate simple "okhttp3.HttpUrl"
Java.perform(function() {
    var clazz = Java.use('okhttp3.HttpUrl');
    clazz.parse.implementation = function() {

        //

        return clazz.parse.apply(this, arguments);
    }
});


Java.perform(function() {
    var clazz = Java.use('okhttp3.HttpUrl');
    clazz.topPrivateDomain.implementation = function() {

        //

        return clazz.topPrivateDomain.apply(this, arguments);
    }
});


Java.perform(function() {
    var clazz = Java.use('okhttp3.HttpUrl');
    clazz.getChecked.implementation = function() {

        //

        return clazz.getChecked.apply(this, arguments);
    }
});


Java.perform(function() {
    var clazz = Java.use('okhttp3.HttpUrl');
    clazz.redact.implementation = function() {

        //

        return clazz.redact.apply(this, arguments);
    }
});


Java.perform(function() {
    var clazz = Java.use('okhttp3.HttpUrl');
    clazz.get.implementation = function() {

        //

        return clazz.get.apply(this, arguments);
    }
});


Java.perform(function() {
    var clazz = Java.use('okhttp3.HttpUrl');
    clazz.host.implementation = function() {

        //

        return clazz.host.apply(this, arguments);
    }
});


Java.perform(function() {
    var clazz = Java.use('okhttp3.HttpUrl');
    clazz.equals.implementation = function() {

        //

        return clazz.equals.apply(this, arguments);
    }
});


Java.perform(function() {
    var clazz = Java.use('okhttp3.HttpUrl');
    clazz.defaultPort.implementation = function() {

        //

        return clazz.defaultPort.apply(this, arguments);
    }
});


Java.perform(function() {
    var clazz = Java.use('okhttp3.HttpUrl');
    clazz.namesAndValuesToQueryString.implementation = function() {

        //

        return clazz.namesAndValuesToQueryString.apply(this, arguments);
    }
});


Java.perform(function() {
    var clazz = Java.use('okhttp3.HttpUrl');
    clazz.canonicalize.implementation = function() {

        //

        return clazz.canonicalize.apply(this, arguments);
    }
});


Java.perform(function() {
    var clazz = Java.use('okhttp3.HttpUrl');
    clazz.fragment.implementation = function() {

        //

        return clazz.fragment.apply(this, arguments);
    }
});


Java.perform(function() {
    var clazz = Java.use('okhttp3.HttpUrl');
    clazz.query.implementation = function() {

        //

        return clazz.query.apply(this, arguments);
    }
});


Java.perform(function() {
    var clazz = Java.use('okhttp3.HttpUrl');
    clazz.queryParameterValue.implementation = function() {

        //

        return clazz.queryParameterValue.apply(this, arguments);
    }
});


Java.perform(function() {
    var clazz = Java.use('okhttp3.HttpUrl');
    clazz.encodedPath.implementation = function() {

        //

        return clazz.encodedPath.apply(this, arguments);
    }
});


Java.perform(function() {
    var clazz = Java.use('okhttp3.HttpUrl');
    clazz.password.implementation = function() {

        //

        return clazz.password.apply(this, arguments);
    }
});


Java.perform(function() {
    var clazz = Java.use('okhttp3.HttpUrl');
    clazz.queryParameterValues.implementation = function() {

        //

        return clazz.queryParameterValues.apply(this, arguments);
    }
});


Java.perform(function() {
    var clazz = Java.use('okhttp3.HttpUrl');
    clazz.queryStringToNamesAndValues.implementation = function() {

        //

        return clazz.queryStringToNamesAndValues.apply(this, arguments);
    }
});


Java.perform(function() {
    var clazz = Java.use('okhttp3.HttpUrl');
    clazz.encodedUsername.implementation = function() {

        //

        return clazz.encodedUsername.apply(this, arguments);
    }
});


Java.perform(function() {
    var clazz = Java.use('okhttp3.HttpUrl');
    clazz.url.implementation = function() {

        //

        return clazz.url.apply(this, arguments);
    }
});


Java.perform(function() {
    var clazz = Java.use('okhttp3.HttpUrl');
    clazz.encodedPathSegments.implementation = function() {

        //

        return clazz.encodedPathSegments.apply(this, arguments);
    }
});


Java.perform(function() {
    var clazz = Java.use('okhttp3.HttpUrl');
    clazz.uri.implementation = function() {

        //

        return clazz.uri.apply(this, arguments);
    }
});


Java.perform(function() {
    var clazz = Java.use('okhttp3.HttpUrl');
    clazz.queryParameterNames.implementation = function() {

        //

        return clazz.queryParameterNames.apply(this, arguments);
    }
});


Java.perform(function() {
    var clazz = Java.use('okhttp3.HttpUrl');
    clazz.encodedFragment.implementation = function() {

        //

        return clazz.encodedFragment.apply(this, arguments);
    }
});


Java.perform(function() {
    var clazz = Java.use('okhttp3.HttpUrl');
    clazz.port.implementation = function() {

        //

        return clazz.port.apply(this, arguments);
    }
});


Java.perform(function() {
    var clazz = Java.use('okhttp3.HttpUrl');
    clazz.querySize.implementation = function() {

        //

        return clazz.querySize.apply(this, arguments);
    }
});


Java.perform(function() {
    var clazz = Java.use('okhttp3.HttpUrl');
    clazz.hashCode.implementation = function() {

        //

        return clazz.hashCode.apply(this, arguments);
    }
});


Java.perform(function() {
    var clazz = Java.use('okhttp3.HttpUrl');
    clazz.newBuilder.implementation = function() {

        //

        return clazz.newBuilder.apply(this, arguments);
    }
});


Java.perform(function() {
    var clazz = Java.use('okhttp3.HttpUrl');
    clazz.queryParameter.implementation = function() {

        //

        return clazz.queryParameter.apply(this, arguments);
    }
});


Java.perform(function() {
    var clazz = Java.use('okhttp3.HttpUrl');
    clazz.pathSegments.implementation = function() {

        //

        return clazz.pathSegments.apply(this, arguments);
    }
});


Java.perform(function() {
    var clazz = Java.use('okhttp3.HttpUrl');
    clazz.queryParameterName.implementation = function() {

        //

        return clazz.queryParameterName.apply(this, arguments);
    }
});


Java.perform(function() {
    var clazz = Java.use('okhttp3.HttpUrl');
    clazz.resolve.implementation = function() {

        //

        return clazz.resolve.apply(this, arguments);
    }
});


Java.perform(function() {
    var clazz = Java.use('okhttp3.HttpUrl');
    clazz.encodedPassword.implementation = function() {

        //

        return clazz.encodedPassword.apply(this, arguments);
    }
});


Java.perform(function() {
    var clazz = Java.use('okhttp3.HttpUrl');
    clazz.scheme.implementation = function() {

        //

        return clazz.scheme.apply(this, arguments);
    }
});


Java.perform(function() {
    var clazz = Java.use('okhttp3.HttpUrl');
    clazz.percentDecode.implementation = function() {

        //

        return clazz.percentDecode.apply(this, arguments);
    }
});


Java.perform(function() {
    var clazz = Java.use('okhttp3.HttpUrl');
    clazz.toString.implementation = function() {

        //

        return clazz.toString.apply(this, arguments);
    }
});


Java.perform(function() {
    var clazz = Java.use('okhttp3.HttpUrl');
    clazz.encodedQuery.implementation = function() {

        //

        return clazz.encodedQuery.apply(this, arguments);
    }
});


Java.perform(function() {
    var clazz = Java.use('okhttp3.HttpUrl');
    clazz.percentEncoded.implementation = function() {

        //

        return clazz.percentEncoded.apply(this, arguments);
    }
});


Java.perform(function() {
    var clazz = Java.use('okhttp3.HttpUrl');
    clazz.isHttps.implementation = function() {

        //

        return clazz.isHttps.apply(this, arguments);
    }
});


Java.perform(function() {
    var clazz = Java.use('okhttp3.HttpUrl');
    clazz.pathSegmentsToString.implementation = function() {

        //

        return clazz.pathSegmentsToString.apply(this, arguments);
    }
});


Java.perform(function() {
    var clazz = Java.use('okhttp3.HttpUrl');
    clazz.username.implementation = function() {

        //

        return clazz.username.apply(this, arguments);
    }
});


Java.perform(function() {
    var clazz = Java.use('okhttp3.HttpUrl');
    clazz.pathSize.implementation = function() {

        //

        return clazz.pathSize.apply(this, arguments);
    }
});

效果最后大家自评!!!


自我介绍下,本人曾经是安卓应用开发工程师。逆向视角可能和大家有些区别!!!


版权声明:本文为u012572945原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。