/
KeyScanner.java
36 lines (30 loc) · 1.07 KB
/
KeyScanner.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
package demo3;
import sun.jvm.hotspot.oops.*;
import sun.jvm.hotspot.runtime.VM;
import sun.jvm.hotspot.tools.Tool;
public class KeyScanner extends Tool {
@Override
public void run() {
Klass privateKeyKlass = VM.getVM().getSystemDictionary()
.find("java/security/PrivateKey", null, null);
VM.getVM().getObjectHeap().iterateObjectsOfKlass(new DefaultHeapVisitor() {
@Override
public boolean doObj(Oop oop) {
InstanceKlass holder = (InstanceKlass) oop.getKlass();
OopField field = (OopField) holder.findField("key", "[B");
print((TypeArray) field.getValue(oop));
return false;
}
}, privateKeyKlass);
}
private void print(TypeArray array) {
long length = array.getLength();
for (long i = 0; i < length; i++) {
System.out.printf("%02x", array.getByteAt(i));
}
System.out.println();
}
public static void main(String[] args) {
new KeyScanner().execute(new String[]{""});
}
}