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);
}
});
效果最后大家自评!!!
自我介绍下,本人曾经是安卓应用开发工程师。逆向视角可能和大家有些区别!!!