66import java .awt .Frame ;
77import java .awt .KeyEventDispatcher ;
88import java .awt .KeyboardFocusManager ;
9- import java .awt .event .ActionListener ;
109import java .awt .event .KeyEvent ;
1110import java .awt .event .WindowAdapter ;
1211import java .awt .event .WindowEvent ;
@@ -85,7 +84,7 @@ public class MainViewerGUI extends JFrame implements FileChangeNotifier {
8584 //all of the files main menu components
8685 public final JMenu fileMainMenu = new JMenu ("File" );
8786 public final JMenuItem newWorkSpace = new JMenuItem ("New Workspace" );
88- public final JMenuItem addResource = new JMenuItem ("Add.." );
87+ public final JMenuItem addResource = new JMenuItem ("Add... " );
8988 public final JMenuItem reloadResources = new JMenuItem ("Reload Resources" );
9089 public final JMenuItem runButton = new JMenuItem ("Run" );
9190 public final JMenuItem compileButton = new JMenuItem ("Compile" );
@@ -105,6 +104,22 @@ public class MainViewerGUI extends JFrame implements FileChangeNotifier {
105104 public final ViewPane viewPane2 = new ViewPane (2 );
106105 public final ViewPane viewPane3 = new ViewPane (3 );
107106
107+ //TODO settings main menu components
108+
109+ //all of the plugins main menu components
110+ public final JMenu pluginsMainMenu = new JMenu ("Plugins" );
111+ public final JMenuItem openExternalPlugin = new JMenuItem ("Open Plugin..." );
112+ public final JMenu recentPluginsSecondaryMenu = new JMenu ("Recent Plugins" );
113+ public final JMenuItem ZKMStringDecrypter = new JMenuItem ("ZKM String Decrypter" );
114+ public final JMenuItem allatoriStringDecrypter = new JMenuItem ("Allatori String Decrypter" );
115+ public final JMenuItem codeSequenceDiagram = new JMenuItem ("Code Sequence Diagram" );
116+ public final JMenuItem maliciousCodeScanner = new JMenuItem ("Malicious Code Scanner" );
117+ public final JMenuItem showAllStrings = new JMenuItem ("Show All Strings" );
118+ public final JMenuItem showMainMethods = new JMenuItem ("Show Main Methods" );
119+ public final JMenuItem replaceStrings = new JMenuItem ("Replace Strings" );
120+ public final JMenuItem stackFramesRemover = new JMenuItem ("StackFrames Remover" );
121+ public final JMenuItem zStringArrayDecrypter = new JMenuItem ("ZStringArray Decrypter" );
122+
108123 public JCheckBoxMenuItem debugHelpers = new JCheckBoxMenuItem ("Debug Helpers" );
109124 public JSplitPane sp1 ;
110125 public JSplitPane sp2 ;
@@ -127,16 +142,7 @@ public class MainViewerGUI extends JFrame implements FileChangeNotifier {
127142 public JCheckBoxMenuItem fdi = new JCheckBoxMenuItem ("Deinline finally structures" );
128143 public JCheckBoxMenuItem asc = new JCheckBoxMenuItem ("Allow only ASCII characters in strings" );
129144 public JCheckBoxMenuItem ren = new JCheckBoxMenuItem ("Rename ambiguous classes and class elements" );
130- public final JMenu mnNewMenu_1 = new JMenu ("Plugins" );
131- public final JMenuItem mntmStartExternalPlugin = new JMenuItem ("Open Plugin.." );
132- public JMenu mnRecentPlugins = new JMenu ("Recent Plugins" );
133- public final JMenuItem mntmStartZkmString = new JMenuItem ("ZKM String Decrypter" );
134- public final JMenuItem mntmNewMenuItem_1 = new JMenuItem ("Malicious Code Scanner" );
135- public final JMenuItem mntmNewMenuItem_2 = new JMenuItem ("Allatori String Decrypter" );
136- public final JMenuItem mntmShowAllStrings = new JMenuItem ("Show All Strings" );
137- public final JMenuItem mntmShowMainMethods = new JMenuItem ("Show Main Methods" );
138- public final JMenuItem mntmReplaceStrings = new JMenuItem ("Replace Strings" );
139- public final JMenuItem mntmStackFramesRemover = new JMenuItem ("StackFrames Remover" );
145+
140146 public final JMenuItem [] waitIcons ;
141147 public final JMenu mnNewMenu_3 = new JMenu ("CFR" );
142148 public final JMenu mnNewMenu_4 = new JMenu ("Procyon" );
@@ -213,14 +219,12 @@ public class MainViewerGUI extends JFrame implements FileChangeNotifier {
213219 public final JMenu mnSettings = new JMenu ("Settings" );
214220 public AboutWindow aboutWindow = new AboutWindow ();
215221
216- public final JMenuItem mntmCodeSequenceDiagram = new JMenuItem ("Code Sequence Diagram" );
217222 public final JCheckBoxMenuItem compileOnSave = new JCheckBoxMenuItem ("Compile On Save" );
218223 public final JCheckBoxMenuItem showFileInTabTitle = new JCheckBoxMenuItem ("Show File In Tab Title" );
219224 public final JCheckBoxMenuItem forcePureAsciiAsText = new JCheckBoxMenuItem ("Force Pure Ascii As Text" );
220225 public final JCheckBoxMenuItem autoCompileOnRefresh = new JCheckBoxMenuItem ("Compile On Refresh" );
221226 public final JMenuItem mntmSetPythonDirectory = new JMenuItem ("Set Python 2.7 Executable" );
222227 public final JMenuItem mntmSetJreRt = new JMenuItem ("Set JRE RT Library" );
223- public final JMenuItem mntmZstringarrayDecrypter = new JMenuItem ("ZStringArray Decrypter" );
224228 public final JCheckBoxMenuItem decodeAPKResources = new JCheckBoxMenuItem ("Decode APK Resources" );
225229 public final JCheckBoxMenuItem synchronizedViewing = new JCheckBoxMenuItem ("Synchronized Viewing" );
226230 public final JCheckBoxMenuItem showClassMethods = new JCheckBoxMenuItem ("Show Class Methods" );
@@ -356,6 +360,7 @@ public void windowClosing(WindowEvent e) {
356360 buildMenuBar ();
357361 buildFileMenuBar ();
358362 buildViewMenuBar ();
363+ buildPluginMenuBar ();
359364
360365 compileOnSave .setSelected (false );
361366
@@ -694,42 +699,24 @@ public void windowClosing(WindowEvent e) {
694699 mntmNewMenuItem_10 .setEnabled (false );
695700 mnNewMenu_5 .add (mntmNewMenuItem_10 );
696701
697- rootMenu .add (mnNewMenu_1 );
698- mnNewMenu_1 .add (mntmStartExternalPlugin );
699- mnNewMenu_1 .add (new JSeparator ());
700- mnNewMenu_1 .add (mnRecentPlugins );
701- mnNewMenu_1 .add (new JSeparator ());
702- mntmCodeSequenceDiagram .addActionListener (arg0 -> {
702+
703+ codeSequenceDiagram .addActionListener (arg0 -> {
703704 if (BytecodeViewer .getLoadedClasses ().isEmpty ()) {
704705 BytecodeViewer .showMessage ("First open a class, jar, zip, apk or dex file." );
705706 return ;
706707 }
707708 PluginManager .runPlugin (new CodeSequenceDiagram ());
708709 });
709-
710- mnNewMenu_1 .add (mntmCodeSequenceDiagram );
711- mnNewMenu_1 .add (mntmNewMenuItem_1 );
712- mnNewMenu_1 .add (mntmShowMainMethods );
713- mnNewMenu_1 .add (mntmShowAllStrings );
714- mntmReplaceStrings .addActionListener (arg0 -> {
710+ replaceStrings .addActionListener (arg0 -> {
715711 if (BytecodeViewer .getLoadedClasses ().isEmpty ()) {
716712 BytecodeViewer .showMessage ("First open a class, jar, zip, apk or dex file." );
717713 return ;
718714 }
719715 new ReplaceStringsOptions ().setVisible (true );
720716 });
721-
722- mnNewMenu_1 .add (mntmReplaceStrings );
723717
724- //allatori and ZKM are disabled since they are just placeholders
725- //mnNewMenu_1.add(mntmNewMenuItem_2);
726- //mnNewMenu_1.add(mntmStartZkmString);
727-
728- mntmZstringarrayDecrypter .addActionListener (arg0 -> PluginManager .runPlugin (new ZStringArrayDecrypter ()));
729- mntmStackFramesRemover .addActionListener (e -> PluginManager .runPlugin (new StackFramesRemover ()));
730-
731- mnNewMenu_1 .add (mntmZstringarrayDecrypter );
732- mnNewMenu_1 .add (mntmStackFramesRemover );
718+ zStringArrayDecrypter .addActionListener (arg0 -> PluginManager .runPlugin (new ZStringArrayDecrypter ()));
719+ stackFramesRemover .addActionListener (e -> PluginManager .runPlugin (new StackFramesRemover ()));
733720
734721 waitIcons = new JMenuItem [10 ];
735722 for (int i = 0 ; i < 10 ; i ++) {
@@ -739,7 +726,7 @@ public void windowClosing(WindowEvent e) {
739726 rootMenu .add (waitIcons [i ]);
740727 }
741728
742- mntmStartExternalPlugin .addActionListener (arg0 -> {
729+ openExternalPlugin .addActionListener (arg0 -> {
743730 JFileChooser fc = new JFileChooser ();
744731 fc .setFileFilter (PluginManager .fileFilter ());
745732 fc .setFileHidingEnabled (false );
@@ -756,11 +743,11 @@ public void windowClosing(WindowEvent e) {
756743 }
757744 });
758745
759- mntmStartZkmString .addActionListener (e -> PluginManager .runPlugin (new ZKMStringDecrypter ()));
760- mntmNewMenuItem_2 .addActionListener (e -> PluginManager .runPlugin (new AllatoriStringDecrypter ()));
761- mntmNewMenuItem_1 .addActionListener (e -> MaliciousCodeScannerOptions .showOptionPanel ());
762- mntmShowAllStrings .addActionListener (e -> PluginManager .runPlugin (new ShowAllStrings ()));
763- mntmShowMainMethods .addActionListener (e -> PluginManager .runPlugin (new ShowMainMethods ()));
746+ ZKMStringDecrypter .addActionListener (e -> PluginManager .runPlugin (new ZKMStringDecrypter ()));
747+ allatoriStringDecrypter .addActionListener (e -> PluginManager .runPlugin (new AllatoriStringDecrypter ()));
748+ maliciousCodeScanner .addActionListener (e -> MaliciousCodeScannerOptions .showOptionPanel ());
749+ showAllStrings .addActionListener (e -> PluginManager .runPlugin (new ShowAllStrings ()));
750+ showMainMethods .addActionListener (e -> PluginManager .runPlugin (new ShowMainMethods ()));
764751
765752 setSize (new Dimension (800 , 400 ));
766753 if (PREVIEW_COPY )
@@ -878,6 +865,25 @@ public void buildViewMenuBar()
878865 viewMainMenu .add (viewPane2 .menu );
879866 viewMainMenu .add (viewPane3 .menu );
880867 }
868+
869+ public void buildPluginMenuBar ()
870+ {
871+ rootMenu .add (pluginsMainMenu );
872+ pluginsMainMenu .add (openExternalPlugin );
873+ pluginsMainMenu .add (new JSeparator ());
874+ pluginsMainMenu .add (recentPluginsSecondaryMenu );
875+ pluginsMainMenu .add (new JSeparator ());
876+ pluginsMainMenu .add (codeSequenceDiagram );
877+ pluginsMainMenu .add (maliciousCodeScanner );
878+ pluginsMainMenu .add (showMainMethods );
879+ pluginsMainMenu .add (showAllStrings );
880+ pluginsMainMenu .add (replaceStrings );
881+ pluginsMainMenu .add (stackFramesRemover );
882+ //allatori and ZKM are disabled since they are just placeholders
883+ //mnNewMenu_1.add(mntmNewMenuItem_2);
884+ //mnNewMenu_1.add(mntmStartZkmString);
885+ pluginsMainMenu .add (zStringArrayDecrypter );
886+ }
881887
882888 @ Override
883889 public void openClassFile (final FileContainer container , final String name , final ClassNode cn ) {
0 commit comments