-
Notifications
You must be signed in to change notification settings - Fork 7
Expand file tree
/
Copy pathfind_pattern.js
More file actions
78 lines (69 loc) · 1.75 KB
/
find_pattern.js
File metadata and controls
78 lines (69 loc) · 1.75 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
75
76
77
78
/**
* Helper function to enumerate all loaded Java classes.
*
* @returns {string[]} Class names in dot notation (e.g., java.lang.String).
*/
import Java from "frida-java-bridge";
function enumAllClasses() {
var allClasses = [];
var classes = Java.enumerateLoadedClassesSync();
classes.forEach(function (aClass) {
try {
var className = aClass.match(/[L](.*);/)[1].replace(/\//g, ".");
allClasses.push(className);
} catch (err) {
// Ignore malformed class entries
}
});
return allClasses;
}
/**
* Find all Java classes that match a given regex pattern.
*
* @param {string} pattern - Regex pattern string.
* @returns {string[]} Matching class names.
*/
function findClasses(pattern) {
var allClasses = enumAllClasses();
var foundClasses = [];
var regex = new RegExp(pattern, "i");
allClasses.forEach(function (aClass) {
try {
if (regex.test(aClass)) {
foundClasses.push(aClass);
}
} catch (err) {
// Ignore match errors
}
});
return foundClasses;
}
rpc.exports = {
/**
* Find all loaded Java class names matching the provided pattern
* and send them using Frida's `send()` function.
*
* @param {Object} args - An object containing parameters.
* @param {string} args.pattern - Regex pattern string to match class names.
* @returns {void}
*/
run: function (args) {
const { pattern } = args;
Java.perform(function () {
const matches = findClasses(pattern);
matches.forEach(function (className) {
send(className);
});
});
},
schema: function () {
return {
type: "object",
properties: {
pattern: { type: "string" },
},
required: ["pattern"],
additionalProperties: false,
};
},
};