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);