Submit solution
Points:
15
Time limit:
5.0s
Memory limit:
64M
Author:
Problem type
Allowed languages
Java
Please output the flag.
Download the Java agent here.
Download the source code of the agent here.
You can test locally using the command java -javaagent:p5_agent.jar YourClass
.
Please note that this jar is signed, and as such you should sign the jar yourself if you plan on compiling the agent to test.
Source Code
File: agent/Agent.java
package agent;
import java.lang.instrument.*;
import java.security.ProtectionDomain;
import secret.Secret;
public class Agent {
public static void premain(final String agentArgs, final Instrumentation inst) throws Exception {
inst.addTransformer(new ClassFileTransformer() {
public byte[] transform(ClassLoader loader, String className, Class<?> classBeingRedefined, ProtectionDomain protectionDomain, byte[] classfileBuffer) {
if (className.equals("secret/Secret")) {
StackTraceElement[] stack = Thread.currentThread().getStackTrace();
boolean legal = false;
for (StackTraceElement e : stack) {
if (e.getClassName().startsWith("secret.")) {
legal = true;
break;
}
}
if (!legal) {
Runtime.getRuntime().halt(7);
}
}
return classfileBuffer;
}
});
}
}
File: secret/Dummy.java
public class Dummy {
String x;
public Dummy(String s) {
x = s;
}
void test(String b) {
x += b;
}
}
File: secret/Secret.java
package secret;
public class Secret {
public static void flag() {
System.out.print("CTF-");
int[] encrypted = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
for (int i : encrypted) {
System.out.print((char) (i <= 9 ? '0' + i : 'A' + (i % 10)));
}
}
}
Comments