-
Notifications
You must be signed in to change notification settings - Fork 428
Expand file tree
/
Copy pathsqlite_logger.js
More file actions
74 lines (64 loc) · 3.05 KB
/
Copy pathsqlite_logger.js
File metadata and controls
74 lines (64 loc) · 3.05 KB
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
Java.perform(function () {
function klog(data) {
var message = {};
message["jsname"] = "sqlite_logger";
message["data"] = data;
send(message);
}
klog('[sqlite_logger] init');
function stringify(value) {
if (value === null || value === undefined) {
return 'null';
}
try {
return value.toString();
} catch (e) {
return '' + value;
}
}
function stringifyArray(values) {
if (!values) {
return '[]';
}
try {
return JSON.stringify(values);
} catch (e) {
return values.toString();
}
}
try {
var SQLiteDatabase = Java.use('android.database.sqlite.SQLiteDatabase');
var execSql = SQLiteDatabase.execSQL.overload('java.lang.String');
execSql.implementation = function (sql) {
klog('[sqlite_logger] execSQL => ' + sql);
return execSql.call(this, sql);
};
var execSqlArgs = SQLiteDatabase.execSQL.overload('java.lang.String', '[Ljava.lang.Object;');
execSqlArgs.implementation = function (sql, bindArgs) {
klog('[sqlite_logger] execSQL => ' + sql + ' | args=' + stringifyArray(bindArgs));
return execSqlArgs.call(this, sql, bindArgs);
};
var rawQuery = SQLiteDatabase.rawQuery.overload('java.lang.String', '[Ljava.lang.String;');
rawQuery.implementation = function (sql, selectionArgs) {
klog('[sqlite_logger] rawQuery => ' + sql + ' | args=' + stringifyArray(selectionArgs));
return rawQuery.call(this, sql, selectionArgs);
};
var insertMethod = SQLiteDatabase.insert.overload('java.lang.String', 'java.lang.String', 'android.content.ContentValues');
insertMethod.implementation = function (table, nullColumnHack, values) {
klog('[sqlite_logger] insert => table=' + table + ', values=' + stringify(values));
return insertMethod.call(this, table, nullColumnHack, values);
};
var updateMethod = SQLiteDatabase.update.overload('java.lang.String', 'android.content.ContentValues', 'java.lang.String', '[Ljava.lang.String;');
updateMethod.implementation = function (table, values, whereClause, whereArgs) {
klog('[sqlite_logger] update => table=' + table + ', where=' + stringify(whereClause) + ', whereArgs=' + stringifyArray(whereArgs) + ', values=' + stringify(values));
return updateMethod.call(this, table, values, whereClause, whereArgs);
};
var deleteMethod = SQLiteDatabase.delete.overload('java.lang.String', 'java.lang.String', '[Ljava.lang.String;');
deleteMethod.implementation = function (table, whereClause, whereArgs) {
klog('[sqlite_logger] delete => table=' + table + ', where=' + stringify(whereClause) + ', whereArgs=' + stringifyArray(whereArgs));
return deleteMethod.call(this, table, whereClause, whereArgs);
};
} catch (e) {
klog('[sqlite_logger] hook failed: ' + e);
}
});