Added a Configuration class
Moved the rest of the config-like variables from the main BytecodeViewer class to a new Configuration class
This commit is contained in:
parent
cb1c27f46c
commit
00a1bb539f
19 changed files with 205 additions and 219 deletions
|
@ -14,6 +14,7 @@ import javax.swing.JProgressBar;
|
|||
import javax.swing.JScrollPane;
|
||||
import javax.swing.text.html.HTMLEditorKit;
|
||||
import the.bytecode.club.bytecodeviewer.BytecodeViewer;
|
||||
import the.bytecode.club.bytecodeviewer.Configuration;
|
||||
import the.bytecode.club.bytecodeviewer.Resources;
|
||||
|
||||
/***************************************************************************
|
||||
|
@ -49,7 +50,7 @@ public class InitialBootScreen extends JFrame {
|
|||
addWindowListener(new WindowAdapter() {
|
||||
@Override
|
||||
public void windowClosing(WindowEvent e) {
|
||||
BytecodeViewer.canExit = true;
|
||||
Configuration.canExit = true;
|
||||
System.exit(0);
|
||||
}
|
||||
});
|
||||
|
|
|
@ -80,6 +80,7 @@ import static the.bytecode.club.bytecodeviewer.Constants.*;
|
|||
* Finish right-click tab menu detection
|
||||
* make it use that global last used inside of export as jar
|
||||
* Add https://github.com/ptnkjke/Java-Bytecode-Editor visualize as a plugin
|
||||
* Add https://github.com/exbin/bined as the replacement Hed Viewer/Editor
|
||||
* make zipfile not include the decode shit
|
||||
* add stackmapframes to bytecode decompiler
|
||||
* make ez-injection plugin console show all sys.out calls
|
||||
|
@ -96,28 +97,6 @@ import static the.bytecode.club.bytecodeviewer.Constants.*;
|
|||
|
||||
public class BytecodeViewer
|
||||
{
|
||||
public static String python = "";
|
||||
public static String python3 = "";
|
||||
public static String rt = "";
|
||||
public static String library = "";
|
||||
public static String javac = "";
|
||||
public static String java = "";
|
||||
private static File krakatauTempDir;
|
||||
private static File krakatauTempJar;
|
||||
public static boolean displayParentInTab = false; //also change in the main GUI
|
||||
public static boolean currentlyDumping = false;
|
||||
public static boolean needsReDump = true;
|
||||
public static boolean warnForEditing = false;
|
||||
public static boolean runningObfuscation = false;
|
||||
private static final long start = System.currentTimeMillis();
|
||||
public static String lastDirectory = ".";
|
||||
public static boolean pingback = false;
|
||||
public static boolean deleteForeignLibraries = true;
|
||||
public static boolean canExit = false;
|
||||
|
||||
private static long last = System.currentTimeMillis();
|
||||
|
||||
|
||||
public static boolean verify = false; //eventually may be a setting
|
||||
public static String[] args;
|
||||
public static MainViewerGUI viewer = null;
|
||||
|
@ -126,8 +105,7 @@ public class BytecodeViewer
|
|||
public static Refactorer refactorer = new Refactorer();
|
||||
public static List<FileContainer> files = new ArrayList<>(); //all of BCV's loaded files/classes/etc
|
||||
public static List<Process> createdProcesses = new ArrayList<>();
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* The version checker thread
|
||||
*/
|
||||
|
@ -140,7 +118,7 @@ public class BytecodeViewer
|
|||
try {
|
||||
new HTTPRequest(new URL("https://bytecodeviewer.com/add.php")).read();
|
||||
} catch (Exception e) {
|
||||
pingback = false;
|
||||
Configuration.pingback = false;
|
||||
}
|
||||
});
|
||||
|
||||
|
@ -248,9 +226,9 @@ public class BytecodeViewer
|
|||
viewer.calledAfterLoad();
|
||||
resetRecentFilesMenu();
|
||||
|
||||
if (!pingback) {
|
||||
if (!Configuration.pingback) {
|
||||
PingBack.start();
|
||||
pingback = true;
|
||||
Configuration.pingback = true;
|
||||
}
|
||||
|
||||
if (viewer.chckbxmntmNewCheckItem_12.isSelected())
|
||||
|
@ -259,13 +237,12 @@ public class BytecodeViewer
|
|||
if (!cli)
|
||||
viewer.setVisible(true);
|
||||
|
||||
System.out.println("Start up took " + ((System.currentTimeMillis() - start) / 1000) + " seconds");
|
||||
System.out.println("Start up took " + ((System.currentTimeMillis() - Configuration.start) / 1000) + " seconds");
|
||||
|
||||
if (!cli)
|
||||
if (args.length >= 1)
|
||||
for (String s : args) {
|
||||
for (String s : args)
|
||||
openFiles(new File[]{new File(s)}, true);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -291,15 +268,15 @@ public class BytecodeViewer
|
|||
return "java"; //java is set
|
||||
} catch (Exception e) { //ignore
|
||||
sm.setBlocking();
|
||||
boolean empty = java.isEmpty();
|
||||
boolean empty = Configuration.java.isEmpty();
|
||||
while (empty) {
|
||||
showMessage("You need to set your Java path, this requires the JRE to be downloaded." + nl +
|
||||
"(C:/programfiles/Java/JDK_xx/bin/java.exe)");
|
||||
"(C:/Program Files/Java/JDK_xx/bin/java.exe)");
|
||||
viewer.java();
|
||||
empty = java.isEmpty();
|
||||
empty = Configuration.java.isEmpty();
|
||||
}
|
||||
}
|
||||
return java;
|
||||
return Configuration.java;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -518,7 +495,7 @@ public class BytecodeViewer
|
|||
BytecodeViewer.addRecentFile(f);
|
||||
|
||||
BytecodeViewer.viewer.setIcon(true);
|
||||
needsReDump = true;
|
||||
Configuration.needsReDump = true;
|
||||
Thread t = new Thread(new OpenFile(files));
|
||||
t.start();
|
||||
}
|
||||
|
@ -687,16 +664,15 @@ public class BytecodeViewer
|
|||
* @param e
|
||||
*/
|
||||
public static void checkHotKey(KeyEvent e) {
|
||||
if (System.currentTimeMillis() - last <= (4000))
|
||||
if (System.currentTimeMillis() - Configuration.lastHotKeyExecuted <= (4000))
|
||||
return;
|
||||
|
||||
if ((e.getKeyCode() == KeyEvent.VK_O) && ((e.getModifiers() & KeyEvent.CTRL_MASK) != 0)) {
|
||||
last = System.currentTimeMillis();
|
||||
Configuration.lastHotKeyExecuted = System.currentTimeMillis();
|
||||
JFileChooser fc = new JFileChooser();
|
||||
try {
|
||||
fc.setSelectedFile(new File(BytecodeViewer.lastDirectory));
|
||||
fc.setSelectedFile(new File(Configuration.lastDirectory));
|
||||
} catch (Exception ignored) {
|
||||
|
||||
}
|
||||
fc.setFileFilter(new FileFilter() {
|
||||
@Override
|
||||
|
@ -721,7 +697,7 @@ public class BytecodeViewer
|
|||
int returnVal = fc.showOpenDialog(BytecodeViewer.viewer);
|
||||
|
||||
if (returnVal == JFileChooser.APPROVE_OPTION) {
|
||||
BytecodeViewer.lastDirectory = fc.getSelectedFile().getAbsolutePath();
|
||||
Configuration.lastDirectory = fc.getSelectedFile().getAbsolutePath();
|
||||
try {
|
||||
BytecodeViewer.viewer.setIcon(true);
|
||||
BytecodeViewer.openFiles(new File[]{fc.getSelectedFile()}, true);
|
||||
|
@ -731,21 +707,21 @@ public class BytecodeViewer
|
|||
}
|
||||
}
|
||||
} else if ((e.getKeyCode() == KeyEvent.VK_N) && ((e.getModifiers() & KeyEvent.CTRL_MASK) != 0)) {
|
||||
last = System.currentTimeMillis();
|
||||
Configuration.lastHotKeyExecuted = System.currentTimeMillis();
|
||||
BytecodeViewer.resetWorkSpace(true);
|
||||
} else if ((e.getKeyCode() == KeyEvent.VK_T) && ((e.getModifiers() & KeyEvent.CTRL_MASK) != 0)) {
|
||||
last = System.currentTimeMillis();
|
||||
Configuration.lastHotKeyExecuted = System.currentTimeMillis();
|
||||
Thread t = new Thread(() -> BytecodeViewer.compile(true));
|
||||
t.start();
|
||||
} else if ((e.getKeyCode() == KeyEvent.VK_R) && ((e.getModifiers() & KeyEvent.CTRL_MASK) != 0)) {
|
||||
last = System.currentTimeMillis();
|
||||
Configuration.lastHotKeyExecuted = System.currentTimeMillis();
|
||||
if (BytecodeViewer.getLoadedClasses().isEmpty()) {
|
||||
BytecodeViewer.showMessage("First open a class, jar, zip, apk or dex file.");
|
||||
return;
|
||||
}
|
||||
new RunOptions().setVisible(true);
|
||||
} else if ((e.getKeyCode() == KeyEvent.VK_S) && ((e.getModifiers() & KeyEvent.CTRL_MASK) != 0)) {
|
||||
last = System.currentTimeMillis();
|
||||
Configuration.lastHotKeyExecuted = System.currentTimeMillis();
|
||||
|
||||
if (BytecodeViewer.getLoadedClasses().isEmpty()) {
|
||||
BytecodeViewer.showMessage("First open a class, jar, zip, apk or dex file.");
|
||||
|
@ -809,7 +785,7 @@ public class BytecodeViewer
|
|||
});
|
||||
t.start();
|
||||
} else if ((e.getKeyCode() == KeyEvent.VK_W) && ((e.getModifiers() & KeyEvent.CTRL_MASK) != 0)) {
|
||||
last = System.currentTimeMillis();
|
||||
Configuration.lastHotKeyExecuted = System.currentTimeMillis();
|
||||
if (viewer.workPane.getCurrentViewer() != null)
|
||||
viewer.workPane.tabs.remove(viewer.workPane.getCurrentViewer());
|
||||
}
|
||||
|
@ -819,13 +795,13 @@ public class BytecodeViewer
|
|||
File[] files = new File[2];
|
||||
//currently won't optimize if you've got two containers with the same name, will need to add this later
|
||||
if (!LazyNameUtil.SAME_NAME_JAR_WORKSPACE) {
|
||||
if (krakatauTempJar != null && !krakatauTempJar.exists()) {
|
||||
needsReDump = true;
|
||||
if (Configuration.krakatauTempJar != null && !Configuration.krakatauTempJar.exists()) {
|
||||
Configuration.needsReDump = true;
|
||||
}
|
||||
|
||||
if (needsReDump && krakatauTempJar != null) {
|
||||
krakatauTempDir = null;
|
||||
krakatauTempJar = null;
|
||||
if (Configuration.needsReDump && Configuration.krakatauTempJar != null) {
|
||||
Configuration.krakatauTempDir = null;
|
||||
Configuration.krakatauTempJar = null;
|
||||
}
|
||||
|
||||
boolean passes = false;
|
||||
|
@ -843,54 +819,42 @@ public class BytecodeViewer
|
|||
else if (BytecodeViewer.viewer.panelGroup3.isSelected(BytecodeViewer.viewer.panel3KrakatauBytecode.getModel()))
|
||||
passes = true;
|
||||
|
||||
if (krakatauTempJar != null || !passes) {
|
||||
files[0] = krakatauTempJar;
|
||||
files[1] = krakatauTempDir;
|
||||
if (Configuration.krakatauTempJar != null || !passes) {
|
||||
files[0] = Configuration.krakatauTempJar;
|
||||
files[1] = Configuration.krakatauTempDir;
|
||||
return files;
|
||||
}
|
||||
}
|
||||
|
||||
currentlyDumping = true;
|
||||
needsReDump = false;
|
||||
krakatauTempDir = new File(tempDirectory + fs + MiscUtils.randomString(32) + fs);
|
||||
krakatauTempDir.mkdir();
|
||||
krakatauTempJar = new File(tempDirectory + fs + "temp" + MiscUtils.randomString(32) + ".jar");
|
||||
|
||||
Configuration.currentlyDumping = true;
|
||||
Configuration.needsReDump = false;
|
||||
Configuration.krakatauTempDir = new File(tempDirectory + fs + MiscUtils.randomString(32) + fs);
|
||||
Configuration.krakatauTempDir.mkdir();
|
||||
Configuration.krakatauTempJar = new File(tempDirectory + fs + "temp" + MiscUtils.randomString(32) + ".jar");
|
||||
//krakatauTempJar = new File(BytecodeViewer.tempDirectory + BytecodeViewer.fs + "temp" + MiscUtils
|
||||
// .randomString(32) + ".jar."+container.name);
|
||||
JarUtils.saveAsJarClassesOnly(container.classes, krakatauTempJar.getAbsolutePath());
|
||||
currentlyDumping = false;
|
||||
JarUtils.saveAsJarClassesOnly(container.classes, Configuration.krakatauTempJar.getAbsolutePath());
|
||||
Configuration.currentlyDumping = false;
|
||||
|
||||
files[0] = krakatauTempJar;
|
||||
files[1] = krakatauTempDir;
|
||||
files[0] = Configuration.krakatauTempJar;
|
||||
files[1] = Configuration.krakatauTempDir;
|
||||
return files;
|
||||
}
|
||||
|
||||
public synchronized static void rtCheck() {
|
||||
if (rt.equals("")) {
|
||||
if (Configuration.rt.isEmpty()) {
|
||||
if (RT_JAR.exists()) {
|
||||
rt = RT_JAR.getAbsolutePath();
|
||||
Configuration.rt = RT_JAR.getAbsolutePath();
|
||||
} else if (RT_JAR_DUMPED.exists()) {
|
||||
rt = RT_JAR_DUMPED.getAbsolutePath();
|
||||
Configuration.rt = RT_JAR_DUMPED.getAbsolutePath();
|
||||
} else {
|
||||
try {
|
||||
JRTExtractor.extractRT(RT_JAR_DUMPED.getAbsolutePath());
|
||||
rt = RT_JAR_DUMPED.getAbsolutePath();
|
||||
Configuration.rt = RT_JAR_DUMPED.getAbsolutePath();
|
||||
} catch (Throwable t) {
|
||||
t.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static int fileContainersHash(ArrayList<FileContainer> fileContainers) {
|
||||
StringBuilder block = new StringBuilder();
|
||||
for (FileContainer container : fileContainers) {
|
||||
block.append(container.name);
|
||||
for (ClassNode node : container.classes) {
|
||||
block.append(node.name);
|
||||
}
|
||||
}
|
||||
|
||||
return block.hashCode();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -327,7 +327,7 @@ public class CommandLineInput {
|
|||
System.out.println("Finished.");
|
||||
System.out.println("Bytecode Viewer CLI v" + VERSION + " by @Konloch - "
|
||||
+ "https://bytecodeviewer.com");
|
||||
BytecodeViewer.canExit = true;
|
||||
Configuration.canExit = true;
|
||||
System.exit(0);
|
||||
} catch (Exception e) {
|
||||
new the.bytecode.club.bytecodeviewer.api.ExceptionUI(e);
|
||||
|
|
|
@ -0,0 +1,31 @@
|
|||
package the.bytecode.club.bytecodeviewer;
|
||||
|
||||
import java.io.File;
|
||||
|
||||
/**
|
||||
* @author Konloch
|
||||
* @since 6/21/2021
|
||||
*/
|
||||
public class Configuration
|
||||
{
|
||||
public static String python = "";
|
||||
public static String python3 = "";
|
||||
public static String rt = "";
|
||||
public static String library = "";
|
||||
public static String javac = "";
|
||||
public static String java = "";
|
||||
public static File krakatauTempDir;
|
||||
public static File krakatauTempJar;
|
||||
public static boolean displayParentInTab = false; //also change in the main GUI
|
||||
public static boolean currentlyDumping = false;
|
||||
public static boolean needsReDump = true;
|
||||
public static boolean warnForEditing = false;
|
||||
public static boolean runningObfuscation = false;
|
||||
public static final long start = System.currentTimeMillis();
|
||||
public static String lastDirectory = ".";
|
||||
public static boolean pingback = false;
|
||||
public static boolean deleteForeignLibraries = true;
|
||||
public static boolean canExit = false;
|
||||
|
||||
public static long lastHotKeyExecuted = System.currentTimeMillis();
|
||||
}
|
|
@ -281,11 +281,11 @@ public class Settings {
|
|||
DiskWriter.writeNewLine(settingsName,
|
||||
"deprecated", false);
|
||||
DiskWriter.writeNewLine(settingsName,
|
||||
BytecodeViewer.lastDirectory, false);
|
||||
Configuration.lastDirectory, false);
|
||||
DiskWriter.writeNewLine(settingsName,
|
||||
BytecodeViewer.python, false);
|
||||
Configuration.python, false);
|
||||
DiskWriter.writeNewLine(settingsName,
|
||||
BytecodeViewer.rt, false);
|
||||
Configuration.rt, false);
|
||||
DiskWriter.writeNewLine(settingsName,
|
||||
String.valueOf(BytecodeViewer.viewer.panel1Proc_E.isSelected()), false);
|
||||
DiskWriter.writeNewLine(settingsName,
|
||||
|
@ -319,9 +319,9 @@ public class Settings {
|
|||
DiskWriter.writeNewLine(settingsName,
|
||||
String.valueOf(BytecodeViewer.viewer.decodeAPKResources.isSelected()), false);
|
||||
DiskWriter.writeNewLine(settingsName,
|
||||
BytecodeViewer.library, false);
|
||||
Configuration.library, false);
|
||||
DiskWriter.writeNewLine(settingsName,
|
||||
String.valueOf(BytecodeViewer.pingback), false);
|
||||
String.valueOf(Configuration.pingback), false);
|
||||
DiskWriter.writeNewLine(settingsName,
|
||||
String.valueOf(BytecodeViewer.viewer.panel1JDGUI_E.isSelected()), false);
|
||||
DiskWriter.writeNewLine(settingsName,
|
||||
|
@ -331,7 +331,7 @@ public class Settings {
|
|||
DiskWriter.writeNewLine(settingsName,
|
||||
String.valueOf(BytecodeViewer.viewer.fontSpinner.getValue()), false);
|
||||
DiskWriter.writeNewLine(settingsName,
|
||||
String.valueOf(BytecodeViewer.deleteForeignLibraries), false);
|
||||
String.valueOf(Configuration.deleteForeignLibraries), false);
|
||||
|
||||
if (BytecodeViewer.viewer.apkConversionGroup.isSelected(BytecodeViewer.viewer.apkConversionDex.getModel()))
|
||||
DiskWriter.writeNewLine(settingsName, "0", false);
|
||||
|
@ -339,17 +339,17 @@ public class Settings {
|
|||
DiskWriter.writeNewLine(settingsName, "1", false);
|
||||
|
||||
DiskWriter.writeNewLine(settingsName,
|
||||
BytecodeViewer.python3, false);
|
||||
Configuration.python3, false);
|
||||
DiskWriter.writeNewLine(settingsName,
|
||||
BytecodeViewer.javac, false);
|
||||
Configuration.javac, false);
|
||||
DiskWriter.writeNewLine(settingsName,
|
||||
BytecodeViewer.java, false);
|
||||
Configuration.java, false);
|
||||
DiskWriter.writeNewLine(settingsName,
|
||||
String.valueOf(BytecodeViewer.viewer.compileOnSave.isSelected()), false);
|
||||
DiskWriter.writeNewLine(settingsName,
|
||||
String.valueOf(BytecodeViewer.viewer.autoCompileOnRefresh.isSelected()), false);
|
||||
DiskWriter.writeNewLine(settingsName,
|
||||
String.valueOf(BytecodeViewer.warnForEditing), false);
|
||||
String.valueOf(Configuration.warnForEditing), false);
|
||||
DiskWriter.writeNewLine(settingsName,
|
||||
String.valueOf(BytecodeViewer.viewer.showFileInTabTitle.isSelected()), false);
|
||||
DiskWriter.writeNewLine(settingsName,
|
||||
|
@ -534,9 +534,9 @@ public class Settings {
|
|||
}
|
||||
//86 is deprecated
|
||||
//87 is deprecated
|
||||
BytecodeViewer.lastDirectory = DiskReader.loadString(settingsName, 88, false);
|
||||
BytecodeViewer.python = DiskReader.loadString(settingsName, 89, false);
|
||||
BytecodeViewer.rt = DiskReader.loadString(settingsName, 90, false);
|
||||
Configuration.lastDirectory = DiskReader.loadString(settingsName, 88, false);
|
||||
Configuration.python = DiskReader.loadString(settingsName, 89, false);
|
||||
Configuration.rt = DiskReader.loadString(settingsName, 90, false);
|
||||
BytecodeViewer.viewer.panel1Proc_E.setSelected(Boolean.parseBoolean(DiskReader.loadString(settingsName, 91, false)));
|
||||
BytecodeViewer.viewer.panel1CFR_E.setSelected(Boolean.parseBoolean(DiskReader.loadString(settingsName, 92, false)));
|
||||
BytecodeViewer.viewer.panel1Fern_E.setSelected(Boolean.parseBoolean(DiskReader.loadString(settingsName, 93, false)));
|
||||
|
@ -553,28 +553,28 @@ public class Settings {
|
|||
BytecodeViewer.viewer.panel3Krakatau_E.setSelected(Boolean.parseBoolean(DiskReader.loadString(settingsName, 104, false)));
|
||||
BytecodeViewer.viewer.panel3Smali_E.setSelected(Boolean.parseBoolean(DiskReader.loadString(settingsName, 105, false)));
|
||||
BytecodeViewer.viewer.decodeAPKResources.setSelected(Boolean.parseBoolean(DiskReader.loadString(settingsName, 106, false)));
|
||||
BytecodeViewer.library = DiskReader.loadString(settingsName, 107, false);
|
||||
BytecodeViewer.pingback = Boolean.parseBoolean(DiskReader.loadString(settingsName, 108, false));
|
||||
Configuration.library = DiskReader.loadString(settingsName, 107, false);
|
||||
Configuration.pingback = Boolean.parseBoolean(DiskReader.loadString(settingsName, 108, false));
|
||||
BytecodeViewer.viewer.panel1JDGUI_E.setSelected(Boolean.parseBoolean(DiskReader.loadString(settingsName, 109, false)));
|
||||
BytecodeViewer.viewer.panel2JDGUI_E.setSelected(Boolean.parseBoolean(DiskReader.loadString(settingsName, 110, false)));
|
||||
BytecodeViewer.viewer.panel3JDGUI_E.setSelected(Boolean.parseBoolean(DiskReader.loadString(settingsName, 111, false)));
|
||||
BytecodeViewer.viewer.fontSpinner.setValue(Integer.parseInt(DiskReader.loadString(settingsName, 112, false)));
|
||||
BytecodeViewer.deleteForeignLibraries = Boolean.parseBoolean(DiskReader.loadString(settingsName, 113, false));
|
||||
Configuration.deleteForeignLibraries = Boolean.parseBoolean(DiskReader.loadString(settingsName, 113, false));
|
||||
decompiler = Integer.parseInt(DiskReader.loadString(settingsName, 114, false));
|
||||
|
||||
if (decompiler == 0)
|
||||
BytecodeViewer.viewer.apkConversionGroup.setSelected(BytecodeViewer.viewer.apkConversionDex.getModel(), true);
|
||||
else if (decompiler == 1)
|
||||
BytecodeViewer.viewer.apkConversionGroup.setSelected(BytecodeViewer.viewer.apkConversionEnjarify.getModel(), true);
|
||||
|
||||
BytecodeViewer.python3 = DiskReader.loadString(settingsName, 115, false);
|
||||
BytecodeViewer.javac = DiskReader.loadString(settingsName, 116, false);
|
||||
BytecodeViewer.java = DiskReader.loadString(settingsName, 117, false);
|
||||
|
||||
Configuration.python3 = DiskReader.loadString(settingsName, 115, false);
|
||||
Configuration.javac = DiskReader.loadString(settingsName, 116, false);
|
||||
Configuration.java = DiskReader.loadString(settingsName, 117, false);
|
||||
BytecodeViewer.viewer.compileOnSave.setSelected(Boolean.parseBoolean(DiskReader.loadString(settingsName, 118, false)));
|
||||
BytecodeViewer.viewer.autoCompileOnRefresh.setSelected(Boolean.parseBoolean(DiskReader.loadString(settingsName, 119, false)));
|
||||
BytecodeViewer.warnForEditing = Boolean.parseBoolean(DiskReader.loadString(settingsName, 120, false));
|
||||
Configuration.warnForEditing = Boolean.parseBoolean(DiskReader.loadString(settingsName, 120, false));
|
||||
BytecodeViewer.viewer.showFileInTabTitle.setSelected(Boolean.parseBoolean(DiskReader.loadString(settingsName, 121, false)));
|
||||
BytecodeViewer.displayParentInTab = BytecodeViewer.viewer.showFileInTabTitle.isSelected();
|
||||
Configuration.displayParentInTab = BytecodeViewer.viewer.showFileInTabTitle.isSelected();
|
||||
BytecodeViewer.viewer.forcePureAsciiAsText.setSelected(Boolean.parseBoolean(DiskReader.loadString(settingsName, 122, false)));
|
||||
BytecodeViewer.viewer.synchronizedViewing.setSelected(Boolean.parseBoolean(DiskReader.loadString(settingsName, 123, false)));
|
||||
BytecodeViewer.viewer.showClassMethods.setSelected(Boolean.parseBoolean(DiskReader.loadString(settingsName, 124, false)));
|
||||
|
|
|
@ -7,6 +7,7 @@ import java.io.InputStream;
|
|||
import java.io.InputStreamReader;
|
||||
import me.konloch.kontainer.io.DiskWriter;
|
||||
import the.bytecode.club.bytecodeviewer.BytecodeViewer;
|
||||
import the.bytecode.club.bytecodeviewer.Configuration;
|
||||
import the.bytecode.club.bytecodeviewer.util.JarUtils;
|
||||
import the.bytecode.club.bytecodeviewer.util.MiscUtils;
|
||||
|
||||
|
@ -50,12 +51,12 @@ public class JavaCompiler extends Compiler {
|
|||
tempD.mkdirs();
|
||||
new File(fileStart2).mkdirs();
|
||||
|
||||
if (BytecodeViewer.javac.equals("") || !new File(BytecodeViewer.javac).exists()) {
|
||||
if (Configuration.javac.isEmpty() || !new File(Configuration.javac).exists()) {
|
||||
BytecodeViewer.showMessage("You need to set your Javac path, this requires the JDK to be downloaded." + nl + "(C:/programfiles/Java/JDK_xx/bin/javac.exe)");
|
||||
BytecodeViewer.viewer.javac();
|
||||
}
|
||||
|
||||
if (BytecodeViewer.javac.equals("") || !new File(BytecodeViewer.javac).exists()) {
|
||||
if (Configuration.javac.isEmpty() || !new File(Configuration.javac).exists()) {
|
||||
BytecodeViewer.showMessage("You need to set Javac!");
|
||||
return null;
|
||||
}
|
||||
|
@ -69,19 +70,19 @@ public class JavaCompiler extends Compiler {
|
|||
StringBuilder log = new StringBuilder();
|
||||
ProcessBuilder pb;
|
||||
|
||||
if (BytecodeViewer.library.isEmpty()) {
|
||||
if (Configuration.library.isEmpty()) {
|
||||
pb = new ProcessBuilder(
|
||||
BytecodeViewer.javac,
|
||||
Configuration.javac,
|
||||
"-d", fileStart2,
|
||||
"-classpath", cp.getAbsolutePath(),
|
||||
java.getAbsolutePath()
|
||||
);
|
||||
} else {
|
||||
pb = new ProcessBuilder(
|
||||
BytecodeViewer.javac,
|
||||
Configuration.javac,
|
||||
"-d", fileStart2,
|
||||
"-classpath",
|
||||
cp.getAbsolutePath() + System.getProperty("path.separator") + BytecodeViewer.library,
|
||||
cp.getAbsolutePath() + System.getProperty("path.separator") + Configuration.library,
|
||||
java.getAbsolutePath()
|
||||
);
|
||||
}
|
||||
|
|
|
@ -6,6 +6,7 @@ import java.io.InputStream;
|
|||
import java.io.InputStreamReader;
|
||||
import me.konloch.kontainer.io.DiskWriter;
|
||||
import the.bytecode.club.bytecodeviewer.BytecodeViewer;
|
||||
import the.bytecode.club.bytecodeviewer.Configuration;
|
||||
import the.bytecode.club.bytecodeviewer.Constants;
|
||||
import the.bytecode.club.bytecodeviewer.util.JarUtils;
|
||||
import the.bytecode.club.bytecodeviewer.util.MiscUtils;
|
||||
|
@ -39,12 +40,12 @@ public class KrakatauAssembler extends Compiler {
|
|||
|
||||
@Override
|
||||
public byte[] compile(String contents, String name) {
|
||||
if (BytecodeViewer.python.equals("")) {
|
||||
if (Configuration.python.isEmpty()) {
|
||||
BytecodeViewer.showMessage("You need to set your Python (or PyPy for speed) 2.7 executable path.");
|
||||
BytecodeViewer.viewer.pythonC();
|
||||
}
|
||||
|
||||
if (BytecodeViewer.python.equals("")) {
|
||||
if (Configuration.python.isEmpty()) {
|
||||
BytecodeViewer.showMessage("You need to set Python!");
|
||||
return null;
|
||||
}
|
||||
|
@ -68,7 +69,7 @@ public class KrakatauAssembler extends Compiler {
|
|||
StringBuilder log = new StringBuilder();
|
||||
try {
|
||||
ProcessBuilder pb = new ProcessBuilder(
|
||||
BytecodeViewer.python,
|
||||
Configuration.python,
|
||||
"-O", //love you storyyeller <3
|
||||
krakatauWorkingDirectory + fs + "assemble.py",
|
||||
"-out",
|
||||
|
|
|
@ -9,6 +9,7 @@ import java.io.StringWriter;
|
|||
import me.konloch.kontainer.io.DiskReader;
|
||||
import org.objectweb.asm.tree.ClassNode;
|
||||
import the.bytecode.club.bytecodeviewer.BytecodeViewer;
|
||||
import the.bytecode.club.bytecodeviewer.Configuration;
|
||||
import the.bytecode.club.bytecodeviewer.Constants;
|
||||
import the.bytecode.club.bytecodeviewer.util.JarUtils;
|
||||
import the.bytecode.club.bytecodeviewer.util.MiscUtils;
|
||||
|
@ -42,31 +43,31 @@ import static the.bytecode.club.bytecodeviewer.Constants.*;
|
|||
public class KrakatauDecompiler extends Decompiler {
|
||||
|
||||
public String quick() {
|
||||
if (BytecodeViewer.library.isEmpty())
|
||||
if (Configuration.library.isEmpty())
|
||||
return "";
|
||||
else
|
||||
return ";" + BytecodeViewer.library;
|
||||
return ";" + Configuration.library;
|
||||
}
|
||||
|
||||
public String decompileClassNode(File krakatauTempJar, File krakatauTempDir, ClassNode cn) {
|
||||
if (BytecodeViewer.python.equals("")) {
|
||||
if (Configuration.python.isEmpty()) {
|
||||
BytecodeViewer.showMessage("You need to set your Python (or PyPy for speed) 2.7 executable path.");
|
||||
BytecodeViewer.viewer.pythonC();
|
||||
}
|
||||
|
||||
BytecodeViewer.rtCheck();
|
||||
if (BytecodeViewer.rt.equals("")) {
|
||||
if (Configuration.rt.isEmpty()) {
|
||||
BytecodeViewer.showMessage("You need to set your JRE RT Library.\r\n(C:\\Program Files (x86)"
|
||||
+ "\\Java\\jre7\\lib\\rt.jar)");
|
||||
BytecodeViewer.viewer.rtC();
|
||||
}
|
||||
|
||||
if (BytecodeViewer.python.equals("")) {
|
||||
if (Configuration.python.isEmpty()) {
|
||||
BytecodeViewer.showMessage("You need to set Python!");
|
||||
return "Set your paths";
|
||||
}
|
||||
|
||||
if (BytecodeViewer.rt.equals("")) {
|
||||
if (Configuration.rt.isEmpty()) {
|
||||
BytecodeViewer.showMessage("You need to set RT.jar!");
|
||||
return "Set your paths";
|
||||
}
|
||||
|
@ -77,13 +78,13 @@ public class KrakatauDecompiler extends Decompiler {
|
|||
BytecodeViewer.sm.stopBlocking();
|
||||
try {
|
||||
ProcessBuilder pb = new ProcessBuilder(
|
||||
BytecodeViewer.python,
|
||||
Configuration.python,
|
||||
"-O", //love you storyyeller <3
|
||||
krakatauWorkingDirectory + fs + "decompile.py",
|
||||
"-skip", //love you storyyeller <3
|
||||
"-nauto",
|
||||
"-path",
|
||||
BytecodeViewer.rt + ";" + krakatauTempJar.getAbsolutePath() + quick(),
|
||||
Configuration.rt + ";" + krakatauTempJar.getAbsolutePath() + quick(),
|
||||
"-out",
|
||||
krakatauTempDir.getAbsolutePath(),
|
||||
cn.name + ".class"
|
||||
|
@ -132,22 +133,22 @@ public class KrakatauDecompiler extends Decompiler {
|
|||
|
||||
@Override
|
||||
public String decompileClassNode(ClassNode cn, byte[] b) {
|
||||
if (BytecodeViewer.python.equals("")) {
|
||||
if (Configuration.python.isEmpty()) {
|
||||
BytecodeViewer.showMessage("You need to set your Python (or PyPy for speed) 2.7 executable path.");
|
||||
BytecodeViewer.viewer.pythonC();
|
||||
}
|
||||
if (BytecodeViewer.rt.equals("")) {
|
||||
BytecodeViewer.showMessage("You need to set your JRE RT Library.\r\n(C:\\Program Files (x86)"
|
||||
+ "\\Java\\jre7\\lib\\rt.jar)");
|
||||
if (Configuration.rt.isEmpty()) {
|
||||
BytecodeViewer.showMessage("You need to set your JRE RT Library." +
|
||||
"\r\n(C:\\Program Files (x86)\\Java\\jre7\\lib\\rt.jar)");
|
||||
BytecodeViewer.viewer.rtC();
|
||||
}
|
||||
|
||||
if (BytecodeViewer.python.equals("")) {
|
||||
if (Configuration.python.isEmpty()) {
|
||||
BytecodeViewer.showMessage("You need to set Python!");
|
||||
return "Set your paths";
|
||||
}
|
||||
|
||||
if (BytecodeViewer.rt.equals("")) {
|
||||
if (Configuration.rt.isEmpty()) {
|
||||
BytecodeViewer.showMessage("You need to set RT.jar!");
|
||||
return "Set your paths";
|
||||
}
|
||||
|
@ -165,13 +166,13 @@ public class KrakatauDecompiler extends Decompiler {
|
|||
|
||||
try {
|
||||
ProcessBuilder pb = new ProcessBuilder(
|
||||
BytecodeViewer.python,
|
||||
Configuration.python,
|
||||
"-O", //love you storyyeller <3
|
||||
krakatauWorkingDirectory + fs + "decompile.py",
|
||||
"-skip", //love you storyyeller <3
|
||||
"-nauto",
|
||||
"-path",
|
||||
BytecodeViewer.rt + ";" + tempJar.getAbsolutePath() + quick(),
|
||||
Configuration.rt + ";" + tempJar.getAbsolutePath() + quick(),
|
||||
"-out",
|
||||
tempDirectory.getAbsolutePath(),
|
||||
cn.name + ".class"
|
||||
|
@ -223,14 +224,14 @@ public class KrakatauDecompiler extends Decompiler {
|
|||
|
||||
@Override
|
||||
public void decompileToZip(String sourceJar, String zipName) {
|
||||
if (BytecodeViewer.python.equals("")) {
|
||||
if (Configuration.python.isEmpty()) {
|
||||
BytecodeViewer.showMessage("You need to set your Python (or PyPy for speed) 2.7 executable path.");
|
||||
BytecodeViewer.viewer.pythonC();
|
||||
}
|
||||
BytecodeViewer.rtCheck();
|
||||
if (BytecodeViewer.rt.equals("")) {
|
||||
BytecodeViewer.showMessage("You need to set your JRE RT Library.\r\n(C:\\Program Files (x86)"
|
||||
+ "\\Java\\jre7\\lib\\rt.jar)");
|
||||
if (Configuration.rt.isEmpty()) {
|
||||
BytecodeViewer.showMessage("You need to set your JRE RT Library." +
|
||||
"\r\n(C:\\Program Files (x86)\\Java\\jre7\\lib\\rt.jar)");
|
||||
BytecodeViewer.viewer.rtC();
|
||||
}
|
||||
|
||||
|
@ -245,13 +246,13 @@ public class KrakatauDecompiler extends Decompiler {
|
|||
|
||||
try {
|
||||
ProcessBuilder pb = new ProcessBuilder(
|
||||
BytecodeViewer.python,
|
||||
Configuration.python,
|
||||
"-O", //love you storyyeller <3
|
||||
krakatauWorkingDirectory + fs + "decompile.py",
|
||||
"-skip", //love you storyyeller <3
|
||||
"-nauto",
|
||||
"-path",
|
||||
BytecodeViewer.rt + ";" + tempJar.getAbsolutePath(),
|
||||
Configuration.rt + ";" + tempJar.getAbsolutePath(),
|
||||
"-out",
|
||||
tempDirectory.getAbsolutePath(),
|
||||
tempJar.getAbsolutePath()
|
||||
|
|
|
@ -9,6 +9,7 @@ import java.io.StringWriter;
|
|||
import me.konloch.kontainer.io.DiskReader;
|
||||
import org.objectweb.asm.tree.ClassNode;
|
||||
import the.bytecode.club.bytecodeviewer.BytecodeViewer;
|
||||
import the.bytecode.club.bytecodeviewer.Configuration;
|
||||
import the.bytecode.club.bytecodeviewer.Constants;
|
||||
import the.bytecode.club.bytecodeviewer.util.JarUtils;
|
||||
import the.bytecode.club.bytecodeviewer.util.MiscUtils;
|
||||
|
@ -43,12 +44,12 @@ import static the.bytecode.club.bytecodeviewer.Constants.*;
|
|||
public class KrakatauDisassembler extends Decompiler {
|
||||
|
||||
public String decompileClassNode(File krakatauTempJar, File krakatauTempDir, ClassNode cn) {
|
||||
if (BytecodeViewer.python.equals("")) {
|
||||
if (Configuration.python.isEmpty()) {
|
||||
BytecodeViewer.showMessage("You need to set your Python (or PyPy for speed) 2.7 executable path.");
|
||||
BytecodeViewer.viewer.pythonC();
|
||||
}
|
||||
|
||||
if (BytecodeViewer.python.equals("")) {
|
||||
if (Configuration.python.isEmpty()) {
|
||||
BytecodeViewer.showMessage("You need to set Python!");
|
||||
return "Set your paths";
|
||||
}
|
||||
|
@ -59,7 +60,7 @@ public class KrakatauDisassembler extends Decompiler {
|
|||
BytecodeViewer.sm.stopBlocking();
|
||||
try {
|
||||
ProcessBuilder pb = new ProcessBuilder(
|
||||
BytecodeViewer.python,
|
||||
Configuration.python,
|
||||
"-O", //love you storyyeller <3
|
||||
krakatauWorkingDirectory + fs + "disassemble.py",
|
||||
"-path",
|
||||
|
@ -112,12 +113,12 @@ public class KrakatauDisassembler extends Decompiler {
|
|||
|
||||
@Override
|
||||
public String decompileClassNode(ClassNode cn, byte[] b) {
|
||||
if (BytecodeViewer.python.equals("")) {
|
||||
if (Configuration.python.isEmpty()) {
|
||||
BytecodeViewer.showMessage("You need to set your Python (or PyPy for speed) 2.7 executable path.");
|
||||
BytecodeViewer.viewer.pythonC();
|
||||
}
|
||||
|
||||
if (BytecodeViewer.python.equals("")) {
|
||||
if (Configuration.python.isEmpty()) {
|
||||
BytecodeViewer.showMessage("You need to set Python!");
|
||||
return "Set your paths";
|
||||
}
|
||||
|
@ -133,7 +134,7 @@ public class KrakatauDisassembler extends Decompiler {
|
|||
BytecodeViewer.sm.stopBlocking();
|
||||
try {
|
||||
ProcessBuilder pb = new ProcessBuilder(
|
||||
BytecodeViewer.python,
|
||||
Configuration.python,
|
||||
"-O", //love you storyyeller <3
|
||||
krakatauWorkingDirectory + fs + "disassemble.py",
|
||||
"-path",
|
||||
|
@ -185,7 +186,7 @@ public class KrakatauDisassembler extends Decompiler {
|
|||
|
||||
@Override
|
||||
public void decompileToZip(String sourceJar, String zipName) {
|
||||
if (BytecodeViewer.python.equals("")) {
|
||||
if (Configuration.python.isEmpty()) {
|
||||
BytecodeViewer.showMessage("You need to set your Python (or PyPy for speed) 2.7 executable path.");
|
||||
BytecodeViewer.viewer.pythonC();
|
||||
}
|
||||
|
@ -199,11 +200,11 @@ public class KrakatauDisassembler extends Decompiler {
|
|||
BytecodeViewer.sm.stopBlocking();
|
||||
try {
|
||||
ProcessBuilder pb = new ProcessBuilder(
|
||||
BytecodeViewer.python,
|
||||
Configuration.python,
|
||||
"-O", //love you storyyeller <3
|
||||
krakatauWorkingDirectory + fs + "disassemble.py",
|
||||
"-path",
|
||||
BytecodeViewer.rt + ";" + tempJar.getAbsolutePath(),
|
||||
Configuration.rt + ";" + tempJar.getAbsolutePath(),
|
||||
"-out",
|
||||
tempDirectory.getAbsolutePath(),
|
||||
tempJar.getAbsolutePath()
|
||||
|
|
|
@ -152,7 +152,7 @@ public class InstructionPrinter {
|
|||
line += "UNADDED OPCODE: " + nameOpcode(ain.getOpcode()) + " "
|
||||
+ ain;
|
||||
}
|
||||
if (!line.equals("")) {
|
||||
if (!line.isEmpty()) {
|
||||
if (match)
|
||||
if (matchedInsns.contains(ain))
|
||||
line = " -> " + line;
|
||||
|
|
|
@ -10,7 +10,7 @@ import javax.swing.JTextArea;
|
|||
import the.bytecode.club.bytecodeviewer.BytecodeViewer;
|
||||
import the.bytecode.club.bytecodeviewer.Resources;
|
||||
|
||||
import static the.bytecode.club.bytecodeviewer.BytecodeViewer.*;
|
||||
import static the.bytecode.club.bytecodeviewer.Configuration.*;
|
||||
import static the.bytecode.club.bytecodeviewer.Constants.*;
|
||||
|
||||
/***************************************************************************
|
||||
|
|
|
@ -47,6 +47,7 @@ import org.objectweb.asm.ClassWriter;
|
|||
import org.objectweb.asm.Type;
|
||||
import org.objectweb.asm.tree.ClassNode;
|
||||
import the.bytecode.club.bytecodeviewer.BytecodeViewer;
|
||||
import the.bytecode.club.bytecodeviewer.Configuration;
|
||||
import the.bytecode.club.bytecodeviewer.Resources;
|
||||
import the.bytecode.club.bytecodeviewer.Settings;
|
||||
import the.bytecode.club.bytecodeviewer.decompilers.Decompilers;
|
||||
|
@ -1620,7 +1621,7 @@ public class ClassViewer extends Viewer {
|
|||
|
||||
Thread t = new Thread(() -> {
|
||||
BytecodeViewer.viewer.setIcon(true);
|
||||
while (BytecodeViewer.currentlyDumping) {
|
||||
while (Configuration.currentlyDumping) {
|
||||
//wait until it's not dumping
|
||||
try {
|
||||
Thread.sleep(100);
|
||||
|
@ -1642,8 +1643,8 @@ public class ClassViewer extends Viewer {
|
|||
t.start();
|
||||
|
||||
if (isPanel1Editable() || isPanel2Editable() || isPanel3Editable()) {
|
||||
if (!BytecodeViewer.warnForEditing) {
|
||||
BytecodeViewer.warnForEditing = true;
|
||||
if (!Configuration.warnForEditing) {
|
||||
Configuration.warnForEditing = true;
|
||||
if (!BytecodeViewer.viewer.autoCompileOnRefresh.isSelected() && !BytecodeViewer.viewer.compileOnSave.isSelected()) {
|
||||
BytecodeViewer.showMessage("Make sure to compile (File>Compile or Ctrl + T) whenever you want to "
|
||||
+ "test or export your changes.\nYou can set compile automatically on refresh or on save "
|
||||
|
|
|
@ -35,6 +35,7 @@ import me.konloch.kontainer.io.DiskWriter;
|
|||
import org.objectweb.asm.ClassWriter;
|
||||
import org.objectweb.asm.tree.ClassNode;
|
||||
import the.bytecode.club.bytecodeviewer.BytecodeViewer;
|
||||
import the.bytecode.club.bytecodeviewer.Configuration;
|
||||
import the.bytecode.club.bytecodeviewer.Resources;
|
||||
import the.bytecode.club.bytecodeviewer.Settings;
|
||||
import the.bytecode.club.bytecodeviewer.api.ExceptionUI;
|
||||
|
@ -412,14 +413,13 @@ public class MainViewerGUI extends JFrame implements FileChangeNotifier {
|
|||
public final JRadioButtonMenuItem asmText3 = new JRadioButtonMenuItem("ASM Textify");
|
||||
|
||||
public final JSpinner fontSpinner = new JSpinner();
|
||||
private final JCheckBoxMenuItem chckbxmntmDeleteForeignOutdatedLibs = new JCheckBoxMenuItem("Delete "
|
||||
+ "Foreign/Outdated Libs");
|
||||
private final JCheckBoxMenuItem chckbxmntmDeleteForeignOutdatedLibs = new JCheckBoxMenuItem("Delete Foreign/Outdated Libs");
|
||||
public final ButtonGroup apkConversionGroup = new ButtonGroup();
|
||||
public final JRadioButtonMenuItem apkConversionDex = new JRadioButtonMenuItem("Dex2Jar");
|
||||
public final JRadioButtonMenuItem apkConversionEnjarify = new JRadioButtonMenuItem("Enjarify");
|
||||
|
||||
public void calledAfterLoad() {
|
||||
chckbxmntmDeleteForeignOutdatedLibs.setSelected(BytecodeViewer.deleteForeignLibraries);
|
||||
chckbxmntmDeleteForeignOutdatedLibs.setSelected(Configuration.deleteForeignLibraries);
|
||||
}
|
||||
|
||||
public MainViewerGUI() {
|
||||
|
@ -463,7 +463,7 @@ public class MainViewerGUI extends JFrame implements FileChangeNotifier {
|
|||
addWindowListener(new WindowAdapter() {
|
||||
@Override
|
||||
public void windowClosing(WindowEvent e) {
|
||||
BytecodeViewer.canExit = true;
|
||||
Configuration.canExit = true;
|
||||
System.exit(0);
|
||||
}
|
||||
});
|
||||
|
@ -483,7 +483,7 @@ public class MainViewerGUI extends JFrame implements FileChangeNotifier {
|
|||
final JFileChooser fc = new JFileChooser();
|
||||
|
||||
try {
|
||||
File f = new File(BytecodeViewer.lastDirectory);
|
||||
File f = new File(Configuration.lastDirectory);
|
||||
if (f.exists())
|
||||
fc.setSelectedFile(f);
|
||||
} catch (Exception ignored) {
|
||||
|
@ -515,7 +515,7 @@ public class MainViewerGUI extends JFrame implements FileChangeNotifier {
|
|||
int returnVal = fc.showOpenDialog(BytecodeViewer.viewer);
|
||||
|
||||
if (returnVal == JFileChooser.APPROVE_OPTION) {
|
||||
BytecodeViewer.lastDirectory = fc.getSelectedFile().getAbsolutePath();
|
||||
Configuration.lastDirectory = fc.getSelectedFile().getAbsolutePath();
|
||||
try {
|
||||
BytecodeViewer.viewer.setIcon(true);
|
||||
BytecodeViewer.openFiles(new File[]{fc.getSelectedFile()}, true);
|
||||
|
@ -1345,7 +1345,7 @@ public class MainViewerGUI extends JFrame implements FileChangeNotifier {
|
|||
result = k;
|
||||
|
||||
if (result == 0) {
|
||||
BytecodeViewer.canExit = true;
|
||||
Configuration.canExit = true;
|
||||
System.exit(0);
|
||||
}
|
||||
});
|
||||
|
@ -1410,22 +1410,21 @@ public class MainViewerGUI extends JFrame implements FileChangeNotifier {
|
|||
panel1Fern.addActionListener(listener);
|
||||
|
||||
mnFernflower.add(separator_20);
|
||||
|
||||
mnFernflower.add(panel1Fern_E);
|
||||
|
||||
mnNewMenu_7.add(mnKrakatau);
|
||||
mnKrakatau.add(panel1Krakatau);
|
||||
|
||||
panel1Krakatau.addActionListener(listener);
|
||||
mnKrakatau.add(panel1KrakatauBytecode);
|
||||
panel1KrakatauBytecode.addActionListener(listener);
|
||||
|
||||
mnKrakatau.add(separator_21);
|
||||
|
||||
mnKrakatau.add(panel1Krakatau_E);
|
||||
|
||||
mnNewMenu_7.add(separator_8);
|
||||
|
||||
mnNewMenu_7.add(mnSmalidex);
|
||||
|
||||
mnSmalidex.add(panel1Smali);
|
||||
panel1Smali.addActionListener(listener);
|
||||
|
||||
|
@ -1435,35 +1434,25 @@ public class MainViewerGUI extends JFrame implements FileChangeNotifier {
|
|||
panel1Bytecode.addActionListener(listener);
|
||||
|
||||
mnNewMenu_7.add(separator_15);
|
||||
|
||||
mnNewMenu_7.add(panel1Bytecode);
|
||||
|
||||
mnNewMenu_7.add(panel1Hexcode);
|
||||
|
||||
mnNewMenu_7.add(asmText1);
|
||||
|
||||
mnNewMenu_6.add(mnPane);
|
||||
|
||||
mnPane.add(panel2None);
|
||||
|
||||
mnPane.add(separator_9);
|
||||
|
||||
mnPane.add(menu_1);
|
||||
|
||||
menu_1.add(panel2Proc);
|
||||
|
||||
menu_1.add(separator_10);
|
||||
|
||||
menu_1.add(panel2Proc_E);
|
||||
|
||||
mnPane.add(menu_2);
|
||||
|
||||
mnPane.add(jadx2);
|
||||
|
||||
menu_2.add(panel2CFR);
|
||||
|
||||
menu_2.add(separator_11);
|
||||
|
||||
menu_2.add(panel2CFR_E);
|
||||
|
||||
JMenu menu = new JMenu("JD-GUI");
|
||||
|
@ -1471,45 +1460,32 @@ public class MainViewerGUI extends JFrame implements FileChangeNotifier {
|
|||
|
||||
menu.add(panel2JDGUI);
|
||||
|
||||
JSeparator separator_34 = new JSeparator();
|
||||
menu.add(separator_34);
|
||||
|
||||
menu.add(new JSeparator());
|
||||
menu.add(panel2JDGUI_E);
|
||||
|
||||
mnPane.add(menu_3);
|
||||
|
||||
menu_3.add(panel2Fern);
|
||||
|
||||
menu_3.add(separator_12);
|
||||
|
||||
menu_3.add(panel2Fern_E);
|
||||
|
||||
mnPane.add(menu_4);
|
||||
|
||||
menu_4.add(panel2Krakatau);
|
||||
|
||||
menu_4.add(panel2KrakatauBytecode);
|
||||
|
||||
menu_4.add(separator_16);
|
||||
|
||||
menu_4.add(panel2Krakatau_E);
|
||||
|
||||
|
||||
mnPane.add(separator_17);
|
||||
|
||||
mnPane.add(menu_5);
|
||||
|
||||
menu_5.add(panel2Smali);
|
||||
|
||||
menu_5.add(separator_23);
|
||||
|
||||
menu_5.add(panel2Smali_E);
|
||||
|
||||
mnPane.add(separator_24);
|
||||
|
||||
mnPane.add(panel2Bytecode);
|
||||
|
||||
mnPane.add(panel2Hexcode);
|
||||
|
||||
mnPane.add(asmText2);
|
||||
|
||||
mnNewMenu_6.add(mnPane_1);
|
||||
|
@ -1622,7 +1598,7 @@ public class MainViewerGUI extends JFrame implements FileChangeNotifier {
|
|||
BytecodeViewer.showMessage("WARNING: With this being toggled off outdated libraries will NOT be "
|
||||
+ "removed. It's also a security issue. ONLY TURN IT OFF IF YOU KNOW WHAT YOU'RE DOING.");
|
||||
}
|
||||
BytecodeViewer.deleteForeignLibraries = chckbxmntmDeleteForeignOutdatedLibs.isSelected();
|
||||
Configuration.deleteForeignLibraries = chckbxmntmDeleteForeignOutdatedLibs.isSelected();
|
||||
});
|
||||
mnSettings.add(forcePureAsciiAsText);
|
||||
forcePureAsciiAsText.setSelected(true);
|
||||
|
@ -1874,9 +1850,8 @@ public class MainViewerGUI extends JFrame implements FileChangeNotifier {
|
|||
|
||||
menuBar.add(mnNewMenu_5);
|
||||
mntmNewMenuItem_6.addActionListener(arg0 -> {
|
||||
if (BytecodeViewer.runningObfuscation) {
|
||||
BytecodeViewer.showMessage("You're currently running an obfuscation task, wait for this to finish"
|
||||
+ ".");
|
||||
if (Configuration.runningObfuscation) {
|
||||
BytecodeViewer.showMessage("You're currently running an obfuscation task, wait for this to finish.");
|
||||
return;
|
||||
}
|
||||
new RenameFields().start();
|
||||
|
@ -1895,7 +1870,7 @@ public class MainViewerGUI extends JFrame implements FileChangeNotifier {
|
|||
|
||||
mnNewMenu_5.add(mntmNewMenuItem_6);
|
||||
mntmNewMenuItem_7.addActionListener(arg0 -> {
|
||||
if (BytecodeViewer.runningObfuscation) {
|
||||
if (Configuration.runningObfuscation) {
|
||||
BytecodeViewer.showMessage("You're currently running an obfuscation task, wait for this to finish"
|
||||
+ ".");
|
||||
return;
|
||||
|
@ -1907,7 +1882,7 @@ public class MainViewerGUI extends JFrame implements FileChangeNotifier {
|
|||
|
||||
mnNewMenu_5.add(mntmNewMenuItem_7);
|
||||
mntmNewMenuItem_11.addActionListener(arg0 -> {
|
||||
if (BytecodeViewer.runningObfuscation) {
|
||||
if (Configuration.runningObfuscation) {
|
||||
BytecodeViewer.showMessage("You're currently running an obfuscation task, wait for this to finish"
|
||||
+ ".");
|
||||
return;
|
||||
|
@ -1919,10 +1894,8 @@ public class MainViewerGUI extends JFrame implements FileChangeNotifier {
|
|||
|
||||
mnNewMenu_5.add(mntmNewMenuItem_11);
|
||||
mntmNewMenuItem_9.setEnabled(false);
|
||||
|
||||
mnNewMenu_5.add(mntmNewMenuItem_9);
|
||||
mntmNewMenuItem_10.setEnabled(false);
|
||||
|
||||
mnNewMenu_5.add(mntmNewMenuItem_10);
|
||||
|
||||
menuBar.add(mnNewMenu_1);
|
||||
|
@ -1957,7 +1930,6 @@ public class MainViewerGUI extends JFrame implements FileChangeNotifier {
|
|||
//mnNewMenu_1.add(mntmStartZkmString);
|
||||
|
||||
mntmZstringarrayDecrypter.addActionListener(arg0 -> PluginManager.runPlugin(new ZStringArrayDecrypter()));
|
||||
|
||||
mntmStackFramesRemover.addActionListener(e -> PluginManager.runPlugin(new StackFramesRemover()));
|
||||
|
||||
mnNewMenu_1.add(mntmZstringarrayDecrypter);
|
||||
|
@ -1997,19 +1969,15 @@ public class MainViewerGUI extends JFrame implements FileChangeNotifier {
|
|||
new MaliciousCodeScannerOptions().setVisible(true);
|
||||
});
|
||||
mntmShowAllStrings.addActionListener(e -> PluginManager.runPlugin(new ShowAllStrings()));
|
||||
|
||||
mntmShowMainMethods.addActionListener(e -> PluginManager.runPlugin(new ShowMainMethods()));
|
||||
|
||||
setSize(new Dimension(800, 400));
|
||||
if (PREVIEW_COPY)
|
||||
setTitle("Bytecode Viewer " + VERSION + " Preview - https://bytecodeviewer.com | "
|
||||
+ "https://the.bytecode.club - @Konloch");
|
||||
setTitle("Bytecode Viewer " + VERSION + " Preview - https://bytecodeviewer.com | https://the.bytecode.club - @Konloch");
|
||||
else
|
||||
setTitle("Bytecode Viewer " + VERSION + " - https://bytecodeviewer.com | https://the"
|
||||
+ ".bytecode.club - @Konloch");
|
||||
setTitle("Bytecode Viewer " + VERSION + " - https://bytecodeviewer.com | https://the.bytecode.club - @Konloch");
|
||||
|
||||
getContentPane().setLayout(
|
||||
new BoxLayout(getContentPane(), BoxLayout.X_AXIS));
|
||||
getContentPane().setLayout(new BoxLayout(getContentPane(), BoxLayout.X_AXIS));
|
||||
|
||||
// scrollPane.setViewportView(tree);
|
||||
cn.setMinimumSize(new Dimension(200, 50));
|
||||
|
@ -2087,7 +2055,7 @@ public class MainViewerGUI extends JFrame implements FileChangeNotifier {
|
|||
visualSettings.add(showFileInTabTitle);
|
||||
showFileInTabTitle.setSelected(false);
|
||||
showFileInTabTitle.addActionListener(arg0 -> {
|
||||
BytecodeViewer.displayParentInTab = BytecodeViewer.viewer.showFileInTabTitle.isSelected();
|
||||
Configuration.displayParentInTab = BytecodeViewer.viewer.showFileInTabTitle.isSelected();
|
||||
Settings.saveSettings();
|
||||
});
|
||||
|
||||
|
@ -2146,7 +2114,7 @@ public class MainViewerGUI extends JFrame implements FileChangeNotifier {
|
|||
|
||||
if (returnVal == JFileChooser.APPROVE_OPTION)
|
||||
try {
|
||||
BytecodeViewer.python = fc.getSelectedFile().getAbsolutePath();
|
||||
Configuration.python = fc.getSelectedFile().getAbsolutePath();
|
||||
} catch (Exception e1) {
|
||||
new the.bytecode.club.bytecodeviewer.api.ExceptionUI(e1);
|
||||
}
|
||||
|
@ -2171,7 +2139,7 @@ public class MainViewerGUI extends JFrame implements FileChangeNotifier {
|
|||
|
||||
if (returnVal == JFileChooser.APPROVE_OPTION)
|
||||
try {
|
||||
BytecodeViewer.javac = fc.getSelectedFile().getAbsolutePath();
|
||||
Configuration.javac = fc.getSelectedFile().getAbsolutePath();
|
||||
} catch (Exception e1) {
|
||||
new the.bytecode.club.bytecodeviewer.api.ExceptionUI(e1);
|
||||
}
|
||||
|
@ -2196,7 +2164,7 @@ public class MainViewerGUI extends JFrame implements FileChangeNotifier {
|
|||
|
||||
if (returnVal == JFileChooser.APPROVE_OPTION)
|
||||
try {
|
||||
BytecodeViewer.java = fc.getSelectedFile().getAbsolutePath();
|
||||
Configuration.java = fc.getSelectedFile().getAbsolutePath();
|
||||
} catch (Exception e1) {
|
||||
new the.bytecode.club.bytecodeviewer.api.ExceptionUI(e1);
|
||||
}
|
||||
|
@ -2221,7 +2189,7 @@ public class MainViewerGUI extends JFrame implements FileChangeNotifier {
|
|||
|
||||
if (returnVal == JFileChooser.APPROVE_OPTION)
|
||||
try {
|
||||
BytecodeViewer.python3 = fc.getSelectedFile().getAbsolutePath();
|
||||
Configuration.python3 = fc.getSelectedFile().getAbsolutePath();
|
||||
} catch (Exception e1) {
|
||||
new the.bytecode.club.bytecodeviewer.api.ExceptionUI(e1);
|
||||
}
|
||||
|
@ -2247,7 +2215,7 @@ public class MainViewerGUI extends JFrame implements FileChangeNotifier {
|
|||
|
||||
if (returnVal == JFileChooser.APPROVE_OPTION)
|
||||
try {
|
||||
BytecodeViewer.library = fc.getSelectedFile().getAbsolutePath();
|
||||
Configuration.library = fc.getSelectedFile().getAbsolutePath();
|
||||
} catch (Exception e1) {
|
||||
new the.bytecode.club.bytecodeviewer.api.ExceptionUI(e1);
|
||||
}
|
||||
|
@ -2273,7 +2241,7 @@ public class MainViewerGUI extends JFrame implements FileChangeNotifier {
|
|||
|
||||
if (returnVal == JFileChooser.APPROVE_OPTION)
|
||||
try {
|
||||
BytecodeViewer.rt = fc.getSelectedFile().getAbsolutePath();
|
||||
Configuration.rt = fc.getSelectedFile().getAbsolutePath();
|
||||
} catch (Exception e1) {
|
||||
new the.bytecode.club.bytecodeviewer.api.ExceptionUI(e1);
|
||||
}
|
||||
|
|
|
@ -19,6 +19,7 @@ import javax.swing.JPopupMenu;
|
|||
import javax.swing.JTabbedPane;
|
||||
import org.objectweb.asm.tree.ClassNode;
|
||||
import the.bytecode.club.bytecodeviewer.BytecodeViewer;
|
||||
import the.bytecode.club.bytecodeviewer.Configuration;
|
||||
import the.bytecode.club.bytecodeviewer.util.FileChangeNotifier;
|
||||
import the.bytecode.club.bytecodeviewer.util.FileContainer;
|
||||
|
||||
|
@ -204,7 +205,7 @@ public class WorkPane extends VisibleComponent implements ActionListener {
|
|||
String workingName = container.name + ">" + name;
|
||||
String containerName = name;
|
||||
|
||||
if (BytecodeViewer.displayParentInTab)
|
||||
if (Configuration.displayParentInTab)
|
||||
containerName = container.name + ">" + name;
|
||||
|
||||
if (!workingOn.containsKey(workingName)) {
|
||||
|
@ -224,7 +225,7 @@ public class WorkPane extends VisibleComponent implements ActionListener {
|
|||
public void addFile(final FileContainer container, String name, byte[] contents) {
|
||||
String workingName = container.name + ">" + name;
|
||||
|
||||
if (BytecodeViewer.displayParentInTab)
|
||||
if (Configuration.displayParentInTab)
|
||||
name = container.name + ">" + name;
|
||||
|
||||
if (contents == null) //a directory
|
||||
|
|
|
@ -2,6 +2,7 @@ package the.bytecode.club.bytecodeviewer.obfuscators;
|
|||
|
||||
import java.util.ArrayList;
|
||||
import the.bytecode.club.bytecodeviewer.BytecodeViewer;
|
||||
import the.bytecode.club.bytecodeviewer.Configuration;
|
||||
import the.bytecode.club.bytecodeviewer.util.MiscUtils;
|
||||
|
||||
/***************************************************************************
|
||||
|
@ -33,16 +34,15 @@ public abstract class JavaObfuscator extends Thread {
|
|||
@Override
|
||||
public void run() {
|
||||
BytecodeViewer.viewer.setIcon(true);
|
||||
BytecodeViewer.runningObfuscation = true;
|
||||
Configuration.runningObfuscation = true;
|
||||
obfuscate();
|
||||
BytecodeViewer.refactorer.run();
|
||||
BytecodeViewer.runningObfuscation = false;
|
||||
Configuration.runningObfuscation = false;
|
||||
BytecodeViewer.viewer.setIcon(false);
|
||||
}
|
||||
|
||||
public int getStringLength() {
|
||||
if (BytecodeViewer.viewer.obfuscatorGroup
|
||||
.isSelected(BytecodeViewer.viewer.strongObf.getModel())) {
|
||||
if (BytecodeViewer.viewer.obfuscatorGroup.isSelected(BytecodeViewer.viewer.strongObf.getModel())) {
|
||||
return MAX_STRING_LENGTH;
|
||||
} else { // if(BytecodeViewer.viewer.obfuscatorGroup.isSelected(BytecodeViewer.viewer.lightObf.getModel()))
|
||||
// {
|
||||
|
|
|
@ -2,6 +2,7 @@ package the.bytecode.club.bytecodeviewer.util;
|
|||
|
||||
import java.io.File;
|
||||
import the.bytecode.club.bytecodeviewer.BytecodeViewer;
|
||||
import the.bytecode.club.bytecodeviewer.Configuration;
|
||||
|
||||
import static the.bytecode.club.bytecodeviewer.Constants.enjarifyWorkingDirectory;
|
||||
|
||||
|
@ -38,12 +39,12 @@ public class Enjarify {
|
|||
* @param output the output .jar file
|
||||
*/
|
||||
public static synchronized void apk2Jar(File input, File output) {
|
||||
if (BytecodeViewer.python3.equals("")) {
|
||||
if (Configuration.python3.isEmpty()) {
|
||||
BytecodeViewer.showMessage("You need to set your Python (or PyPy for speed) 3.x executable path.");
|
||||
BytecodeViewer.viewer.pythonC3();
|
||||
}
|
||||
|
||||
if (BytecodeViewer.python3.equals("")) {
|
||||
if (Configuration.python3.isEmpty()) {
|
||||
BytecodeViewer.showMessage("You need to set Python!");
|
||||
return;
|
||||
}
|
||||
|
@ -51,7 +52,7 @@ public class Enjarify {
|
|||
BytecodeViewer.sm.stopBlocking();
|
||||
try {
|
||||
ProcessBuilder pb = new ProcessBuilder(
|
||||
BytecodeViewer.python3,
|
||||
Configuration.python3,
|
||||
"-O",
|
||||
"-m",
|
||||
"enjarify.main",
|
||||
|
|
|
@ -1,5 +1,7 @@
|
|||
package the.bytecode.club.bytecodeviewer.util;
|
||||
|
||||
import org.objectweb.asm.tree.ClassNode;
|
||||
|
||||
import java.io.BufferedReader;
|
||||
import java.io.File;
|
||||
import java.io.InputStream;
|
||||
|
@ -158,6 +160,18 @@ public class MiscUtils {
|
|||
return path;
|
||||
}
|
||||
|
||||
public static int fileContainersHash(ArrayList<FileContainer> fileContainers) {
|
||||
StringBuilder block = new StringBuilder();
|
||||
for (FileContainer container : fileContainers) {
|
||||
block.append(container.name);
|
||||
for (ClassNode node : container.classes) {
|
||||
block.append(node.name);
|
||||
}
|
||||
}
|
||||
|
||||
return block.hashCode();
|
||||
}
|
||||
|
||||
/**
|
||||
* Converts an array list to a string
|
||||
*
|
||||
|
@ -167,6 +181,7 @@ public class MiscUtils {
|
|||
public static String listToString(List<String> a) {
|
||||
return gson.toJson(a);
|
||||
}
|
||||
|
||||
/**
|
||||
* @author JoshTheWolfe
|
||||
*/
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
package the.bytecode.club.bytecodeviewer.util;
|
||||
|
||||
import the.bytecode.club.bytecodeviewer.BytecodeViewer;
|
||||
import the.bytecode.club.bytecodeviewer.Configuration;
|
||||
|
||||
import java.io.FileDescriptor;
|
||||
import java.net.InetAddress;
|
||||
|
@ -126,7 +126,7 @@ public class SecurityMan extends SecurityManager {
|
|||
|
||||
@Override
|
||||
public void checkExit(int status) {
|
||||
if (!BytecodeViewer.canExit) {
|
||||
if (!Configuration.canExit) {
|
||||
throw new SecurityException("BCV is awesome, blocking System.exit(" + status + ");");
|
||||
}
|
||||
}
|
||||
|
|
|
@ -201,7 +201,7 @@ public final class ZipUtils {
|
|||
File folder = new File(srcFolder);
|
||||
|
||||
for (String fileName : Objects.requireNonNull(folder.list())) {
|
||||
if (path.equals("")) {
|
||||
if (path.isEmpty()) {
|
||||
addFileToZip(folder.getName(), srcFolder + "/" + fileName, zip, ignore);
|
||||
} else {
|
||||
addFileToZip(path + "/" + folder.getName(), srcFolder + "/" + fileName, zip, ignore);
|
||||
|
@ -213,7 +213,7 @@ public final class ZipUtils {
|
|||
File folder = new File(srcFolder);
|
||||
|
||||
for (String fileName : Objects.requireNonNull(folder.list())) {
|
||||
if (path.equals("")) {
|
||||
if (path.isEmpty()) {
|
||||
addFileToZipAPKTool(folder.getName(), srcFolder + "/" + fileName, zip);
|
||||
} else {
|
||||
addFileToZipAPKTool(path + "/" + folder.getName(), srcFolder + "/" + fileName, zip);
|
||||
|
|
Loading…
Reference in a new issue