-
Notifications
You must be signed in to change notification settings - Fork 6
/
Copy pathClassModifier.java
54 lines (46 loc) · 1.29 KB
/
ClassModifier.java
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
import javassist.*;
public class ClassModifier {
public static void main(String[] args) {
try {
System.loadLibrary("jvmfaketime");
ClassPool pool = ClassPool.getDefault();
CtClass systemClass = pool.get("java.lang.System");
systemClass.addField(
CtField.make("public static long fakeTimeOffset;", systemClass)
);
systemClass.addMethod(
CtNewMethod.make(
"public static void resetTime() { System.fakeTimeOffset = 0L; }",
systemClass)
);
systemClass.addMethod(
CtNewMethod.make(
"public static void moveTimeBy(long offset) { System.fakeTimeOffset += offset; }",
systemClass)
);
systemClass.addMethod(
CtNewMethod.make(
Modifier.PUBLIC | Modifier.STATIC | Modifier.NATIVE,
CtClass.longType,
"trueCurrentTimeMillis",
new CtClass[0],
new CtClass[0],
null,
systemClass)
);
systemClass.addMethod(
CtNewMethod.make(
Modifier.PUBLIC | Modifier.STATIC | Modifier.NATIVE,
CtClass.voidType,
"startFakingTime",
new CtClass[0],
new CtClass[0],
null,
systemClass)
);
systemClass.writeFile();
} catch (Exception e) {
e.printStackTrace();
}
}
}