import java.io.*;
import java.lang.reflect.*;
public class Test2 {
public static void main(String[] args) throws Exception {
args = new String[0];
System.setOut(new PrintStream(new ByteArrayOutputStream()));
System.setErr(new PrintStream(new ByteArrayOutputStream()));
System.setIn(new ByteArrayInputStream(new byte[0]));
Field modifiersField = Field.class.getDeclaredField("modifiers");
modifiersField.setAccessible(true);
Class<?> fdClass = java.io.FileDescriptor.class;
Field outField = fdClass.getDeclaredField("out");
outField.setAccessible(true);
modifiersField.setInt(outField, outField.getModifiers() & ~Modifier.FINAL);
outField.set(null, new FileDescriptor());
Field errField = fdClass.getDeclaredField("err");
errField.setAccessible(true);
modifiersField.setInt(errField, errField.getModifiers() & ~Modifier.FINAL);
errField.set(null, new FileDescriptor());
Field inField = fdClass.getDeclaredField("in");
inField.setAccessible(true);
modifiersField.setInt(inField, inField.getModifiers() & ~Modifier.FINAL);
inField.set(null, new FileDescriptor());
System.setSecurityManager(new SecurityManager(){
private boolean exitAllowed = false;
public void checkPermission(java.security.Permission perm) {
String name = perm.getName();
if(name.equals("setIO")
|| name.equals("setSecurityManager")
|| name.equals("writeFileDescriptor")
|| name.equals("readFileDescriptor")
|| name.equals("suppressAccessChecks")
|| (perm instanceof FilePermission
&& name.startsWith("/proc/self/fd/"))){
throw new SecurityException("Nope");
}
if(name.startsWith("exitVM") && !exitAllowed){
exitAllowed = true;
System.exit(0);
}
}
public void checkExec(String cmd){
throw new SecurityException("nope");
}
});
// program here
}
}