Merge branch 'master' of https://github.com/Konloch/bytecode-viewer.git
Conflicts: src/the/bytecode/club/bytecodeviewer/gui/MainViewerGUI.java src/the/bytecode/club/bytecodeviewer/plugins/CodeSequenceDiagram.java
This commit is contained in:
commit
5b87048682
9 changed files with 323 additions and 38 deletions
|
@ -88,9 +88,15 @@ import the.bytecode.club.bytecodeviewer.plugin.PluginManager;
|
||||||
* add stackmapframes to bytecode decompiler
|
* add stackmapframes to bytecode decompiler
|
||||||
* add stackmapframes remover?
|
* add stackmapframes remover?
|
||||||
* In BCV if you open a class and the name is so big, you cannot close because the [X] does not appear."
|
* In BCV if you open a class and the name is so big, you cannot close because the [X] does not appear."
|
||||||
|
* refresh appears under panes that are non refreshable
|
||||||
|
* make ez-injection plugin console show all sys.out calls
|
||||||
|
* edit then save issues?
|
||||||
*
|
*
|
||||||
* -----2.9.5-----:
|
* -----2.9.6-----:
|
||||||
* 05/01/2015 - Added 'pingback' for statistics (to track how many people globally use BCV)
|
* 05/05/2015 - Fixed a typo in the about window
|
||||||
|
* 05/28/2015 - Started importing JD-GUI Decompiler.
|
||||||
|
* 05/28/2015 - Compile on refresh and compile on save are now enabled by default.
|
||||||
|
* 05/28/2015 - Renamed the File>Save As options to be much more informative.
|
||||||
*
|
*
|
||||||
* @author Konloch
|
* @author Konloch
|
||||||
*
|
*
|
||||||
|
@ -99,7 +105,7 @@ import the.bytecode.club.bytecodeviewer.plugin.PluginManager;
|
||||||
public class BytecodeViewer {
|
public class BytecodeViewer {
|
||||||
|
|
||||||
/*per version*/
|
/*per version*/
|
||||||
public static String version = "2.9.5";
|
public static String version = "2.9.6";
|
||||||
public static String krakatauVersion = "2";
|
public static String krakatauVersion = "2";
|
||||||
/*the rest*/
|
/*the rest*/
|
||||||
public static MainViewerGUI viewer = null;
|
public static MainViewerGUI viewer = null;
|
||||||
|
|
|
@ -115,6 +115,8 @@ public class Settings {
|
||||||
DiskWriter.writeNewLine(BytecodeViewer.settingsName, "7", false);
|
DiskWriter.writeNewLine(BytecodeViewer.settingsName, "7", false);
|
||||||
else if(BytecodeViewer.viewer.panelGroup1.isSelected(BytecodeViewer.viewer.panel1KrakatauBytecode.getModel()))
|
else if(BytecodeViewer.viewer.panelGroup1.isSelected(BytecodeViewer.viewer.panel1KrakatauBytecode.getModel()))
|
||||||
DiskWriter.writeNewLine(BytecodeViewer.settingsName, "8", false);
|
DiskWriter.writeNewLine(BytecodeViewer.settingsName, "8", false);
|
||||||
|
else if(BytecodeViewer.viewer.panelGroup1.isSelected(BytecodeViewer.viewer.panel1JDGUI.getModel()))
|
||||||
|
DiskWriter.writeNewLine(BytecodeViewer.settingsName, "9", false);
|
||||||
|
|
||||||
if(BytecodeViewer.viewer.panelGroup2.isSelected(BytecodeViewer.viewer.panel2None.getModel()))
|
if(BytecodeViewer.viewer.panelGroup2.isSelected(BytecodeViewer.viewer.panel2None.getModel()))
|
||||||
DiskWriter.writeNewLine(BytecodeViewer.settingsName, "0", false);
|
DiskWriter.writeNewLine(BytecodeViewer.settingsName, "0", false);
|
||||||
|
@ -134,6 +136,8 @@ public class Settings {
|
||||||
DiskWriter.writeNewLine(BytecodeViewer.settingsName, "7", false);
|
DiskWriter.writeNewLine(BytecodeViewer.settingsName, "7", false);
|
||||||
else if(BytecodeViewer.viewer.panelGroup2.isSelected(BytecodeViewer.viewer.panel2KrakatauBytecode.getModel()))
|
else if(BytecodeViewer.viewer.panelGroup2.isSelected(BytecodeViewer.viewer.panel2KrakatauBytecode.getModel()))
|
||||||
DiskWriter.writeNewLine(BytecodeViewer.settingsName, "8", false);
|
DiskWriter.writeNewLine(BytecodeViewer.settingsName, "8", false);
|
||||||
|
else if(BytecodeViewer.viewer.panelGroup2.isSelected(BytecodeViewer.viewer.panel2JDGUI.getModel()))
|
||||||
|
DiskWriter.writeNewLine(BytecodeViewer.settingsName, "9", false);
|
||||||
|
|
||||||
if(BytecodeViewer.viewer.panelGroup3.isSelected(BytecodeViewer.viewer.panel3None.getModel()))
|
if(BytecodeViewer.viewer.panelGroup3.isSelected(BytecodeViewer.viewer.panel3None.getModel()))
|
||||||
DiskWriter.writeNewLine(BytecodeViewer.settingsName, "0", false);
|
DiskWriter.writeNewLine(BytecodeViewer.settingsName, "0", false);
|
||||||
|
@ -153,6 +157,8 @@ public class Settings {
|
||||||
DiskWriter.writeNewLine(BytecodeViewer.settingsName, "7", false);
|
DiskWriter.writeNewLine(BytecodeViewer.settingsName, "7", false);
|
||||||
else if(BytecodeViewer.viewer.panelGroup3.isSelected(BytecodeViewer.viewer.panel3KrakatauBytecode.getModel()))
|
else if(BytecodeViewer.viewer.panelGroup3.isSelected(BytecodeViewer.viewer.panel3KrakatauBytecode.getModel()))
|
||||||
DiskWriter.writeNewLine(BytecodeViewer.settingsName, "8", false);
|
DiskWriter.writeNewLine(BytecodeViewer.settingsName, "8", false);
|
||||||
|
else if(BytecodeViewer.viewer.panelGroup3.isSelected(BytecodeViewer.viewer.panel3JDGUI.getModel()))
|
||||||
|
DiskWriter.writeNewLine(BytecodeViewer.settingsName, "9", false);
|
||||||
|
|
||||||
DiskWriter.writeNewLine(BytecodeViewer.settingsName, String.valueOf(BytecodeViewer.viewer.refreshOnChange.isSelected()), false);
|
DiskWriter.writeNewLine(BytecodeViewer.settingsName, String.valueOf(BytecodeViewer.viewer.refreshOnChange.isSelected()), false);
|
||||||
DiskWriter.writeNewLine(BytecodeViewer.settingsName, String.valueOf(BytecodeViewer.viewer.isMaximized), false);
|
DiskWriter.writeNewLine(BytecodeViewer.settingsName, String.valueOf(BytecodeViewer.viewer.isMaximized), false);
|
||||||
|
@ -179,6 +185,9 @@ public class Settings {
|
||||||
DiskWriter.writeNewLine(BytecodeViewer.settingsName, String.valueOf(BytecodeViewer.viewer.decodeAPKResources.isSelected()), false);
|
DiskWriter.writeNewLine(BytecodeViewer.settingsName, String.valueOf(BytecodeViewer.viewer.decodeAPKResources.isSelected()), false);
|
||||||
DiskWriter.writeNewLine(BytecodeViewer.settingsName, BytecodeViewer.library, false);
|
DiskWriter.writeNewLine(BytecodeViewer.settingsName, BytecodeViewer.library, false);
|
||||||
DiskWriter.writeNewLine(BytecodeViewer.settingsName, String.valueOf(BytecodeViewer.pingback), false);
|
DiskWriter.writeNewLine(BytecodeViewer.settingsName, String.valueOf(BytecodeViewer.pingback), false);
|
||||||
|
DiskWriter.writeNewLine(BytecodeViewer.settingsName, String.valueOf(BytecodeViewer.viewer.panel1JDGUI_E.isSelected()), false);
|
||||||
|
DiskWriter.writeNewLine(BytecodeViewer.settingsName, String.valueOf(BytecodeViewer.viewer.panel2JDGUI_E.isSelected()), false);
|
||||||
|
DiskWriter.writeNewLine(BytecodeViewer.settingsName, String.valueOf(BytecodeViewer.viewer.panel3JDGUI_E.isSelected()), false);
|
||||||
} catch(Exception e) {
|
} catch(Exception e) {
|
||||||
new the.bytecode.club.bytecodeviewer.api.ExceptionUI(e);
|
new the.bytecode.club.bytecodeviewer.api.ExceptionUI(e);
|
||||||
}
|
}
|
||||||
|
@ -285,6 +294,8 @@ public class Settings {
|
||||||
BytecodeViewer.viewer.panelGroup1.setSelected(BytecodeViewer.viewer.panel1Krakatau.getModel(), true);
|
BytecodeViewer.viewer.panelGroup1.setSelected(BytecodeViewer.viewer.panel1Krakatau.getModel(), true);
|
||||||
else if(decompiler == 8)
|
else if(decompiler == 8)
|
||||||
BytecodeViewer.viewer.panelGroup1.setSelected(BytecodeViewer.viewer.panel1KrakatauBytecode.getModel(), true);
|
BytecodeViewer.viewer.panelGroup1.setSelected(BytecodeViewer.viewer.panel1KrakatauBytecode.getModel(), true);
|
||||||
|
else if(decompiler == 9)
|
||||||
|
BytecodeViewer.viewer.panelGroup1.setSelected(BytecodeViewer.viewer.panel1JDGUI.getModel(), true);
|
||||||
|
|
||||||
decompiler = Integer.parseInt(DiskReader.loadString(BytecodeViewer.settingsName, 82, false));
|
decompiler = Integer.parseInt(DiskReader.loadString(BytecodeViewer.settingsName, 82, false));
|
||||||
if(decompiler == 0)
|
if(decompiler == 0)
|
||||||
|
@ -305,6 +316,8 @@ public class Settings {
|
||||||
BytecodeViewer.viewer.panelGroup2.setSelected(BytecodeViewer.viewer.panel2Krakatau.getModel(), true);
|
BytecodeViewer.viewer.panelGroup2.setSelected(BytecodeViewer.viewer.panel2Krakatau.getModel(), true);
|
||||||
else if(decompiler == 8)
|
else if(decompiler == 8)
|
||||||
BytecodeViewer.viewer.panelGroup2.setSelected(BytecodeViewer.viewer.panel2KrakatauBytecode.getModel(), true);
|
BytecodeViewer.viewer.panelGroup2.setSelected(BytecodeViewer.viewer.panel2KrakatauBytecode.getModel(), true);
|
||||||
|
else if(decompiler == 9)
|
||||||
|
BytecodeViewer.viewer.panelGroup2.setSelected(BytecodeViewer.viewer.panel2JDGUI.getModel(), true);
|
||||||
|
|
||||||
decompiler = Integer.parseInt(DiskReader.loadString(BytecodeViewer.settingsName, 83, false));
|
decompiler = Integer.parseInt(DiskReader.loadString(BytecodeViewer.settingsName, 83, false));
|
||||||
if(decompiler == 0)
|
if(decompiler == 0)
|
||||||
|
@ -325,6 +338,8 @@ public class Settings {
|
||||||
BytecodeViewer.viewer.panelGroup3.setSelected(BytecodeViewer.viewer.panel3Krakatau.getModel(), true);
|
BytecodeViewer.viewer.panelGroup3.setSelected(BytecodeViewer.viewer.panel3Krakatau.getModel(), true);
|
||||||
else if(decompiler == 8)
|
else if(decompiler == 8)
|
||||||
BytecodeViewer.viewer.panelGroup3.setSelected(BytecodeViewer.viewer.panel3KrakatauBytecode.getModel(), true);
|
BytecodeViewer.viewer.panelGroup3.setSelected(BytecodeViewer.viewer.panel3KrakatauBytecode.getModel(), true);
|
||||||
|
else if(decompiler == 9)
|
||||||
|
BytecodeViewer.viewer.panelGroup3.setSelected(BytecodeViewer.viewer.panel3JDGUI.getModel(), true);
|
||||||
|
|
||||||
BytecodeViewer.viewer.refreshOnChange.setSelected(Boolean.parseBoolean(DiskReader.loadString(BytecodeViewer.settingsName, 84, false)));
|
BytecodeViewer.viewer.refreshOnChange.setSelected(Boolean.parseBoolean(DiskReader.loadString(BytecodeViewer.settingsName, 84, false)));
|
||||||
|
|
||||||
|
@ -356,6 +371,9 @@ public class Settings {
|
||||||
BytecodeViewer.viewer.decodeAPKResources.setSelected(Boolean.parseBoolean(DiskReader.loadString(BytecodeViewer.settingsName, 106, false)));
|
BytecodeViewer.viewer.decodeAPKResources.setSelected(Boolean.parseBoolean(DiskReader.loadString(BytecodeViewer.settingsName, 106, false)));
|
||||||
BytecodeViewer.library = DiskReader.loadString(BytecodeViewer.settingsName, 107, false);
|
BytecodeViewer.library = DiskReader.loadString(BytecodeViewer.settingsName, 107, false);
|
||||||
BytecodeViewer.pingback = Boolean.parseBoolean(DiskReader.loadString(BytecodeViewer.settingsName, 108, false));
|
BytecodeViewer.pingback = Boolean.parseBoolean(DiskReader.loadString(BytecodeViewer.settingsName, 108, false));
|
||||||
|
BytecodeViewer.viewer.panel1JDGUI_E.setSelected(Boolean.parseBoolean(DiskReader.loadString(BytecodeViewer.settingsName, 109, false)));
|
||||||
|
BytecodeViewer.viewer.panel2JDGUI_E.setSelected(Boolean.parseBoolean(DiskReader.loadString(BytecodeViewer.settingsName, 110, false)));
|
||||||
|
BytecodeViewer.viewer.panel3JDGUI_E.setSelected(Boolean.parseBoolean(DiskReader.loadString(BytecodeViewer.settingsName, 111, false)));
|
||||||
} catch(Exception e) {
|
} catch(Exception e) {
|
||||||
//ignore because errors are expected, first start up and outdated settings.
|
//ignore because errors are expected, first start up and outdated settings.
|
||||||
//e.printStackTrace();
|
//e.printStackTrace();
|
||||||
|
|
|
@ -245,4 +245,12 @@ public class BytecodeViewer {
|
||||||
public static the.bytecode.club.bytecodeviewer.compilers.Compiler getSmaliCompiler() {
|
public static the.bytecode.club.bytecodeviewer.compilers.Compiler getSmaliCompiler() {
|
||||||
return the.bytecode.club.bytecodeviewer.compilers.Compiler.smali;
|
return the.bytecode.club.bytecodeviewer.compilers.Compiler.smali;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the wrapped JD-GUI Decompiler instance.
|
||||||
|
* @return The wrapped JD-GUI Decompiler instance
|
||||||
|
*/
|
||||||
|
public static the.bytecode.club.bytecodeviewer.decompilers.Decompiler getDJGUIDecompiler() {
|
||||||
|
return the.bytecode.club.bytecodeviewer.decompilers.Decompiler.jdgui;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -26,4 +26,5 @@ public abstract class Decompiler {
|
||||||
public static Decompiler krakatau = new KrakatauDecompiler();
|
public static Decompiler krakatau = new KrakatauDecompiler();
|
||||||
public static Decompiler krakatauDA = new KrakatauDisassembler();
|
public static Decompiler krakatauDA = new KrakatauDisassembler();
|
||||||
public static Decompiler smali = new SmaliDisassembler();
|
public static Decompiler smali = new SmaliDisassembler();
|
||||||
|
public static Decompiler jdgui = new JDGUIDecompiler();
|
||||||
}
|
}
|
||||||
|
|
|
@ -48,7 +48,7 @@ import the.bytecode.club.bytecodeviewer.MiscUtils;
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
public class JDCoreDecompiler extends Decompiler {
|
public class JDGUIDecompiler extends Decompiler {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void decompileToClass(String className, String classNameSaved) {
|
public void decompileToClass(String className, String classNameSaved) {
|
||||||
|
@ -81,11 +81,11 @@ public class JDCoreDecompiler extends Decompiler {
|
||||||
|
|
||||||
exception = "Bytecode Viewer Version: " + BytecodeViewer.version + BytecodeViewer.nl + BytecodeViewer.nl + sw.toString();
|
exception = "Bytecode Viewer Version: " + BytecodeViewer.version + BytecodeViewer.nl + BytecodeViewer.nl + sw.toString();
|
||||||
}
|
}
|
||||||
return "Procyon error! Send the stacktrace to Konloch at http://the.bytecode.club or konloch@gmail.com"+BytecodeViewer.nl+BytecodeViewer.nl+"Suggested Fix: Click refresh class, if it fails again try another decompiler."+BytecodeViewer.nl+BytecodeViewer.nl+exception;
|
return "JD-GUI error! Send the stacktrace to Konloch at http://the.bytecode.club or konloch@gmail.com"+BytecodeViewer.nl+BytecodeViewer.nl+"Suggested Fix: Click refresh class, if it fails again try another decompiler."+BytecodeViewer.nl+BytecodeViewer.nl+exception;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void decompileToZip(String zipName) {
|
public void decompileToZip(String zipName) {
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
}
|
|
@ -40,7 +40,7 @@ public class AboutWindow extends JFrame {
|
||||||
super.setVisible(b);
|
super.setVisible(b);
|
||||||
txtrBytecodeViewerIs
|
txtrBytecodeViewerIs
|
||||||
.setText("Bytecode Viewer "+BytecodeViewer.version+" is an open source program developed and maintained by Konloch (konloch@gmail.com)\r\n"+
|
.setText("Bytecode Viewer "+BytecodeViewer.version+" is an open source program developed and maintained by Konloch (konloch@gmail.com)\r\n"+
|
||||||
"100% free and open sourced licensed under GPL v3 CopyLef\r\n\r\n"+
|
"100% free and open sourced licensed under GPL v3 CopyLeft\r\n\r\n"+
|
||||||
"Settings:"+BytecodeViewer.nl+
|
"Settings:"+BytecodeViewer.nl+
|
||||||
"BCV Dir: " + BytecodeViewer.getBCVDirectory()+BytecodeViewer.nl+
|
"BCV Dir: " + BytecodeViewer.getBCVDirectory()+BytecodeViewer.nl+
|
||||||
"Python: " + BytecodeViewer.python+BytecodeViewer.nl+
|
"Python: " + BytecodeViewer.python+BytecodeViewer.nl+
|
||||||
|
@ -51,6 +51,7 @@ public class AboutWindow extends JFrame {
|
||||||
"Keybinds:"+BytecodeViewer.nl+
|
"Keybinds:"+BytecodeViewer.nl+
|
||||||
"CTRL + O: Open/add new jar/class/apk"+BytecodeViewer.nl+
|
"CTRL + O: Open/add new jar/class/apk"+BytecodeViewer.nl+
|
||||||
"CTLR + N: Reset the workspace"+BytecodeViewer.nl+
|
"CTLR + N: Reset the workspace"+BytecodeViewer.nl+
|
||||||
|
"CTRL + W: Closes the currently opened tab"+BytecodeViewer.nl+
|
||||||
"CTRL + T: Compile"+BytecodeViewer.nl+
|
"CTRL + T: Compile"+BytecodeViewer.nl+
|
||||||
"CTRL + S: Save classes as zip"+BytecodeViewer.nl+
|
"CTRL + S: Save classes as zip"+BytecodeViewer.nl+
|
||||||
"CTRL + R: Run (EZ-Inject) - dynamically load the classes and invoke a main class"+
|
"CTRL + R: Run (EZ-Inject) - dynamically load the classes and invoke a main class"+
|
||||||
|
|
|
@ -76,6 +76,8 @@ public class ClassViewer extends Viewer {
|
||||||
pane1 = 7;
|
pane1 = 7;
|
||||||
else if (BytecodeViewer.viewer.panelGroup1.isSelected(BytecodeViewer.viewer.panel1KrakatauBytecode.getModel()))
|
else if (BytecodeViewer.viewer.panelGroup1.isSelected(BytecodeViewer.viewer.panel1KrakatauBytecode.getModel()))
|
||||||
pane1 = 8;
|
pane1 = 8;
|
||||||
|
else if (BytecodeViewer.viewer.panelGroup1.isSelected(BytecodeViewer.viewer.panel1JDGUI.getModel()))
|
||||||
|
pane1 = 9;
|
||||||
|
|
||||||
if (BytecodeViewer.viewer.panelGroup2.isSelected(BytecodeViewer.viewer.panel2None.getModel()))
|
if (BytecodeViewer.viewer.panelGroup2.isSelected(BytecodeViewer.viewer.panel2None.getModel()))
|
||||||
pane2 = 0;
|
pane2 = 0;
|
||||||
|
@ -95,6 +97,8 @@ public class ClassViewer extends Viewer {
|
||||||
pane2 = 7;
|
pane2 = 7;
|
||||||
else if (BytecodeViewer.viewer.panelGroup2.isSelected(BytecodeViewer.viewer.panel2KrakatauBytecode.getModel()))
|
else if (BytecodeViewer.viewer.panelGroup2.isSelected(BytecodeViewer.viewer.panel2KrakatauBytecode.getModel()))
|
||||||
pane2 = 8;
|
pane2 = 8;
|
||||||
|
else if (BytecodeViewer.viewer.panelGroup2.isSelected(BytecodeViewer.viewer.panel2JDGUI.getModel()))
|
||||||
|
pane2 = 9;
|
||||||
|
|
||||||
if (BytecodeViewer.viewer.panelGroup3.isSelected(BytecodeViewer.viewer.panel3None.getModel()))
|
if (BytecodeViewer.viewer.panelGroup3.isSelected(BytecodeViewer.viewer.panel3None.getModel()))
|
||||||
pane3 = 0;
|
pane3 = 0;
|
||||||
|
@ -114,6 +118,8 @@ public class ClassViewer extends Viewer {
|
||||||
pane3 = 7;
|
pane3 = 7;
|
||||||
else if (BytecodeViewer.viewer.panelGroup3 .isSelected(BytecodeViewer.viewer.panel3KrakatauBytecode.getModel()))
|
else if (BytecodeViewer.viewer.panelGroup3 .isSelected(BytecodeViewer.viewer.panel3KrakatauBytecode.getModel()))
|
||||||
pane3 = 8;
|
pane3 = 8;
|
||||||
|
else if (BytecodeViewer.viewer.panelGroup3 .isSelected(BytecodeViewer.viewer.panel3JDGUI.getModel()))
|
||||||
|
pane3 = 9;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isPanel1Editable() {
|
public boolean isPanel1Editable() {
|
||||||
|
@ -127,6 +133,8 @@ public class ClassViewer extends Viewer {
|
||||||
return true;
|
return true;
|
||||||
if(pane1 == 6 && BytecodeViewer.viewer.panel1Smali_E.isSelected())
|
if(pane1 == 6 && BytecodeViewer.viewer.panel1Smali_E.isSelected())
|
||||||
return true;
|
return true;
|
||||||
|
if(pane1 == 9 && BytecodeViewer.viewer.panel1JDGUI_E.isSelected())
|
||||||
|
return true;
|
||||||
if((pane1 == 7 || pane1 == 8) && BytecodeViewer.viewer.panel1Krakatau_E.isSelected())
|
if((pane1 == 7 || pane1 == 8) && BytecodeViewer.viewer.panel1Krakatau_E.isSelected())
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
|
@ -145,6 +153,8 @@ public class ClassViewer extends Viewer {
|
||||||
return true;
|
return true;
|
||||||
if(pane2 == 6 && BytecodeViewer.viewer.panel2Smali_E.isSelected())
|
if(pane2 == 6 && BytecodeViewer.viewer.panel2Smali_E.isSelected())
|
||||||
return true;
|
return true;
|
||||||
|
if(pane2 == 9 && BytecodeViewer.viewer.panel2JDGUI_E.isSelected())
|
||||||
|
return true;
|
||||||
if((pane2 == 7 || pane2 == 8) && BytecodeViewer.viewer.panel2Krakatau_E.isSelected())
|
if((pane2 == 7 || pane2 == 8) && BytecodeViewer.viewer.panel2Krakatau_E.isSelected())
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
|
@ -163,6 +173,8 @@ public class ClassViewer extends Viewer {
|
||||||
return true;
|
return true;
|
||||||
if(pane3 == 6 && BytecodeViewer.viewer.panel3Smali_E.isSelected())
|
if(pane3 == 6 && BytecodeViewer.viewer.panel3Smali_E.isSelected())
|
||||||
return true;
|
return true;
|
||||||
|
if(pane3 == 9 && BytecodeViewer.viewer.panel3JDGUI_E.isSelected())
|
||||||
|
return true;
|
||||||
if((pane3 == 7 || pane3 == 8) && BytecodeViewer.viewer.panel3Krakatau_E.isSelected())
|
if((pane3 == 7 || pane3 == 8) && BytecodeViewer.viewer.panel3Krakatau_E.isSelected())
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
|
@ -776,6 +788,32 @@ public class ClassViewer extends Viewer {
|
||||||
});
|
});
|
||||||
panel1.add(scrollPane);
|
panel1.add(scrollPane);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (pane1 == 9) {// JD-GUI
|
||||||
|
RSyntaxTextArea panelArea = new RSyntaxTextArea();
|
||||||
|
panelArea
|
||||||
|
.setSyntaxEditingStyle(SyntaxConstants.SYNTAX_STYLE_JAVA);
|
||||||
|
panelArea.setCodeFoldingEnabled(true);
|
||||||
|
panelArea.setAntiAliasingEnabled(true);
|
||||||
|
RTextScrollPane scrollPane = new RTextScrollPane(
|
||||||
|
panelArea);
|
||||||
|
panelArea.setText(Decompiler.jdgui.decompileClassNode(cn,b));
|
||||||
|
panelArea.setCaretPosition(0);
|
||||||
|
panelArea.setEditable(isPanel1Editable());
|
||||||
|
panelArea.addKeyListener(new KeyListener() {
|
||||||
|
public void keyPressed(KeyEvent e) {
|
||||||
|
if ((e.getKeyCode() == KeyEvent.VK_F) && ((e.getModifiers() & KeyEvent.CTRL_MASK) != 0)) {
|
||||||
|
field1.requestFocus();
|
||||||
|
}
|
||||||
|
|
||||||
|
BytecodeViewer.checkHotKey(e);
|
||||||
|
}
|
||||||
|
@Override public void keyReleased(KeyEvent arg0) { }
|
||||||
|
@Override public void keyTyped(KeyEvent arg0) { }
|
||||||
|
});
|
||||||
|
panel1.add(scrollPane);
|
||||||
|
java1 = panelArea;
|
||||||
|
}
|
||||||
} catch(Exception e) {
|
} catch(Exception e) {
|
||||||
new the.bytecode.club.bytecodeviewer.api.ExceptionUI(e);
|
new the.bytecode.club.bytecodeviewer.api.ExceptionUI(e);
|
||||||
} finally {
|
} finally {
|
||||||
|
@ -972,6 +1010,32 @@ public class ClassViewer extends Viewer {
|
||||||
});
|
});
|
||||||
panel2.add(scrollPane);
|
panel2.add(scrollPane);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (pane2 == 9) {// JD-GUI
|
||||||
|
RSyntaxTextArea panelArea = new RSyntaxTextArea();
|
||||||
|
panelArea
|
||||||
|
.setSyntaxEditingStyle(SyntaxConstants.SYNTAX_STYLE_JAVA);
|
||||||
|
panelArea.setCodeFoldingEnabled(true);
|
||||||
|
panelArea.setAntiAliasingEnabled(true);
|
||||||
|
RTextScrollPane scrollPane = new RTextScrollPane(
|
||||||
|
panelArea);
|
||||||
|
panelArea.setText(Decompiler.jdgui.decompileClassNode(cn,b));
|
||||||
|
panelArea.setCaretPosition(0);
|
||||||
|
panelArea.setEditable(isPanel2Editable());
|
||||||
|
panelArea.addKeyListener(new KeyListener() {
|
||||||
|
public void keyPressed(KeyEvent e) {
|
||||||
|
if ((e.getKeyCode() == KeyEvent.VK_F) && ((e.getModifiers() & KeyEvent.CTRL_MASK) != 0)) {
|
||||||
|
field2.requestFocus();
|
||||||
|
}
|
||||||
|
|
||||||
|
BytecodeViewer.checkHotKey(e);
|
||||||
|
}
|
||||||
|
@Override public void keyReleased(KeyEvent arg0) { }
|
||||||
|
@Override public void keyTyped(KeyEvent arg0) { }
|
||||||
|
});
|
||||||
|
panel2.add(scrollPane);
|
||||||
|
java2 = panelArea;
|
||||||
|
}
|
||||||
} catch(Exception e) {
|
} catch(Exception e) {
|
||||||
new the.bytecode.club.bytecodeviewer.api.ExceptionUI(e);
|
new the.bytecode.club.bytecodeviewer.api.ExceptionUI(e);
|
||||||
} finally {
|
} finally {
|
||||||
|
@ -1144,8 +1208,6 @@ public class ClassViewer extends Viewer {
|
||||||
java3 = panelArea;
|
java3 = panelArea;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if (pane3 == 8) {// kraktau bytecode
|
if (pane3 == 8) {// kraktau bytecode
|
||||||
RSyntaxTextArea panelArea = new RSyntaxTextArea();
|
RSyntaxTextArea panelArea = new RSyntaxTextArea();
|
||||||
panelArea
|
panelArea
|
||||||
|
@ -1171,6 +1233,32 @@ public class ClassViewer extends Viewer {
|
||||||
});
|
});
|
||||||
panel3.add(scrollPane);
|
panel3.add(scrollPane);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (pane3 == 9) {// JD-GUI
|
||||||
|
RSyntaxTextArea panelArea = new RSyntaxTextArea();
|
||||||
|
panelArea
|
||||||
|
.setSyntaxEditingStyle(SyntaxConstants.SYNTAX_STYLE_JAVA);
|
||||||
|
panelArea.setCodeFoldingEnabled(true);
|
||||||
|
panelArea.setAntiAliasingEnabled(true);
|
||||||
|
RTextScrollPane scrollPane = new RTextScrollPane(
|
||||||
|
panelArea);
|
||||||
|
panelArea.setText(Decompiler.jdgui.decompileClassNode(cn,b));
|
||||||
|
panelArea.setCaretPosition(0);
|
||||||
|
panelArea.setEditable(isPanel3Editable());
|
||||||
|
panelArea.addKeyListener(new KeyListener() {
|
||||||
|
public void keyPressed(KeyEvent e) {
|
||||||
|
if ((e.getKeyCode() == KeyEvent.VK_F) && ((e.getModifiers() & KeyEvent.CTRL_MASK) != 0)) {
|
||||||
|
field3.requestFocus();
|
||||||
|
}
|
||||||
|
|
||||||
|
BytecodeViewer.checkHotKey(e);
|
||||||
|
}
|
||||||
|
@Override public void keyReleased(KeyEvent arg0) { }
|
||||||
|
@Override public void keyTyped(KeyEvent arg0) { }
|
||||||
|
});
|
||||||
|
panel3.add(scrollPane);
|
||||||
|
java3 = panelArea;
|
||||||
|
}
|
||||||
} catch(Exception e) {
|
} catch(Exception e) {
|
||||||
new the.bytecode.club.bytecodeviewer.api.ExceptionUI(e);
|
new the.bytecode.club.bytecodeviewer.api.ExceptionUI(e);
|
||||||
} finally {
|
} finally {
|
||||||
|
|
|
@ -38,11 +38,7 @@ import the.bytecode.club.bytecodeviewer.FileChangeNotifier;
|
||||||
import the.bytecode.club.bytecodeviewer.JarUtils;
|
import the.bytecode.club.bytecodeviewer.JarUtils;
|
||||||
import the.bytecode.club.bytecodeviewer.MiscUtils;
|
import the.bytecode.club.bytecodeviewer.MiscUtils;
|
||||||
import the.bytecode.club.bytecodeviewer.Resources;
|
import the.bytecode.club.bytecodeviewer.Resources;
|
||||||
import the.bytecode.club.bytecodeviewer.decompilers.CFRDecompiler;
|
|
||||||
import the.bytecode.club.bytecodeviewer.decompilers.Decompiler;
|
import the.bytecode.club.bytecodeviewer.decompilers.Decompiler;
|
||||||
import the.bytecode.club.bytecodeviewer.decompilers.FernFlowerDecompiler;
|
|
||||||
import the.bytecode.club.bytecodeviewer.decompilers.KrakatauDecompiler;
|
|
||||||
import the.bytecode.club.bytecodeviewer.decompilers.ProcyonDecompiler;
|
|
||||||
import the.bytecode.club.bytecodeviewer.obfuscators.rename.RenameClasses;
|
import the.bytecode.club.bytecodeviewer.obfuscators.rename.RenameClasses;
|
||||||
import the.bytecode.club.bytecodeviewer.obfuscators.rename.RenameFields;
|
import the.bytecode.club.bytecodeviewer.obfuscators.rename.RenameFields;
|
||||||
import the.bytecode.club.bytecodeviewer.obfuscators.rename.RenameMethods;
|
import the.bytecode.club.bytecodeviewer.obfuscators.rename.RenameMethods;
|
||||||
|
@ -109,11 +105,6 @@ public class MainViewerGUI extends JFrame implements FileChangeNotifier {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
final Decompiler ff_dc = new FernFlowerDecompiler();
|
|
||||||
final Decompiler proc_dc = new ProcyonDecompiler();
|
|
||||||
final Decompiler cfr_dc = new CFRDecompiler();
|
|
||||||
final Decompiler krak_dc = new KrakatauDecompiler();
|
|
||||||
|
|
||||||
public static final long serialVersionUID = 1851409230530948543L;
|
public static final long serialVersionUID = 1851409230530948543L;
|
||||||
public JCheckBoxMenuItem debugHelpers = new JCheckBoxMenuItem("Debug Helpers");
|
public JCheckBoxMenuItem debugHelpers = new JCheckBoxMenuItem("Debug Helpers");
|
||||||
public JSplitPane sp1;
|
public JSplitPane sp1;
|
||||||
|
@ -156,7 +147,7 @@ public class MainViewerGUI extends JFrame implements FileChangeNotifier {
|
||||||
public final JMenuItem mntmNewWorkspace = new JMenuItem("New Workspace");
|
public final JMenuItem mntmNewWorkspace = new JMenuItem("New Workspace");
|
||||||
public JMenu mnRecentFiles = new JMenu("Recent Files");
|
public JMenu mnRecentFiles = new JMenu("Recent Files");
|
||||||
public final JMenuItem mntmNewMenuItem = new JMenuItem(
|
public final JMenuItem mntmNewMenuItem = new JMenuItem(
|
||||||
"Save Java Files As..");
|
"Decompile & Save All Classes..");
|
||||||
public final JMenuItem mntmAbout = new JMenuItem("About");
|
public final JMenuItem mntmAbout = new JMenuItem("About");
|
||||||
public AboutWindow aboutWindow = new AboutWindow();
|
public AboutWindow aboutWindow = new AboutWindow();
|
||||||
public final JSeparator separator_3 = new JSeparator();
|
public final JSeparator separator_3 = new JSeparator();
|
||||||
|
@ -176,7 +167,7 @@ public class MainViewerGUI extends JFrame implements FileChangeNotifier {
|
||||||
"Show All Strings");
|
"Show All Strings");
|
||||||
public final JMenuItem mntmShowMainMethods = new JMenuItem(
|
public final JMenuItem mntmShowMainMethods = new JMenuItem(
|
||||||
"Show Main Methods");
|
"Show Main Methods");
|
||||||
public final JMenuItem mntmNewMenuItem_3 = new JMenuItem("Save As Jar..");
|
public final JMenuItem mntmNewMenuItem_3 = new JMenuItem("Save As Runnable Jar..");
|
||||||
public JMenuBar menuBar = new JMenuBar();
|
public JMenuBar menuBar = new JMenuBar();
|
||||||
public final JMenuItem mntmReplaceStrings = new JMenuItem(
|
public final JMenuItem mntmReplaceStrings = new JMenuItem(
|
||||||
"Replace Strings");
|
"Replace Strings");
|
||||||
|
@ -323,7 +314,7 @@ public class MainViewerGUI extends JFrame implements FileChangeNotifier {
|
||||||
"Java");
|
"Java");
|
||||||
public final JRadioButtonMenuItem panel1Proc = new JRadioButtonMenuItem(
|
public final JRadioButtonMenuItem panel1Proc = new JRadioButtonMenuItem(
|
||||||
"Java");
|
"Java");
|
||||||
public final JMenuItem mntmNewMenuItem_12 = new JMenuItem("Save Java File..");
|
public final JMenuItem mntmNewMenuItem_12 = new JMenuItem("Decompile & Save Opened Class..");
|
||||||
public WorkPane workPane = new WorkPane(this);
|
public WorkPane workPane = new WorkPane(this);
|
||||||
public final JMenu mnSettings = new JMenu("Settings");
|
public final JMenu mnSettings = new JMenu("Settings");
|
||||||
public final JSeparator separator_6 = new JSeparator();
|
public final JSeparator separator_6 = new JSeparator();
|
||||||
|
@ -490,6 +481,18 @@ public class MainViewerGUI extends JFrame implements FileChangeNotifier {
|
||||||
public final ButtonGroup panelGroup3 = new ButtonGroup();
|
public final ButtonGroup panelGroup3 = new ButtonGroup();
|
||||||
private final JMenuItem mntmSetOpitonalLibrary = new JMenuItem("Set Optionial Library Folder");
|
private final JMenuItem mntmSetOpitonalLibrary = new JMenuItem("Set Optionial Library Folder");
|
||||||
private final JMenuItem mntmPingback = new JMenuItem("Pingback");
|
private final JMenuItem mntmPingback = new JMenuItem("Pingback");
|
||||||
|
private final JMenu mnJdgui = new JMenu("JD-GUI");
|
||||||
|
public final JRadioButtonMenuItem panel3JDGUI = new JRadioButtonMenuItem("Java");
|
||||||
|
private final JSeparator separator_33 = new JSeparator();
|
||||||
|
public final JCheckBoxMenuItem panel3JDGUI_E = new JCheckBoxMenuItem("Editable");
|
||||||
|
private final JMenu menu = new JMenu("JD-GUI");
|
||||||
|
public final JRadioButtonMenuItem panel2JDGUI = new JRadioButtonMenuItem("Java");
|
||||||
|
private final JSeparator separator_34 = new JSeparator();
|
||||||
|
public final JCheckBoxMenuItem panel2JDGUI_E = new JCheckBoxMenuItem("Editable");
|
||||||
|
private final JMenu menu_6 = new JMenu("JD-GUI");
|
||||||
|
public final JRadioButtonMenuItem panel1JDGUI = new JRadioButtonMenuItem("Java");
|
||||||
|
private final JSeparator separator_35 = new JSeparator();
|
||||||
|
public final JCheckBoxMenuItem panel1JDGUI_E = new JCheckBoxMenuItem("Editable");
|
||||||
public MainViewerGUI() {
|
public MainViewerGUI() {
|
||||||
mnNewMenu_5.setVisible(false);
|
mnNewMenu_5.setVisible(false);
|
||||||
KeyboardFocusManager.getCurrentKeyboardFocusManager().addKeyEventDispatcher(new Test());
|
KeyboardFocusManager.getCurrentKeyboardFocusManager().addKeyEventDispatcher(new Test());
|
||||||
|
@ -581,7 +584,8 @@ public class MainViewerGUI extends JFrame implements FileChangeNotifier {
|
||||||
|
|
||||||
mnNewMenu.add(mntmNewWorkspace);
|
mnNewMenu.add(mntmNewWorkspace);
|
||||||
|
|
||||||
JMenuItem mntmSave = new JMenuItem("Save Files As..");
|
JMenuItem mntmSave = new JMenuItem("Save As Zip..");
|
||||||
|
mntmSave.setActionCommand("");
|
||||||
mntmSave.addActionListener(new ActionListener() {
|
mntmSave.addActionListener(new ActionListener() {
|
||||||
@Override
|
@Override
|
||||||
public void actionPerformed(ActionEvent arg0) {
|
public void actionPerformed(ActionEvent arg0) {
|
||||||
|
@ -822,7 +826,7 @@ public class MainViewerGUI extends JFrame implements FileChangeNotifier {
|
||||||
JOptionPane pane = new JOptionPane(
|
JOptionPane pane = new JOptionPane(
|
||||||
"What decompiler will you use?");
|
"What decompiler will you use?");
|
||||||
Object[] options = new String[] { "Procyon", "CFR",
|
Object[] options = new String[] { "Procyon", "CFR",
|
||||||
"Fernflower", "Krakatau", "Cancel" };
|
"Fernflower", "Krakatau", "JD-GUI", "Cancel" };
|
||||||
pane.setOptions(options);
|
pane.setOptions(options);
|
||||||
JDialog dialog = pane.createDialog(BytecodeViewer.viewer,
|
JDialog dialog = pane.createDialog(BytecodeViewer.viewer,
|
||||||
"Bytecode Viewer - Select Decompiler");
|
"Bytecode Viewer - Select Decompiler");
|
||||||
|
@ -838,7 +842,7 @@ public class MainViewerGUI extends JFrame implements FileChangeNotifier {
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
try {
|
try {
|
||||||
proc_dc.decompileToZip(path);
|
Decompiler.procyon.decompileToZip(path);
|
||||||
BytecodeViewer.viewer.setIcon(false);
|
BytecodeViewer.viewer.setIcon(false);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
new the.bytecode.club.bytecodeviewer.api.ExceptionUI(e);
|
new the.bytecode.club.bytecodeviewer.api.ExceptionUI(e);
|
||||||
|
@ -852,7 +856,7 @@ public class MainViewerGUI extends JFrame implements FileChangeNotifier {
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
try {
|
try {
|
||||||
cfr_dc.decompileToZip(path);
|
Decompiler.cfr.decompileToZip(path);
|
||||||
BytecodeViewer.viewer.setIcon(false);
|
BytecodeViewer.viewer.setIcon(false);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
new the.bytecode.club.bytecodeviewer.api.ExceptionUI(e);
|
new the.bytecode.club.bytecodeviewer.api.ExceptionUI(e);
|
||||||
|
@ -866,7 +870,7 @@ public class MainViewerGUI extends JFrame implements FileChangeNotifier {
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
try {
|
try {
|
||||||
ff_dc.decompileToZip(path);
|
Decompiler.fernflower.decompileToZip(path);
|
||||||
BytecodeViewer.viewer.setIcon(false);
|
BytecodeViewer.viewer.setIcon(false);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
new the.bytecode.club.bytecodeviewer.api.ExceptionUI(e);
|
new the.bytecode.club.bytecodeviewer.api.ExceptionUI(e);
|
||||||
|
@ -881,7 +885,7 @@ public class MainViewerGUI extends JFrame implements FileChangeNotifier {
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
try {
|
try {
|
||||||
krak_dc.decompileToZip(path);
|
Decompiler.krakatau.decompileToZip(path);
|
||||||
BytecodeViewer.viewer.setIcon(false);
|
BytecodeViewer.viewer.setIcon(false);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
new the.bytecode.club.bytecodeviewer.api.ExceptionUI(e);
|
new the.bytecode.club.bytecodeviewer.api.ExceptionUI(e);
|
||||||
|
@ -892,6 +896,21 @@ public class MainViewerGUI extends JFrame implements FileChangeNotifier {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (result == 4) {
|
if (result == 4) {
|
||||||
|
Thread t = new Thread() {
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
try {
|
||||||
|
Decompiler.jdgui.decompileToZip(path);
|
||||||
|
BytecodeViewer.viewer.setIcon(false);
|
||||||
|
} catch (Exception e) {
|
||||||
|
new the.bytecode.club.bytecodeviewer.api.ExceptionUI(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
t.start();
|
||||||
|
}
|
||||||
|
|
||||||
|
if(result == 5) {
|
||||||
BytecodeViewer.viewer.setIcon(false);
|
BytecodeViewer.viewer.setIcon(false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -944,7 +963,7 @@ public class MainViewerGUI extends JFrame implements FileChangeNotifier {
|
||||||
JOptionPane pane = new JOptionPane(
|
JOptionPane pane = new JOptionPane(
|
||||||
"What decompiler will you use?");
|
"What decompiler will you use?");
|
||||||
Object[] options = new String[] { "Procyon", "CFR",
|
Object[] options = new String[] { "Procyon", "CFR",
|
||||||
"Fernflower", "Krakatau", "Cancel" };
|
"Fernflower", "Krakatau", "DJ GUI", "Cancel" };
|
||||||
pane.setOptions(options);
|
pane.setOptions(options);
|
||||||
JDialog dialog = pane.createDialog(BytecodeViewer.viewer,
|
JDialog dialog = pane.createDialog(BytecodeViewer.viewer,
|
||||||
"Bytecode Viewer - Select Decompiler");
|
"Bytecode Viewer - Select Decompiler");
|
||||||
|
@ -960,7 +979,7 @@ public class MainViewerGUI extends JFrame implements FileChangeNotifier {
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
try {
|
try {
|
||||||
proc_dc.decompileToClass(s,path);
|
Decompiler.procyon.decompileToClass(s,path);
|
||||||
BytecodeViewer.viewer.setIcon(false);
|
BytecodeViewer.viewer.setIcon(false);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
new the.bytecode.club.bytecodeviewer.api.ExceptionUI(
|
new the.bytecode.club.bytecodeviewer.api.ExceptionUI(
|
||||||
|
@ -975,7 +994,7 @@ public class MainViewerGUI extends JFrame implements FileChangeNotifier {
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
try {
|
try {
|
||||||
cfr_dc.decompileToClass(s,path);
|
Decompiler.cfr.decompileToClass(s,path);
|
||||||
BytecodeViewer.viewer.setIcon(false);
|
BytecodeViewer.viewer.setIcon(false);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
new the.bytecode.club.bytecodeviewer.api.ExceptionUI(
|
new the.bytecode.club.bytecodeviewer.api.ExceptionUI(
|
||||||
|
@ -990,7 +1009,7 @@ public class MainViewerGUI extends JFrame implements FileChangeNotifier {
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
try {
|
try {
|
||||||
ff_dc.decompileToClass(s,path);
|
Decompiler.fernflower.decompileToClass(s,path);
|
||||||
BytecodeViewer.viewer.setIcon(false);
|
BytecodeViewer.viewer.setIcon(false);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
new the.bytecode.club.bytecodeviewer.api.ExceptionUI(
|
new the.bytecode.club.bytecodeviewer.api.ExceptionUI(
|
||||||
|
@ -1005,7 +1024,22 @@ public class MainViewerGUI extends JFrame implements FileChangeNotifier {
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
try {
|
try {
|
||||||
krak_dc.decompileToClass(s,path);
|
Decompiler.krakatau.decompileToClass(s,path);
|
||||||
|
BytecodeViewer.viewer.setIcon(false);
|
||||||
|
} catch (Exception e) {
|
||||||
|
new the.bytecode.club.bytecodeviewer.api.ExceptionUI(
|
||||||
|
e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
t.start();
|
||||||
|
}
|
||||||
|
if (result == 4) {
|
||||||
|
Thread t = new Thread() {
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
try {
|
||||||
|
Decompiler.jdgui.decompileToClass(s,path);
|
||||||
BytecodeViewer.viewer.setIcon(false);
|
BytecodeViewer.viewer.setIcon(false);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
new the.bytecode.club.bytecodeviewer.api.ExceptionUI(
|
new the.bytecode.club.bytecodeviewer.api.ExceptionUI(
|
||||||
|
@ -1016,7 +1050,7 @@ public class MainViewerGUI extends JFrame implements FileChangeNotifier {
|
||||||
t.start();
|
t.start();
|
||||||
}
|
}
|
||||||
|
|
||||||
if(result == 4) {
|
if(result == 5) {
|
||||||
BytecodeViewer.viewer.setIcon(false);
|
BytecodeViewer.viewer.setIcon(false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1099,6 +1133,14 @@ public class MainViewerGUI extends JFrame implements FileChangeNotifier {
|
||||||
|
|
||||||
mnCfr.add(panel1CFR_E);
|
mnCfr.add(panel1CFR_E);
|
||||||
|
|
||||||
|
mnNewMenu_7.add(menu_6);
|
||||||
|
|
||||||
|
menu_6.add(panel1JDGUI);
|
||||||
|
|
||||||
|
menu_6.add(separator_35);
|
||||||
|
|
||||||
|
menu_6.add(panel1JDGUI_E);
|
||||||
|
|
||||||
mnNewMenu_7.add(mnFernflower);
|
mnNewMenu_7.add(mnFernflower);
|
||||||
mnFernflower.add(panel1Fern);
|
mnFernflower.add(panel1Fern);
|
||||||
panel1Fern.addActionListener(listener);
|
panel1Fern.addActionListener(listener);
|
||||||
|
@ -1156,6 +1198,14 @@ public class MainViewerGUI extends JFrame implements FileChangeNotifier {
|
||||||
|
|
||||||
menu_2.add(panel2CFR_E);
|
menu_2.add(panel2CFR_E);
|
||||||
|
|
||||||
|
mnPane.add(menu);
|
||||||
|
|
||||||
|
menu.add(panel2JDGUI);
|
||||||
|
|
||||||
|
menu.add(separator_34);
|
||||||
|
|
||||||
|
menu.add(panel2JDGUI_E);
|
||||||
|
|
||||||
mnPane.add(menu_3);
|
mnPane.add(menu_3);
|
||||||
|
|
||||||
menu_3.add(panel2Fern);
|
menu_3.add(panel2Fern);
|
||||||
|
@ -1212,6 +1262,14 @@ public class MainViewerGUI extends JFrame implements FileChangeNotifier {
|
||||||
|
|
||||||
menu_8.add(panel3CFR_E);
|
menu_8.add(panel3CFR_E);
|
||||||
|
|
||||||
|
mnPane_1.add(mnJdgui);
|
||||||
|
|
||||||
|
mnJdgui.add(panel3JDGUI);
|
||||||
|
|
||||||
|
mnJdgui.add(separator_33);
|
||||||
|
|
||||||
|
mnJdgui.add(panel3JDGUI_E);
|
||||||
|
|
||||||
mnPane_1.add(menu_9);
|
mnPane_1.add(menu_9);
|
||||||
|
|
||||||
menu_9.add(panel3Fern);
|
menu_9.add(panel3Fern);
|
||||||
|
@ -1247,8 +1305,10 @@ public class MainViewerGUI extends JFrame implements FileChangeNotifier {
|
||||||
mnPane_1.add(panel3Hexcode);
|
mnPane_1.add(panel3Hexcode);
|
||||||
|
|
||||||
menuBar.add(mnSettings);
|
menuBar.add(mnSettings);
|
||||||
|
autoCompileSmali.setSelected(true);
|
||||||
|
|
||||||
mnSettings.add(autoCompileSmali);
|
mnSettings.add(autoCompileSmali);
|
||||||
|
autoCompileOnRefresh.setSelected(true);
|
||||||
|
|
||||||
mnSettings.add(autoCompileOnRefresh);
|
mnSettings.add(autoCompileOnRefresh);
|
||||||
mnSettings.add(chckbxmntmNewCheckItem_12);
|
mnSettings.add(chckbxmntmNewCheckItem_12);
|
||||||
|
@ -1607,8 +1667,6 @@ public class MainViewerGUI extends JFrame implements FileChangeNotifier {
|
||||||
@Override
|
@Override
|
||||||
public void actionPerformed(ActionEvent arg0) {
|
public void actionPerformed(ActionEvent arg0) {
|
||||||
JFileChooser fc = new JFileChooser();
|
JFileChooser fc = new JFileChooser();
|
||||||
/* 01/06/15, 14:32, Changed to plugin file filter rather from the
|
|
||||||
* only .java filter. */
|
|
||||||
fc.setFileFilter(PluginManager.fileFilter());
|
fc.setFileFilter(PluginManager.fileFilter());
|
||||||
fc.setFileHidingEnabled(false);
|
fc.setFileHidingEnabled(false);
|
||||||
fc.setAcceptAllFileFilterUsed(false);
|
fc.setAcceptAllFileFilterUsed(false);
|
||||||
|
@ -1690,6 +1748,7 @@ public class MainViewerGUI extends JFrame implements FileChangeNotifier {
|
||||||
panelGroup1.add(panel1None);
|
panelGroup1.add(panel1None);
|
||||||
panelGroup1.add(panel1Proc);
|
panelGroup1.add(panel1Proc);
|
||||||
panelGroup1.add(panel1CFR);
|
panelGroup1.add(panel1CFR);
|
||||||
|
panelGroup1.add(panel1JDGUI);
|
||||||
panelGroup1.add(panel1Fern);
|
panelGroup1.add(panel1Fern);
|
||||||
panelGroup1.add(panel1Krakatau);
|
panelGroup1.add(panel1Krakatau);
|
||||||
panelGroup1.add(panel1KrakatauBytecode);
|
panelGroup1.add(panel1KrakatauBytecode);
|
||||||
|
@ -1700,6 +1759,7 @@ public class MainViewerGUI extends JFrame implements FileChangeNotifier {
|
||||||
panelGroup2.add(panel2None);
|
panelGroup2.add(panel2None);
|
||||||
panelGroup2.add(panel2Proc);
|
panelGroup2.add(panel2Proc);
|
||||||
panelGroup2.add(panel2CFR);
|
panelGroup2.add(panel2CFR);
|
||||||
|
panelGroup2.add(panel2JDGUI);
|
||||||
panelGroup2.add(panel2Fern);
|
panelGroup2.add(panel2Fern);
|
||||||
panelGroup2.add(panel2Krakatau);
|
panelGroup2.add(panel2Krakatau);
|
||||||
panelGroup2.add(panel2KrakatauBytecode);
|
panelGroup2.add(panel2KrakatauBytecode);
|
||||||
|
@ -1710,6 +1770,7 @@ public class MainViewerGUI extends JFrame implements FileChangeNotifier {
|
||||||
panelGroup3.add(panel3None);
|
panelGroup3.add(panel3None);
|
||||||
panelGroup3.add(panel3Proc);
|
panelGroup3.add(panel3Proc);
|
||||||
panelGroup3.add(panel3CFR);
|
panelGroup3.add(panel3CFR);
|
||||||
|
panelGroup3.add(panel3JDGUI);
|
||||||
panelGroup3.add(panel3Fern);
|
panelGroup3.add(panel3Fern);
|
||||||
panelGroup3.add(panel3Krakatau);
|
panelGroup3.add(panel3Krakatau);
|
||||||
panelGroup3.add(panel3KrakatauBytecode);
|
panelGroup3.add(panel3KrakatauBytecode);
|
||||||
|
|
|
@ -0,0 +1,102 @@
|
||||||
|
package the.bytecode.club.bytecodeviewer.plugins;
|
||||||
|
|
||||||
|
import java.awt.Font;
|
||||||
|
import java.awt.font.FontRenderContext;
|
||||||
|
import java.awt.geom.AffineTransform;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
|
||||||
|
import javax.swing.JFrame;
|
||||||
|
import javax.swing.UIManager;
|
||||||
|
|
||||||
|
import org.objectweb.asm.tree.AbstractInsnNode;
|
||||||
|
import org.objectweb.asm.tree.ClassNode;
|
||||||
|
import org.objectweb.asm.tree.MethodInsnNode;
|
||||||
|
import org.objectweb.asm.tree.MethodNode;
|
||||||
|
|
||||||
|
import com.mxgraph.swing.mxGraphComponent;
|
||||||
|
import com.mxgraph.view.mxGraph;
|
||||||
|
|
||||||
|
import the.bytecode.club.bytecodeviewer.BytecodeViewer;
|
||||||
|
import the.bytecode.club.bytecodeviewer.Resources;
|
||||||
|
import the.bytecode.club.bytecodeviewer.api.Plugin;
|
||||||
|
import the.bytecode.club.bytecodeviewer.gui.ClassViewer;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A simple code sequence diagram.
|
||||||
|
*
|
||||||
|
* @author Konloch
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
public class CodeSequenceDiagram extends Plugin {
|
||||||
|
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
|
@Override
|
||||||
|
public void execute(ArrayList<ClassNode> classNodeList) {
|
||||||
|
if(BytecodeViewer.viewer.workPane.getCurrentViewer() == null || !(BytecodeViewer.viewer.workPane.getCurrentViewer() instanceof ClassViewer)) {
|
||||||
|
BytecodeViewer.showMessage("First open a class file.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
ClassNode c = BytecodeViewer.viewer.workPane.getCurrentViewer().cn;
|
||||||
|
if(c == null) {
|
||||||
|
BytecodeViewer.showMessage("ClassNode is null for CodeSequenceDiagram. Please report to @Konloch");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
JFrame frame = null;
|
||||||
|
if(c.name != null)
|
||||||
|
frame = new JFrame("Code Sequence Diagram - "+c.name);
|
||||||
|
else
|
||||||
|
frame = new JFrame("Code Sequence Diagram - Unknown Name");
|
||||||
|
|
||||||
|
frame.setIconImages(Resources.iconList);
|
||||||
|
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
|
||||||
|
frame.setSize(400, 320);
|
||||||
|
mxGraph graph = new mxGraph();
|
||||||
|
graph.setVertexLabelsMovable(false);
|
||||||
|
graph.setGridEnabled(true);
|
||||||
|
graph.setEnabled(false);
|
||||||
|
graph.setCellsEditable(false);
|
||||||
|
graph.setCellsSelectable(false);
|
||||||
|
graph.setCellsMovable(false);
|
||||||
|
graph.setCellsLocked(true);
|
||||||
|
Object parent = graph.getDefaultParent();
|
||||||
|
Font font = UIManager.getDefaults().getFont("TabbedPane.font");
|
||||||
|
AffineTransform affinetransform = new AffineTransform();
|
||||||
|
FontRenderContext frc = new FontRenderContext(affinetransform,true,true);
|
||||||
|
|
||||||
|
graph.getModel().beginUpdate();
|
||||||
|
try
|
||||||
|
{
|
||||||
|
|
||||||
|
int testX = 10;
|
||||||
|
int testY = 0;
|
||||||
|
double magicNumber = 5.8;
|
||||||
|
|
||||||
|
for(MethodNode m : (ArrayList<MethodNode>)c.methods) {
|
||||||
|
String mIdentifier = c.name+"."+m.name+m.desc;
|
||||||
|
Object node = graph.insertVertex(parent, null, mIdentifier, testX, testY, mIdentifier.length() * magicNumber, 30);
|
||||||
|
Object attach = node;
|
||||||
|
testX += (int) (font.getStringBounds(mIdentifier, frc).getWidth()) + 60;
|
||||||
|
for (AbstractInsnNode i : m.instructions.toArray()) {
|
||||||
|
if (i instanceof MethodInsnNode) {
|
||||||
|
MethodInsnNode mi = (MethodInsnNode) i;
|
||||||
|
String identifier = mi.owner+"."+mi.name+mi.desc;
|
||||||
|
Object node2 = graph.insertVertex(parent, null, identifier, testX, testY, identifier.length() * 5, 30);
|
||||||
|
testX += (int) (font.getStringBounds(identifier, frc).getWidth()) + 60;
|
||||||
|
graph.insertEdge(parent, null, null, attach, node2);
|
||||||
|
attach = node2;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
testY += 60;
|
||||||
|
testX = 10;
|
||||||
|
}
|
||||||
|
} finally {
|
||||||
|
graph.getModel().endUpdate();
|
||||||
|
}
|
||||||
|
|
||||||
|
mxGraphComponent graphComponent = new mxGraphComponent(graph);
|
||||||
|
frame.getContentPane().add(graphComponent);
|
||||||
|
frame.setVisible(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in a new issue