forked from CreditTone/hooker
-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathweb_view.js
131 lines (119 loc) · 8.04 KB
/
web_view.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
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
function printStacks(androidLogClz, exceptionClz, methodName) {
var stackInfo = androidLogClz.getStackTraceString(exceptionClz.$new());
console.log(new Date().getTime()+":"+methodName);
console.log(stackInfo.substring(20));
};
Java.perform(function() {
var androidLogClz = Java.use("android.util.Log");
var exceptionClz = Java.use("java.lang.Exception");
var WebView = Java.use("android.webkit.WebView");
var WebSettings = Java.use("android.webkit.WebSettings");
if (WebView.loadUrl) {
//Ref: https://developer.android.com/reference/android/webkit/WebView.html#loadUrl(java.lang.String)
WebView.loadUrl.overloads[0].implementation = function(url) {
//checkSettings(this);
printStacks(androidLogClz, exceptionClz, 'android.webkit.WebView.loadUrl(java.lang.String:' + url + ')');
return this.loadUrl.overloads[0].apply(this, arguments);
};
//Ref: https://developer.android.com/reference/android/webkit/WebView.html#loadUrl(java.lang.String, java.util.Map<java.lang.String, java.lang.String>)
WebView.loadUrl.overloads[1].implementation = function(url, additionalHttpHeaders) {
//checkSettings(this);
console.log("WebView Navigation: " + url.toString());
console.log("WebView Headers: " + additionalHttpHeaders);
printStacks(androidLogClz, exceptionClz, 'android.webkit.WebView.loadUrl(java.lang.String, java.util.Map<java.lang.String, java.lang.String>)');
return this.loadUrl.overloads[1].apply(this, arguments);
}
}
if (WebView.loadData) {
//Ref: https://developer.android.com/reference/android/webkit/WebView.html#loadData(java.lang.String, java.lang.String, java.lang.String)
WebView.loadData.implementation = function(data, mimeType, encoding) {
//checkSettings(this);
console.log("WebView loadData data: " + data);
console.log("WebView loadData mimeType: " + mimeType);
console.log("WebView loadData encoding: " + encoding);
printStacks(androidLogClz, exceptionClz, 'android.webkit.WebView.loadData(java.lang.String, java.lang.String, java.lang.String)');
return this.loadData.apply(this, arguments);
}
}
if (WebView.loadDataWithBaseURL) {
//Ref: https://developer.android.com/reference/android/webkit/WebView.html#loadDataWithBaseURL(java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String)
WebView.loadDataWithBaseURL.implementation = function(baseUrl, data, mimeType, encoding, historyUrl) {
//checkSettings(this);
console.log("WebView loadDataWithBaseURL baseUrl: " + baseUrl);
console.log("WebView loadDataWithBaseURL data: " + data);
console.log("WebView loadDataWithBaseURL mimeType: " + mimeType);
console.log("WebView loadDataWithBaseURL encoding: " + encoding);
console.log("WebView loadDataWithBaseURL historyUrl: " + historyUrl);
printStacks(androidLogClz, exceptionClz, 'android.webkit.WebView.loadDataWithBaseURL(java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String)');
return this.loadDataWithBaseURL.apply(this, arguments);
}
}
if (WebView.addJavascriptInterface) {
//Ref: https://developer.android.com/reference/android/webkit/WebView.html#addJavascriptInterface(java.lang.Object, java.lang.String)
WebView.addJavascriptInterface.implementation = function(object, name) {
console.log("addJavascriptInterface Object: " + object.toString());
console.log("addJavascriptInterface Name: " + name);
printStacks(androidLogClz, exceptionClz, 'android.webkit.WebView.addJavascriptInterface(java.lang.Object, java.lang.String)');
return this.addJavascriptInterface.apply(this, arguments);
}
}
if (WebView.evaluateJavascript) {
//Ref: https://developer.android.com/reference/android/webkit/WebView.html#evaluateJavascript(java.lang.String, android.webkit.ValueCallback<java.lang.String>)
WebView.evaluateJavascript.implementation = function(script, resultCallback) {
console.log("WebView evaluateJavascript Script: " + script);
printStacks(androidLogClz, exceptionClz, 'android.webkit.WebView.evaluateJavascript(java.lang.String, android.webkit.ValueCallback<java.lang.String>)');
return this.evaluateJavascript.apply(this, arguments);
}
}
if (WebView.postUrl) {
//Ref: https://developer.android.com/reference/android/webkit/WebView.html#postUrl(java.lang.String, byte[])
WebView.postUrl.implementation = function(url, postData) {
//checkSettings(this);
console.log("WebView postUrl URL: " + url);
console.log("WebView postUrl postData: " + postData);
printStacks(androidLogClz, exceptionClz, 'android.webkit.WebView.postUrl(java.lang.String, byte[])');
return this.postUrl.apply(this, arguments);
}
}
if (WebView.postWebMessage) {
//Ref: https://developer.android.com/reference/android/webkit/WebView.html#postWebMessage(android.webkit.WebMessage, android.net.Uri)
WebView.postWebMessage.implementation = function(message, targetOrigin) {
console.log("WebView postWebMessage message: " + message.getData());
console.log("WebView postWebMessage targetOrigin: " + targetOrigin.toString());
printStacks(androidLogClz, exceptionClz, 'android.webkit.WebView.postWebMessage(android.webkit.WebMessage, android.net.Uri)');
return this.postWebMessage.apply(this, arguments);
}
}
if (WebView.savePassword) {
//Ref: https://developer.android.com/reference/android/webkit/WebView.html#savePassword(java.lang.String, java.lang.String, java.lang.String)
WebView.savePassword.implementation = function(host, username, password) {
console.log("WebView savePassword Host: " + host);
console.log("WebView savePassword Username: " + username);
console.log("WebView savePassword Password: " + password);
printStacks(androidLogClz, exceptionClz, 'android.webkit.WebView.savePassword(java.lang.String, java.lang.String, java.lang.String)');
return this.savePassword.apply(this, arguments);
}
}
if (WebView.setHttpAuthUsernamePassword) {
//Ref: https://developer.android.com/reference/android/webkit/WebView.html#setHttpAuthUsernamePassword(java.lang.String, java.lang.String, java.lang.String, java.lang.String)
WebView.setHttpAuthUsernamePassword.implementation = function(host, realm, username, password) {
console.log("WebView setHttpAuthUsernamePassword Host: " + host);
console.log("WebView setHttpAuthUsernamePassword Realm: " + realm);
console.log("WebView setHttpAuthUsernamePassword Username: " + username);
console.log("WebView setHttpAuthUsernamePassword Password: " + password);
printStacks(androidLogClz, exceptionClz, 'android.webkit.WebView.setHttpAuthUsernamePassword(java.lang.String, java.lang.String, java.lang.String, java.lang.String)');
return this.setHttpAuthUsernamePassword.apply(this, arguments);
}
}
if (WebView.getHttpAuthUsernamePassword) {
//Ref: https://developer.android.com/reference/android/webkit/WebView.html#getHttpAuthUsernamePassword(java.lang.String, java.lang.String)
WebView.getHttpAuthUsernamePassword.implementation = function(host, realm) {
var credentials = this.getHttpAuthUsernamePassword.apply(this, arguments);
console.log("WebView getHttpAuthUsernamePassword Host: " + host);
console.log("WebView getHttpAuthUsernamePassword Host: " + realm);
console.log("WebView getHttpAuthUsernamePassword Credentials: " + credentials);
printStacks(androidLogClz, exceptionClz, 'android.webkit.WebView.getHttpAuthUsernamePassword(java.lang.String, java.lang.String)');
return credentials;
}
}
});