diff --git a/README.md b/README.md index 9fcee70b1..a54779d47 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,6 @@ Bytecode Viewer - a lightweight user friendly Java Bytecode Viewer. * Added support to Java files compiled using JDK > 13 * Migrated to Maven - #### Links * Website: https://bytecodeviewer.com * Source Code: https://github.com/konloch/bytecode-viewer @@ -70,7 +69,7 @@ Open the Maven project (e.g. in IntelliJ, open the ``pom.xml`` as a project file ## Exporting as jar -Using Intellij create a new artifact jar and build it, if the META-INF is overrwitten replace it with the one in resources. +Using Intellij create a new artifact jar and build it, if the META-INF is overrwitten replace it with the one in src/main/resources. -##### Are you a Java Reverse Engineer? Do you want to learn? +#### Are you a Java Reverse Engineer? Do you want to learn? Join The Bytecode Club Today! - https://the.bytecode.club diff --git a/libs/jd-gui-1.6.6.jar b/libs/jd-gui-1.6.6-no-asm.jar similarity index 94% rename from libs/jd-gui-1.6.6.jar rename to libs/jd-gui-1.6.6-no-asm.jar index 58fd0da25..405115f32 100644 Binary files a/libs/jd-gui-1.6.6.jar and b/libs/jd-gui-1.6.6-no-asm.jar differ diff --git a/pom.xml b/pom.xml index 2e20f83eb..a771e4d3c 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ the.bytecode.club bytecodeviewer - 2.10.10 + 2.10.11 8 @@ -132,7 +132,7 @@ jd-gui 1.6.6 system - ${project.basedir}/libs/jd-gui-1.6.6.jar + ${project.basedir}/libs/jd-gui-1.6.6-no-asm.jar eu.bibl.banalysis diff --git a/src/main/java/META-INF/MANIFEST.MF b/src/main/java/META-INF/MANIFEST.MF new file mode 100644 index 000000000..919860b3e --- /dev/null +++ b/src/main/java/META-INF/MANIFEST.MF @@ -0,0 +1,3 @@ +Manifest-Version: 1.0 +Main-Class: the.bytecode.club.bytecodeviewer.BytecodeViewer + diff --git a/src/main/java/the/bytecode/club/bytecodeviewer/BytecodeViewer.java b/src/main/java/the/bytecode/club/bytecodeviewer/BytecodeViewer.java index 338b82f66..de58a2816 100644 --- a/src/main/java/the/bytecode/club/bytecodeviewer/BytecodeViewer.java +++ b/src/main/java/the/bytecode/club/bytecodeviewer/BytecodeViewer.java @@ -630,7 +630,7 @@ public static void resetRecentFilesMenu() { }); viewer.recentFilesSecondaryMenu.add(m); } - viewer.mnRecentPlugins.removeAll(); + viewer.recentPluginsSecondaryMenu.removeAll(); for (String s : recentPlugins) if (!s.isEmpty()) { JMenuItem m = new JMenuItem(s); @@ -638,7 +638,7 @@ public static void resetRecentFilesMenu() { JMenuItem m1 = (JMenuItem) e.getSource(); startPlugin(new File(m1.getText())); }); - viewer.mnRecentPlugins.add(m); + viewer.recentPluginsSecondaryMenu.add(m); } } diff --git a/src/main/java/the/bytecode/club/bytecodeviewer/Constants.java b/src/main/java/the/bytecode/club/bytecodeviewer/Constants.java index 0f5be61e8..aa39de767 100644 --- a/src/main/java/the/bytecode/club/bytecodeviewer/Constants.java +++ b/src/main/java/the/bytecode/club/bytecodeviewer/Constants.java @@ -16,7 +16,7 @@ public class Constants { /*per version*/ - public static final String VERSION = "2.10.10"; //could be loaded from the pom + public static final String VERSION = "2.10.11"; //could be loaded from the pom public static String krakatauVersion = "12"; public static String enjarifyVersion = "4"; public static final boolean BLOCK_TAB_MENU = true; diff --git a/src/main/java/the/bytecode/club/bytecodeviewer/gui/MainViewerGUI.java b/src/main/java/the/bytecode/club/bytecodeviewer/gui/MainViewerGUI.java index 75f5c4aa7..d14ac1d07 100644 --- a/src/main/java/the/bytecode/club/bytecodeviewer/gui/MainViewerGUI.java +++ b/src/main/java/the/bytecode/club/bytecodeviewer/gui/MainViewerGUI.java @@ -6,7 +6,6 @@ import java.awt.Frame; import java.awt.KeyEventDispatcher; import java.awt.KeyboardFocusManager; -import java.awt.event.ActionListener; import java.awt.event.KeyEvent; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; @@ -85,7 +84,7 @@ public class MainViewerGUI extends JFrame implements FileChangeNotifier { //all of the files main menu components public final JMenu fileMainMenu = new JMenu("File"); public final JMenuItem newWorkSpace = new JMenuItem("New Workspace"); - public final JMenuItem addResource = new JMenuItem("Add.."); + public final JMenuItem addResource = new JMenuItem("Add..."); public final JMenuItem reloadResources = new JMenuItem("Reload Resources"); public final JMenuItem runButton = new JMenuItem("Run"); public final JMenuItem compileButton = new JMenuItem("Compile"); @@ -105,6 +104,22 @@ public class MainViewerGUI extends JFrame implements FileChangeNotifier { public final ViewPane viewPane2 = new ViewPane(2); public final ViewPane viewPane3 = new ViewPane(3); + //TODO settings main menu components + + //all of the plugins main menu components + public final JMenu pluginsMainMenu = new JMenu("Plugins"); + public final JMenuItem openExternalPlugin = new JMenuItem("Open Plugin..."); + public final JMenu recentPluginsSecondaryMenu = new JMenu("Recent Plugins"); + public final JMenuItem ZKMStringDecrypter = new JMenuItem("ZKM String Decrypter"); + public final JMenuItem allatoriStringDecrypter = new JMenuItem("Allatori String Decrypter"); + public final JMenuItem codeSequenceDiagram = new JMenuItem("Code Sequence Diagram"); + public final JMenuItem maliciousCodeScanner = new JMenuItem("Malicious Code Scanner"); + public final JMenuItem showAllStrings = new JMenuItem("Show All Strings"); + public final JMenuItem showMainMethods = new JMenuItem("Show Main Methods"); + public final JMenuItem replaceStrings = new JMenuItem("Replace Strings"); + public final JMenuItem stackFramesRemover = new JMenuItem("StackFrames Remover"); + public final JMenuItem zStringArrayDecrypter = new JMenuItem("ZStringArray Decrypter"); + public JCheckBoxMenuItem debugHelpers = new JCheckBoxMenuItem("Debug Helpers"); public JSplitPane sp1; public JSplitPane sp2; @@ -127,16 +142,7 @@ public class MainViewerGUI extends JFrame implements FileChangeNotifier { public JCheckBoxMenuItem fdi = new JCheckBoxMenuItem("Deinline finally structures"); public JCheckBoxMenuItem asc = new JCheckBoxMenuItem("Allow only ASCII characters in strings"); public JCheckBoxMenuItem ren = new JCheckBoxMenuItem("Rename ambiguous classes and class elements"); - public final JMenu mnNewMenu_1 = new JMenu("Plugins"); - public final JMenuItem mntmStartExternalPlugin = new JMenuItem("Open Plugin.."); - public JMenu mnRecentPlugins = new JMenu("Recent Plugins"); - public final JMenuItem mntmStartZkmString = new JMenuItem("ZKM String Decrypter"); - public final JMenuItem mntmNewMenuItem_1 = new JMenuItem("Malicious Code Scanner"); - public final JMenuItem mntmNewMenuItem_2 = new JMenuItem("Allatori String Decrypter"); - public final JMenuItem mntmShowAllStrings = new JMenuItem("Show All Strings"); - public final JMenuItem mntmShowMainMethods = new JMenuItem("Show Main Methods"); - public final JMenuItem mntmReplaceStrings = new JMenuItem("Replace Strings"); - public final JMenuItem mntmStackFramesRemover = new JMenuItem("StackFrames Remover"); + public final JMenuItem[] waitIcons; public final JMenu mnNewMenu_3 = new JMenu("CFR"); public final JMenu mnNewMenu_4 = new JMenu("Procyon"); @@ -213,14 +219,12 @@ public class MainViewerGUI extends JFrame implements FileChangeNotifier { public final JMenu mnSettings = new JMenu("Settings"); public AboutWindow aboutWindow = new AboutWindow(); - public final JMenuItem mntmCodeSequenceDiagram = new JMenuItem("Code Sequence Diagram"); public final JCheckBoxMenuItem compileOnSave = new JCheckBoxMenuItem("Compile On Save"); public final JCheckBoxMenuItem showFileInTabTitle = new JCheckBoxMenuItem("Show File In Tab Title"); public final JCheckBoxMenuItem forcePureAsciiAsText = new JCheckBoxMenuItem("Force Pure Ascii As Text"); public final JCheckBoxMenuItem autoCompileOnRefresh = new JCheckBoxMenuItem("Compile On Refresh"); public final JMenuItem mntmSetPythonDirectory = new JMenuItem("Set Python 2.7 Executable"); public final JMenuItem mntmSetJreRt = new JMenuItem("Set JRE RT Library"); - public final JMenuItem mntmZstringarrayDecrypter = new JMenuItem("ZStringArray Decrypter"); public final JCheckBoxMenuItem decodeAPKResources = new JCheckBoxMenuItem("Decode APK Resources"); public final JCheckBoxMenuItem synchronizedViewing = new JCheckBoxMenuItem("Synchronized Viewing"); public final JCheckBoxMenuItem showClassMethods = new JCheckBoxMenuItem("Show Class Methods"); @@ -356,6 +360,7 @@ public void windowClosing(WindowEvent e) { buildMenuBar(); buildFileMenuBar(); buildViewMenuBar(); + buildPluginMenuBar(); compileOnSave.setSelected(false); @@ -694,42 +699,24 @@ public void windowClosing(WindowEvent e) { mntmNewMenuItem_10.setEnabled(false); mnNewMenu_5.add(mntmNewMenuItem_10); - rootMenu.add(mnNewMenu_1); - mnNewMenu_1.add(mntmStartExternalPlugin); - mnNewMenu_1.add(new JSeparator()); - mnNewMenu_1.add(mnRecentPlugins); - mnNewMenu_1.add(new JSeparator()); - mntmCodeSequenceDiagram.addActionListener(arg0 -> { + + codeSequenceDiagram.addActionListener(arg0 -> { if (BytecodeViewer.getLoadedClasses().isEmpty()) { BytecodeViewer.showMessage("First open a class, jar, zip, apk or dex file."); return; } PluginManager.runPlugin(new CodeSequenceDiagram()); }); - - mnNewMenu_1.add(mntmCodeSequenceDiagram); - mnNewMenu_1.add(mntmNewMenuItem_1); - mnNewMenu_1.add(mntmShowMainMethods); - mnNewMenu_1.add(mntmShowAllStrings); - mntmReplaceStrings.addActionListener(arg0 -> { + replaceStrings.addActionListener(arg0 -> { if (BytecodeViewer.getLoadedClasses().isEmpty()) { BytecodeViewer.showMessage("First open a class, jar, zip, apk or dex file."); return; } new ReplaceStringsOptions().setVisible(true); }); - - mnNewMenu_1.add(mntmReplaceStrings); - //allatori and ZKM are disabled since they are just placeholders - //mnNewMenu_1.add(mntmNewMenuItem_2); - //mnNewMenu_1.add(mntmStartZkmString); - - mntmZstringarrayDecrypter.addActionListener(arg0 -> PluginManager.runPlugin(new ZStringArrayDecrypter())); - mntmStackFramesRemover.addActionListener(e -> PluginManager.runPlugin(new StackFramesRemover())); - - mnNewMenu_1.add(mntmZstringarrayDecrypter); - mnNewMenu_1.add(mntmStackFramesRemover); + zStringArrayDecrypter.addActionListener(arg0 -> PluginManager.runPlugin(new ZStringArrayDecrypter())); + stackFramesRemover.addActionListener(e -> PluginManager.runPlugin(new StackFramesRemover())); waitIcons = new JMenuItem[10]; for (int i = 0; i < 10; i++) { @@ -739,7 +726,7 @@ public void windowClosing(WindowEvent e) { rootMenu.add(waitIcons[i]); } - mntmStartExternalPlugin.addActionListener(arg0 -> { + openExternalPlugin.addActionListener(arg0 -> { JFileChooser fc = new JFileChooser(); fc.setFileFilter(PluginManager.fileFilter()); fc.setFileHidingEnabled(false); @@ -756,11 +743,11 @@ public void windowClosing(WindowEvent e) { } }); - mntmStartZkmString.addActionListener(e -> PluginManager.runPlugin(new ZKMStringDecrypter())); - mntmNewMenuItem_2.addActionListener(e -> PluginManager.runPlugin(new AllatoriStringDecrypter())); - mntmNewMenuItem_1.addActionListener(e -> MaliciousCodeScannerOptions.showOptionPanel()); - mntmShowAllStrings.addActionListener(e -> PluginManager.runPlugin(new ShowAllStrings())); - mntmShowMainMethods.addActionListener(e -> PluginManager.runPlugin(new ShowMainMethods())); + ZKMStringDecrypter.addActionListener(e -> PluginManager.runPlugin(new ZKMStringDecrypter())); + allatoriStringDecrypter.addActionListener(e -> PluginManager.runPlugin(new AllatoriStringDecrypter())); + maliciousCodeScanner.addActionListener(e -> MaliciousCodeScannerOptions.showOptionPanel()); + showAllStrings.addActionListener(e -> PluginManager.runPlugin(new ShowAllStrings())); + showMainMethods.addActionListener(e -> PluginManager.runPlugin(new ShowMainMethods())); setSize(new Dimension(800, 400)); if (PREVIEW_COPY) @@ -878,6 +865,25 @@ public void buildViewMenuBar() viewMainMenu.add(viewPane2.menu); viewMainMenu.add(viewPane3.menu); } + + public void buildPluginMenuBar() + { + rootMenu.add(pluginsMainMenu); + pluginsMainMenu.add(openExternalPlugin); + pluginsMainMenu.add(new JSeparator()); + pluginsMainMenu.add(recentPluginsSecondaryMenu); + pluginsMainMenu.add(new JSeparator()); + pluginsMainMenu.add(codeSequenceDiagram); + pluginsMainMenu.add(maliciousCodeScanner); + pluginsMainMenu.add(showMainMethods); + pluginsMainMenu.add(showAllStrings); + pluginsMainMenu.add(replaceStrings); + pluginsMainMenu.add(stackFramesRemover); + //allatori and ZKM are disabled since they are just placeholders + //mnNewMenu_1.add(mntmNewMenuItem_2); + //mnNewMenu_1.add(mntmStartZkmString); + pluginsMainMenu.add(zStringArrayDecrypter); + } @Override public void openClassFile(final FileContainer container, final String name, final ClassNode cn) {