-
Notifications
You must be signed in to change notification settings - Fork 223
/
hook_frag.js
79 lines (73 loc) · 3.47 KB
/
hook_frag.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
/* Begin: {{clazz_name}}.{{method_name}} */
{% if is_dynamic %}
var c_{{clazz_hook}} = factory.use("{{clazz_name}}");
{% else %}
var c_{{clazz_hook}} = Java.use("{{clazz_name}}");
{% endif %}
var overloadz_{{clazz_hook}} = eval("c_{{clazz_hook}}.{{method_name}}.overloads");
var ovl_count_{{clazz_hook}} = overloadz_{{clazz_hook}}.length;
var c_{{clazz_hook}}_{{ method_hook }} = null
var cell = {}
{% if overload_type%}
var c_{{clazz_hook}}_{{ method_hook }} = eval("c_{{clazz_hook}}.{{ method_name }}.overload({{overload_type}})")
c_{{clazz_hook}}_{{ method_hook }}.implementation = function () {
var sendback = ''
var hook_signature = '-hoo00ook-'
var method_info = ''
var arg_dump = ''
var arg_type = ''
var ret_type = String(c_{{clazz_hook}}_{{ method_hook }}.returnType['className'])
var retval = null
for (var index = 0; index < arguments.length; index++) {
arg_type += ('argType' + index.toString() + " : " + String(typeof(arguments[index])) + ' ')
arg_dump += ("arg" + index.toString() + ": " + String(arguments[index]) + linebreak)
}
method_info += "Reverse Call Stack: " + linebreak + getCaller() + linebreak + linebreak + c_{{clazz_hook}}_{{ method_hook }}.methodName + '( ' + arg_type+ ') '
// var retval = eval('this.{{ method_name }}.apply(this, arguments)')
try {
retval = eval('this.{{ method_name }}.apply(this, arguments)')
} catch (err) {
retval = null
console.log("Exception - cannot compute retval.." + String(err))
}
var retval_dump = "(" + ret_type + ') : ' + String(retval) + linebreak + "@ " + getTime()
cell = {"method_info" : method_info, "arg_dump" : arg_dump, "retval_dump" : retval_dump}
sendback = hook_signature + JSON.stringify(cell)
// console.log(arg_dump + retval_dump);
send(sendback)
return retval;
}
{% else %}
send("There are " + ovl_count_{{clazz_hook}}.toString() + " methods to hook");
for (var i = 0; i < ovl_count_{{clazz_hook}}; i++) {
var c_{{clazz_hook}}_{{ method_hook }} = eval('c_{{clazz_hook}}.{{ method_name }}.overloads[i]')
c_{{clazz_hook}}_{{ method_hook }}.implementation = function () {
var sendback = ''
var hook_signature = '-hoo00ook-'
var method_info = ''
var arg_dump = ''
var arg_type = ''
var ret_type = String(c_{{clazz_hook}}_{{ method_hook }}.returnType['className'])
var retval = null
for (var index = 0; index < arguments.length; index++) {
arg_type += ('argType' + index.toString() + " : " + String(typeof(arguments[index])) + ' ')
arg_dump += ("arg" + index.toString() + ": " + String(arguments[index]) + linebreak)
}
method_info += "Reverse Call Stack: " + linebreak + getCaller() + linebreak + linebreak + c_{{clazz_hook}}_{{ method_hook }}.methodName + '( ' + arg_type+ ') '
// var retval = eval('this.{{ method_name }}.apply(this, arguments)')
try {
retval = eval('this.{{ method_name }}.apply(this, arguments)')
} catch (err) {
retval = null
console.log("Exception - cannot compute retval.." + String(err))
}
var retval_dump = "(" + ret_type + ') : ' + String(retval) + linebreak + "@ " + getTime()
cell = {"method_info" : method_info, "arg_dump" : arg_dump, "retval_dump" : retval_dump}
sendback = hook_signature + JSON.stringify(cell)
// console.log(arg_dump + retval_dump);
send(sendback)
return retval;
}
}
{% endif %}
/* End: {{clazz_name}}.{{method_name}} */