package the.bytecode.club.bytecodeviewer;
import java.io.FileDescriptor;
import java.net.InetAddress;
import java.security.Permission;
/***************************************************************************
* Bytecode Viewer (BCV) - Java & Android Reverse Engineering Suite *
* Copyright (C) 2014 Kalen 'Konloch' Kinloch - http://bytecodeviewer.com *
* *
* This program is free software: you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation, either version 3 of the License, or *
* (at your option) any later version. *
* *
* This program is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* GNU General Public License for more details. *
* *
* You should have received a copy of the GNU General Public License *
* along with this program. If not, see <http://www.gnu.org/licenses/>. *
***************************************************************************/
/**
* An awesome security manager.
*
* @author Konloch
*
*/
public class SecurityMan extends SecurityManager {
public void setBlocking() {
blocking = true;
}
public void stopBlocking() { //slightly safer security system than just a public static boolean being toggled
String executedClass = Thread.currentThread().getStackTrace()[2].getClassName();
if( executedClass.equals("the.bytecode.club.bytecodeviewer.decompilers.KrakatauDecompiler") ||
executedClass.equals("the.bytecode.club.bytecodeviewer.decompilers.KrakatauDisassembler") ||
executedClass.equals("the.bytecode.club.bytecodeviewer.decompilers.CFRDecompiler") ||
executedClass.equals("the.bytecode.club.bytecodeviewer.decompilers.ProcyonDecompiler") ||
executedClass.equals("the.bytecode.club.bytecodeviewer.decompilers.FernFlowerDecompiler") ||
executedClass.equals("the.bytecode.club.bytecodeviewer.decompilers.JDGUIDecompiler") ||
executedClass.equals("the.bytecode.club.bytecodeviewer.compilers.KrakatauAssembler") ||
executedClass.equals("the.bytecode.club.bytecodeviewer.Enjarify") ||
executedClass.equals("the.bytecode.club.bytecodeviewer.BytecodeViewer") ||
executedClass.equals("the.bytecode.club.bytecodeviewer.compilers.JavaCompiler"))
{
blocking = false;
} else for(StackTraceElement stackTraceElements : Thread.currentThread().getStackTrace()) {
System.out.println(stackTraceElements.getClassName());
}
}
private boolean blocking = true; //might be insecure due to assholes targeting BCV, however that's highly unlikely.
@Override
public void checkExec(String cmd) {
String[] whitelist = {
"attrib",
"python",
"pypy",
"java"
};
boolean allow = false;
for(String s : whitelist) {
if(cmd.contains(s))
allow = true;
}
if(allow && !blocking) {
System.out.println("Allowing exec:" + cmd);
} else throw new SecurityException("BCV is awesome, blocking " + cmd);
}
@Override
public void checkListen(int port) {
throw new SecurityException("BCV is awesome, blocking port "+port+" from listening");
}
@Override
public void checkPermission(Permission perm) { //expand eventually
}
@Override
public void checkPermission(Permission perm, Object context) {//expand eventually
}
@Override public void checkAccess(Thread t) {}
@Override public void checkAccept(String host, int port) {}
@Override public void checkAccess(ThreadGroup g) {}
@Override public void checkAwtEventQueueAccess() {}
@Override public void checkConnect(String host, int port) {}
@Override public void checkConnect(String host, int port, Object context) {}
@Override public void checkCreateClassLoader() {}
@Override public void checkDelete(String file) {}
@Override public void checkExit(int status) {}
@Override public void checkLink(String lib) {}
@Override public void checkMemberAccess(Class<?> clazz, int which) {}
@Override public void checkMulticast(InetAddress maddr) {}
@Override public void checkMulticast(InetAddress maddr, byte ttl) {}
@Override public void checkPackageAccess(String pkg) {}
@Override public void checkPackageDefinition(String pkg) {}
@Override public void checkPrintJobAccess() {}
@Override public void checkPropertiesAccess() {}
@Override public void checkPropertyAccess(String key) {}
@Override public void checkRead(FileDescriptor fd) {}
@Override public void checkRead(String file) {}
@Override public void checkRead(String file, Object context) {}
@Override public void checkSecurityAccess(String target) {}
@Override public void checkSetFactory() {}
@Override public void checkSystemClipboardAccess() {}
@Override public void checkWrite(FileDescriptor fd) {}
@Override public void checkWrite(String file) {}
}