2.8.1
02/04/2015 - Fixed UI bug with Krakatau/Krakatau Editable view panes. 02/05/2015 - Added CTRL + F.
This commit is contained in:
parent
0fb031b19d
commit
5efba02200
9 changed files with 353 additions and 95 deletions
Binary file not shown.
11
README.txt
11
README.txt
|
@ -1,4 +1,4 @@
|
|||
Bytecode Viewer is an Advanced Lightweight Java Bytecode Viewer, GUI Smali, GUI Baksmali, GUI APK Editor, GUI Dex Editor, GUI APK Decompiler, GUI DEX Decompiler, GUI Procyon Java Decompiler, GUI Krakatau, GUI CFR Java Decompiler, GUI FernFlower Java Decompiler, GUI DEX2Jar, GUI Jar2DEX, GUI Jar-Jar, Hex Viewer, Code Searcher, Debugger and more.
|
||||
Bytecode Viewer is an Advanced Lightweight Java Bytecode Viewer, GUI Java Decompiler, GUI Bytecode Editor, GUI Smali, GUI Baksmali, GUI APK Editor, GUI Dex Editor, GUI APK Decompiler, GUI DEX Decompiler, GUI Procyon Java Decompiler, GUI Krakatau, GUI CFR Java Decompiler, GUI FernFlower Java Decompiler, GUI DEX2Jar, GUI Jar2DEX, GUI Jar-Jar, Hex Viewer, Code Searcher, Debugger and more.
|
||||
It's written completely in Java, and it's open sourced. It's currently being maintained and developed by Konloch.
|
||||
|
||||
There is also a plugin system that will allow you to interact with the loaded classfiles, for example you can write a String deobfuscator, a malicious code searcher, or something else you can think of.
|
||||
|
@ -28,9 +28,11 @@ Contributors:
|
|||
Afffsdd
|
||||
If I missed you, please feel free to contact me @Konloch or konloch@gmail.com
|
||||
|
||||
Contribution Guide Lines:
|
||||
Contribution Guide Lines/Coding Conventions:
|
||||
Packages must start with the.bytecode.club.bytecodeviewer
|
||||
If code you write can throw an exception, handle it using new the.bytecode.club.bytecodeviewer.ExceptionUI(exception)
|
||||
If code you write can throw an exception, handle it using new the.bytecode.club.bytecodeviewer.ExceptionUI(exception, "authors@email.com")
|
||||
All variables must be at the start of each class.
|
||||
Brackets are meant to be on the same line, I.E. public void main(String[] args) { not (String[] args) <NEWLINE_BREAK> {
|
||||
|
||||
Website: https://bytecodeviewer.com
|
||||
Source Code: https://github.com/konloch/bytecode-viewer
|
||||
|
@ -288,3 +290,6 @@ Changelog:
|
|||
02/03/2015 - Dropped JRuby and Jython support (BCV is now roughly 16mb, was 45mb).
|
||||
02/04/2015 - Added Krakatau Disassembly.
|
||||
02/04/2015 - Added Krakatau Assembly.
|
||||
--- 2.8.1 ---:
|
||||
02/04/2015 - Fixed UI bug with Krakatau/Krakatau Editable view panes.
|
||||
02/05/2015 - Added CTRL + F.
|
|
@ -1,15 +0,0 @@
|
|||
require 'java'
|
||||
|
||||
java_import 'the.bytecode.club.bytecodeviewer.api.Plugin'
|
||||
java_import 'the.bytecode.club.bytecodeviewer.api.PluginConsole'
|
||||
java_import 'java.lang.System'
|
||||
java_import 'java.util.ArrayList'
|
||||
java_import 'org.objectweb.asm.tree.ClassNode'
|
||||
|
||||
class Skeleton < Plugin
|
||||
def execute(classNodeList)
|
||||
gui = PluginConsole.new "Skeleton"
|
||||
gui.setVisible(true)
|
||||
gui.appendText("exceuted skeleton")
|
||||
end
|
||||
end
|
|
@ -1,13 +0,0 @@
|
|||
from the.bytecode.club.bytecodeviewer.api import Plugin
|
||||
from the.bytecode.club.bytecodeviewer.api import PluginConsole
|
||||
from java.lang import System
|
||||
from java.lang import Boolean
|
||||
from java.util import ArrayList
|
||||
from org.objectweb.asm.tree import ClassNode
|
||||
|
||||
class skeleton(Plugin):
|
||||
|
||||
def execute(classNodeList, poop): #for some reason it requires a second arg
|
||||
gui = PluginConsole("Skeleton")
|
||||
gui.setVisible(Boolean.TRUE)
|
||||
gui.appendText("exceuted skeleton")
|
|
@ -66,19 +66,31 @@ import the.bytecode.club.bytecodeviewer.plugins.PluginManager;
|
|||
* allows the user to handle it completely using ASM.
|
||||
*
|
||||
* TODO:
|
||||
*
|
||||
* 3.0.0: (RETIREMENT PARTY, WOHOOO)
|
||||
* maybe just do AMS5 then obfuscate the dex2jar shit.
|
||||
* The import jar method eats up a lot of memory, look into some how reducing this.
|
||||
* Add obfuscation:
|
||||
* - Add integer boxing and other obfuscation methods contra implemented
|
||||
* - Insert unadded/debug opcodes to try to fuck up decompilers
|
||||
* - ClassAnylyzterAdapter
|
||||
* Add progress bars on saving all zips/java decompile jar
|
||||
* Add the jump/save mark system Ida Pro has.
|
||||
* Add class annotations to bytecode decompiler.
|
||||
* Option to make the bytecode pane automatically scroll to where the source code pane is
|
||||
* Replacing all string field calls with the string instance - would require EZ-Injection to run code?
|
||||
* Spiffy up the plugin console with red text optional, would require JTextPane, not JTextArea.
|
||||
* EVERYTHING BUG FREE, CHECK 100%
|
||||
* add support for all files, and resource loading (images display inside, can be view in hex)
|
||||
*
|
||||
*
|
||||
* 2.9.0:
|
||||
* make it save the last used main class entry globally, reset on workspace reset
|
||||
* make it use that global last used inside of export as jar
|
||||
* remake EZ-Inject plugin as File-Run
|
||||
* Add Java compiler to attempt to recompile the decompiled Java code
|
||||
* Add right click on tab > close other tabs > close this tab
|
||||
* maybe just do AMS5 then obfuscate the dex2jar shit.
|
||||
* Spiffy up the plugin console with red text optional, would require JTextPane, not JTextArea.
|
||||
* Option to make the bytecode pane automatically scroll to where the source code pane is
|
||||
* Add progress bars on saving all zips/java decompile jar
|
||||
* Take https://github.com/ptnkjke/Java-Bytecode-Editor visualize
|
||||
*
|
||||
*
|
||||
* ----Beta 1.0.0-----:
|
||||
* 10/4/2014 - Designed a POC GUI, still needs a lot of work.
|
||||
|
@ -309,6 +321,9 @@ import the.bytecode.club.bytecodeviewer.plugins.PluginManager;
|
|||
* 02/03/2015 - Dropped JRuby and Jython support (BCV is now roughly 16mb, was 45mb).
|
||||
* 02/04/2015 - Added Krakatau Disassembly.
|
||||
* 02/04/2015 - Added Krakatau Assembly.
|
||||
* -----2.8.1-----:
|
||||
* 02/04/2015 - Fixed UI bug with Krakatau/Krakatau Editable view panes.
|
||||
* 02/05/2015 - Added CTRL + F.
|
||||
*
|
||||
* @author Konloch
|
||||
*
|
||||
|
@ -317,7 +332,7 @@ import the.bytecode.club.bytecodeviewer.plugins.PluginManager;
|
|||
public class BytecodeViewer {
|
||||
|
||||
/*per version*/
|
||||
public static String version = "2.8.0";
|
||||
public static String version = "2.8.1";
|
||||
public static String krakatauVersion = "2";
|
||||
/*the rest*/
|
||||
public static MainViewerGUI viewer = null;
|
||||
|
|
|
@ -23,6 +23,8 @@ import java.io.StringWriter;
|
|||
|
||||
public class ExceptionUI extends JFrame {
|
||||
|
||||
private static final long serialVersionUID = -5230501978224926296L;
|
||||
|
||||
/**
|
||||
* @param e
|
||||
* The exception to be shown
|
||||
|
@ -98,6 +100,4 @@ public class ExceptionUI extends JFrame {
|
|||
this.setVisible(true);
|
||||
}
|
||||
|
||||
private static final long serialVersionUID = -5230501978224926296L;
|
||||
|
||||
}
|
||||
|
|
|
@ -39,6 +39,7 @@ public class PluginConsole extends JFrame {
|
|||
JPanel panel = new JPanel(new BorderLayout());
|
||||
JScrollPane scrollPane = new JScrollPane();
|
||||
public JCheckBox check = new JCheckBox("Exact");
|
||||
final JTextField field = new JTextField();
|
||||
|
||||
public PluginConsole(String pluginName) {
|
||||
this.setIconImages(BytecodeViewer.iconList);
|
||||
|
@ -48,6 +49,17 @@ public class PluginConsole extends JFrame {
|
|||
getContentPane().add(scrollPane, BorderLayout.CENTER);
|
||||
|
||||
scrollPane.setViewportView(textArea);
|
||||
textArea.addKeyListener(new KeyListener() {
|
||||
public void keyPressed(KeyEvent e) {
|
||||
if ((e.getKeyCode() == KeyEvent.VK_F) && ((e.getModifiers() & KeyEvent.CTRL_MASK) != 0)) {
|
||||
field.requestFocus();
|
||||
}
|
||||
|
||||
BytecodeViewer.viewer.checkKey(e);
|
||||
}
|
||||
@Override public void keyReleased(KeyEvent arg0) { }
|
||||
@Override public void keyTyped(KeyEvent arg0) { }
|
||||
});
|
||||
|
||||
JButton searchNext = new JButton();
|
||||
JButton searchPrev = new JButton();
|
||||
|
@ -63,7 +75,6 @@ public class PluginConsole extends JFrame {
|
|||
BytecodeViewer
|
||||
.b642IMG("iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAMFBMVEX///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAABnRSTlMANzlYgKhxpRi1AAAATElEQVR42mNgwAZYHIAEExA7qUAYLApMDmCGEwODCojByM/A8FEAyPi/moFh9QewYjCAM1iA+D2KqYwMrIlA6tUGFoa/Z4GMt1hsBgCe1wuKber+SwAAAABJRU5ErkJggg==")));
|
||||
panel.add(buttonPane, BorderLayout.WEST);
|
||||
final JTextField field = new JTextField();
|
||||
panel.add(field, BorderLayout.CENTER);
|
||||
panel.add(check, BorderLayout.EAST);
|
||||
searchNext.addActionListener(new ActionListener() {
|
||||
|
@ -93,7 +104,6 @@ public class PluginConsole extends JFrame {
|
|||
public void keyTyped(KeyEvent arg0) {
|
||||
}
|
||||
});
|
||||
|
||||
scrollPane.setColumnHeaderView(panel);
|
||||
this.setLocationRelativeTo(null);
|
||||
}
|
||||
|
|
|
@ -278,6 +278,9 @@ public class ClassViewer extends JPanel {
|
|||
}
|
||||
}
|
||||
|
||||
final JTextField field1 = new JTextField();
|
||||
final JTextField field2 = new JTextField();
|
||||
final JTextField field3 = new JTextField();
|
||||
public ClassViewer(final String name, final ClassNode cn) {
|
||||
JButton byteSearchNext = new JButton();
|
||||
JButton byteSearchPrev = new JButton();
|
||||
|
@ -293,7 +296,6 @@ public class ClassViewer extends JPanel {
|
|||
BytecodeViewer
|
||||
.b642IMG("iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAMFBMVEX///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAABnRSTlMANzlYgKhxpRi1AAAATElEQVR42mNgwAZYHIAEExA7qUAYLApMDmCGEwODCojByM/A8FEAyPi/moFh9QewYjCAM1iA+D2KqYwMrIlA6tUGFoa/Z4GMt1hsBgCe1wuKber+SwAAAABJRU5ErkJggg==")));
|
||||
panel1Search.add(byteButtonPane, BorderLayout.WEST);
|
||||
final JTextField field1 = new JTextField();
|
||||
panel1Search.add(field1, BorderLayout.CENTER);
|
||||
panel1Search.add(check1, BorderLayout.EAST);
|
||||
byteSearchNext.addActionListener(new ActionListener() {
|
||||
|
@ -338,7 +340,6 @@ public class ClassViewer extends JPanel {
|
|||
BytecodeViewer
|
||||
.b642IMG("iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAMFBMVEX///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAABnRSTlMANzlYgKhxpRi1AAAATElEQVR42mNgwAZYHIAEExA7qUAYLApMDmCGEwODCojByM/A8FEAyPi/moFh9QewYjCAM1iA+D2KqYwMrIlA6tUGFoa/Z4GMt1hsBgCe1wuKber+SwAAAABJRU5ErkJggg==")));
|
||||
panel2Search.add(buttonPane2, BorderLayout.WEST);
|
||||
final JTextField field2 = new JTextField();
|
||||
panel2Search.add(field2, BorderLayout.CENTER);
|
||||
panel2Search.add(check2, BorderLayout.EAST);
|
||||
searchNext2.addActionListener(new ActionListener() {
|
||||
|
@ -383,7 +384,6 @@ public class ClassViewer extends JPanel {
|
|||
BytecodeViewer
|
||||
.b642IMG("iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAMFBMVEX///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAABnRSTlMANzlYgKhxpRi1AAAATElEQVR42mNgwAZYHIAEExA7qUAYLApMDmCGEwODCojByM/A8FEAyPi/moFh9QewYjCAM1iA+D2KqYwMrIlA6tUGFoa/Z4GMt1hsBgCe1wuKber+SwAAAABJRU5ErkJggg==")));
|
||||
panel3Search.add(buttonPane3, BorderLayout.WEST);
|
||||
final JTextField field3 = new JTextField();
|
||||
panel3Search.add(field3, BorderLayout.CENTER);
|
||||
panel3Search.add(check3, BorderLayout.EAST);
|
||||
searchNext3.addActionListener(new ActionListener() {
|
||||
|
@ -579,6 +579,18 @@ public class ClassViewer extends JPanel {
|
|||
panelArea.setText(proc_dc.decompileClassNode(cn));
|
||||
panelArea.setCaretPosition(0);
|
||||
panelArea.setEditable(false);
|
||||
panelArea.addKeyListener(new KeyListener() {
|
||||
public void keyPressed(KeyEvent e) {
|
||||
|
||||
if ((e.getKeyCode() == KeyEvent.VK_F) && ((e.getModifiers() & KeyEvent.CTRL_MASK) != 0)) {
|
||||
field1.requestFocus();
|
||||
}
|
||||
|
||||
BytecodeViewer.viewer.checkKey(e);
|
||||
}
|
||||
@Override public void keyReleased(KeyEvent arg0) { }
|
||||
@Override public void keyTyped(KeyEvent arg0) { }
|
||||
});
|
||||
panel1.add(scrollPane);
|
||||
}
|
||||
|
||||
|
@ -592,6 +604,17 @@ public class ClassViewer extends JPanel {
|
|||
panelArea.setText(cfr_dc.decompileClassNode(cn));
|
||||
panelArea.setCaretPosition(0);
|
||||
panelArea.setEditable(false);
|
||||
panelArea.addKeyListener(new KeyListener() {
|
||||
public void keyPressed(KeyEvent e) {
|
||||
if ((e.getKeyCode() == KeyEvent.VK_F) && ((e.getModifiers() & KeyEvent.CTRL_MASK) != 0)) {
|
||||
field1.requestFocus();
|
||||
}
|
||||
|
||||
BytecodeViewer.viewer.checkKey(e);
|
||||
}
|
||||
@Override public void keyReleased(KeyEvent arg0) { }
|
||||
@Override public void keyTyped(KeyEvent arg0) { }
|
||||
});
|
||||
panel1.add(scrollPane);
|
||||
}
|
||||
|
||||
|
@ -605,6 +628,17 @@ public class ClassViewer extends JPanel {
|
|||
panelArea.setText(ff_dc.decompileClassNode(cn));
|
||||
panelArea.setCaretPosition(0);
|
||||
panelArea.setEditable(false);
|
||||
panelArea.addKeyListener(new KeyListener() {
|
||||
public void keyPressed(KeyEvent e) {
|
||||
if ((e.getKeyCode() == KeyEvent.VK_F) && ((e.getModifiers() & KeyEvent.CTRL_MASK) != 0)) {
|
||||
field1.requestFocus();
|
||||
}
|
||||
|
||||
BytecodeViewer.viewer.checkKey(e);
|
||||
}
|
||||
@Override public void keyReleased(KeyEvent arg0) { }
|
||||
@Override public void keyTyped(KeyEvent arg0) { }
|
||||
});
|
||||
panel1.add(scrollPane);
|
||||
}
|
||||
|
||||
|
@ -614,12 +648,23 @@ public class ClassViewer extends JPanel {
|
|||
.setSyntaxEditingStyle(SyntaxConstants.SYNTAX_STYLE_JAVA);
|
||||
bytecodeArea.setCodeFoldingEnabled(true);
|
||||
bytecodeArea.setAntiAliasingEnabled(true);
|
||||
RTextScrollPane bytecodeSPane = new RTextScrollPane(
|
||||
RTextScrollPane scrollPane = new RTextScrollPane(
|
||||
bytecodeArea);
|
||||
bytecodeArea.setText(ClassNodeDecompiler.decompile(cn));
|
||||
bytecodeArea.setCaretPosition(0);
|
||||
bytecodeArea.setEditable(false);
|
||||
panel1.add(bytecodeSPane);
|
||||
bytecodeArea.addKeyListener(new KeyListener() {
|
||||
public void keyPressed(KeyEvent e) {
|
||||
if ((e.getKeyCode() == KeyEvent.VK_F) && ((e.getModifiers() & KeyEvent.CTRL_MASK) != 0)) {
|
||||
field1.requestFocus();
|
||||
}
|
||||
|
||||
BytecodeViewer.viewer.checkKey(e);
|
||||
}
|
||||
@Override public void keyReleased(KeyEvent arg0) { }
|
||||
@Override public void keyTyped(KeyEvent arg0) { }
|
||||
});
|
||||
panel1.add(scrollPane);
|
||||
}
|
||||
|
||||
if (pane1 == 5) {// hex
|
||||
|
@ -635,12 +680,23 @@ public class ClassViewer extends JPanel {
|
|||
.setSyntaxEditingStyle(SyntaxConstants.SYNTAX_STYLE_JAVA);
|
||||
bytecodeArea.setCodeFoldingEnabled(true);
|
||||
bytecodeArea.setAntiAliasingEnabled(true);
|
||||
RTextScrollPane bytecodeSPane = new RTextScrollPane(
|
||||
RTextScrollPane scrollPane = new RTextScrollPane(
|
||||
bytecodeArea);
|
||||
bytecodeArea.setText(SmaliDisassembler.decompileClassNode(cn));
|
||||
bytecodeArea.setCaretPosition(0);
|
||||
smali1 = bytecodeArea;
|
||||
panel1.add(bytecodeSPane);
|
||||
smali1.addKeyListener(new KeyListener() {
|
||||
public void keyPressed(KeyEvent e) {
|
||||
if ((e.getKeyCode() == KeyEvent.VK_F) && ((e.getModifiers() & KeyEvent.CTRL_MASK) != 0)) {
|
||||
field1.requestFocus();
|
||||
}
|
||||
|
||||
BytecodeViewer.viewer.checkKey(e);
|
||||
}
|
||||
@Override public void keyReleased(KeyEvent arg0) { }
|
||||
@Override public void keyTyped(KeyEvent arg0) { }
|
||||
});
|
||||
panel1.add(scrollPane);
|
||||
}
|
||||
|
||||
if (pane1 == 7) {// krakatau
|
||||
|
@ -649,11 +705,22 @@ public class ClassViewer extends JPanel {
|
|||
.setSyntaxEditingStyle(SyntaxConstants.SYNTAX_STYLE_JAVA);
|
||||
bytecodeArea.setCodeFoldingEnabled(true);
|
||||
bytecodeArea.setAntiAliasingEnabled(true);
|
||||
RTextScrollPane bytecodeSPane = new RTextScrollPane(
|
||||
RTextScrollPane scrollPane = new RTextScrollPane(
|
||||
bytecodeArea);
|
||||
bytecodeArea.setText(krak_dc.decompileClassNode(cn));
|
||||
bytecodeArea.setCaretPosition(0);
|
||||
panel1.add(bytecodeSPane);
|
||||
bytecodeArea.addKeyListener(new KeyListener() {
|
||||
public void keyPressed(KeyEvent e) {
|
||||
if ((e.getKeyCode() == KeyEvent.VK_F) && ((e.getModifiers() & KeyEvent.CTRL_MASK) != 0)) {
|
||||
field1.requestFocus();
|
||||
}
|
||||
|
||||
BytecodeViewer.viewer.checkKey(e);
|
||||
}
|
||||
@Override public void keyReleased(KeyEvent arg0) { }
|
||||
@Override public void keyTyped(KeyEvent arg0) { }
|
||||
});
|
||||
panel1.add(scrollPane);
|
||||
}
|
||||
|
||||
|
||||
|
@ -664,12 +731,23 @@ public class ClassViewer extends JPanel {
|
|||
.setSyntaxEditingStyle(SyntaxConstants.SYNTAX_STYLE_JAVA);
|
||||
bytecodeArea.setCodeFoldingEnabled(true);
|
||||
bytecodeArea.setAntiAliasingEnabled(true);
|
||||
RTextScrollPane bytecodeSPane = new RTextScrollPane(
|
||||
RTextScrollPane scrollPane = new RTextScrollPane(
|
||||
bytecodeArea);
|
||||
bytecodeArea.setText(KrakatauDisassembler.decompileClassNode(cn));
|
||||
bytecodeArea.setCaretPosition(0);
|
||||
krakatau1 = bytecodeArea;
|
||||
panel1.add(bytecodeSPane);
|
||||
krakatau1.addKeyListener(new KeyListener() {
|
||||
public void keyPressed(KeyEvent e) {
|
||||
if ((e.getKeyCode() == KeyEvent.VK_F) && ((e.getModifiers() & KeyEvent.CTRL_MASK) != 0)) {
|
||||
field1.requestFocus();
|
||||
}
|
||||
|
||||
BytecodeViewer.viewer.checkKey(e);
|
||||
}
|
||||
@Override public void keyReleased(KeyEvent arg0) { }
|
||||
@Override public void keyTyped(KeyEvent arg0) { }
|
||||
});
|
||||
panel1.add(scrollPane);
|
||||
}
|
||||
|
||||
if (pane2 == 1) {
|
||||
|
@ -682,6 +760,17 @@ public class ClassViewer extends JPanel {
|
|||
panelArea.setText(proc_dc.decompileClassNode(cn));
|
||||
panelArea.setCaretPosition(0);
|
||||
panelArea.setEditable(false);
|
||||
panelArea.addKeyListener(new KeyListener() {
|
||||
public void keyPressed(KeyEvent e) {
|
||||
if ((e.getKeyCode() == KeyEvent.VK_F) && ((e.getModifiers() & KeyEvent.CTRL_MASK) != 0)) {
|
||||
field2.requestFocus();
|
||||
}
|
||||
|
||||
BytecodeViewer.viewer.checkKey(e);
|
||||
}
|
||||
@Override public void keyReleased(KeyEvent arg0) { }
|
||||
@Override public void keyTyped(KeyEvent arg0) { }
|
||||
});
|
||||
panel2.add(scrollPane);
|
||||
}
|
||||
|
||||
|
@ -695,6 +784,17 @@ public class ClassViewer extends JPanel {
|
|||
panelArea.setText(cfr_dc.decompileClassNode(cn));
|
||||
panelArea.setCaretPosition(0);
|
||||
panelArea.setEditable(false);
|
||||
panelArea.addKeyListener(new KeyListener() {
|
||||
public void keyPressed(KeyEvent e) {
|
||||
if ((e.getKeyCode() == KeyEvent.VK_F) && ((e.getModifiers() & KeyEvent.CTRL_MASK) != 0)) {
|
||||
field2.requestFocus();
|
||||
}
|
||||
|
||||
BytecodeViewer.viewer.checkKey(e);
|
||||
}
|
||||
@Override public void keyReleased(KeyEvent arg0) { }
|
||||
@Override public void keyTyped(KeyEvent arg0) { }
|
||||
});
|
||||
panel2.add(scrollPane);
|
||||
}
|
||||
|
||||
|
@ -708,6 +808,17 @@ public class ClassViewer extends JPanel {
|
|||
panelArea.setText(ff_dc.decompileClassNode(cn));
|
||||
panelArea.setCaretPosition(0);
|
||||
panelArea.setEditable(false);
|
||||
panelArea.addKeyListener(new KeyListener() {
|
||||
public void keyPressed(KeyEvent e) {
|
||||
if ((e.getKeyCode() == KeyEvent.VK_F) && ((e.getModifiers() & KeyEvent.CTRL_MASK) != 0)) {
|
||||
field2.requestFocus();
|
||||
}
|
||||
|
||||
BytecodeViewer.viewer.checkKey(e);
|
||||
}
|
||||
@Override public void keyReleased(KeyEvent arg0) { }
|
||||
@Override public void keyTyped(KeyEvent arg0) { }
|
||||
});
|
||||
panel2.add(scrollPane);
|
||||
}
|
||||
|
||||
|
@ -720,6 +831,17 @@ public class ClassViewer extends JPanel {
|
|||
paneArea.setText(ClassNodeDecompiler.decompile(cn));
|
||||
paneArea.setCaretPosition(0);
|
||||
paneArea.setEditable(false);
|
||||
paneArea.addKeyListener(new KeyListener() {
|
||||
public void keyPressed(KeyEvent e) {
|
||||
if ((e.getKeyCode() == KeyEvent.VK_F) && ((e.getModifiers() & KeyEvent.CTRL_MASK) != 0)) {
|
||||
field2.requestFocus();
|
||||
}
|
||||
|
||||
BytecodeViewer.viewer.checkKey(e);
|
||||
}
|
||||
@Override public void keyReleased(KeyEvent arg0) { }
|
||||
@Override public void keyTyped(KeyEvent arg0) { }
|
||||
});
|
||||
panel2.add(scrollPane);
|
||||
}
|
||||
|
||||
|
@ -739,6 +861,17 @@ public class ClassViewer extends JPanel {
|
|||
paneArea.setText(SmaliDisassembler.decompileClassNode(cn));
|
||||
paneArea.setCaretPosition(0);
|
||||
smali2 = paneArea;
|
||||
paneArea.addKeyListener(new KeyListener() {
|
||||
public void keyPressed(KeyEvent e) {
|
||||
if ((e.getKeyCode() == KeyEvent.VK_F) && ((e.getModifiers() & KeyEvent.CTRL_MASK) != 0)) {
|
||||
field2.requestFocus();
|
||||
}
|
||||
|
||||
BytecodeViewer.viewer.checkKey(e);
|
||||
}
|
||||
@Override public void keyReleased(KeyEvent arg0) { }
|
||||
@Override public void keyTyped(KeyEvent arg0) { }
|
||||
});
|
||||
panel2.add(scrollPane);
|
||||
}
|
||||
|
||||
|
@ -748,11 +881,22 @@ public class ClassViewer extends JPanel {
|
|||
.setSyntaxEditingStyle(SyntaxConstants.SYNTAX_STYLE_JAVA);
|
||||
bytecodeArea.setCodeFoldingEnabled(true);
|
||||
bytecodeArea.setAntiAliasingEnabled(true);
|
||||
RTextScrollPane bytecodeSPane = new RTextScrollPane(
|
||||
RTextScrollPane scrollPane = new RTextScrollPane(
|
||||
bytecodeArea);
|
||||
bytecodeArea.setText(krak_dc.decompileClassNode(cn));
|
||||
bytecodeArea.setCaretPosition(0);
|
||||
panel2.add(bytecodeSPane);
|
||||
bytecodeArea.addKeyListener(new KeyListener() {
|
||||
public void keyPressed(KeyEvent e) {
|
||||
if ((e.getKeyCode() == KeyEvent.VK_F) && ((e.getModifiers() & KeyEvent.CTRL_MASK) != 0)) {
|
||||
field2.requestFocus();
|
||||
}
|
||||
|
||||
BytecodeViewer.viewer.checkKey(e);
|
||||
}
|
||||
@Override public void keyReleased(KeyEvent arg0) { }
|
||||
@Override public void keyTyped(KeyEvent arg0) { }
|
||||
});
|
||||
panel2.add(scrollPane);
|
||||
}
|
||||
|
||||
|
||||
|
@ -763,12 +907,23 @@ public class ClassViewer extends JPanel {
|
|||
.setSyntaxEditingStyle(SyntaxConstants.SYNTAX_STYLE_JAVA);
|
||||
bytecodeArea.setCodeFoldingEnabled(true);
|
||||
bytecodeArea.setAntiAliasingEnabled(true);
|
||||
RTextScrollPane bytecodeSPane = new RTextScrollPane(
|
||||
RTextScrollPane scrollPane = new RTextScrollPane(
|
||||
bytecodeArea);
|
||||
bytecodeArea.setText(KrakatauDisassembler.decompileClassNode(cn));
|
||||
bytecodeArea.setCaretPosition(0);
|
||||
krakatau2 = bytecodeArea;
|
||||
panel2.add(bytecodeSPane);
|
||||
krakatau2.addKeyListener(new KeyListener() {
|
||||
public void keyPressed(KeyEvent e) {
|
||||
if ((e.getKeyCode() == KeyEvent.VK_F) && ((e.getModifiers() & KeyEvent.CTRL_MASK) != 0)) {
|
||||
field2.requestFocus();
|
||||
}
|
||||
|
||||
BytecodeViewer.viewer.checkKey(e);
|
||||
}
|
||||
@Override public void keyReleased(KeyEvent arg0) { }
|
||||
@Override public void keyTyped(KeyEvent arg0) { }
|
||||
});
|
||||
panel2.add(scrollPane);
|
||||
}
|
||||
|
||||
if (pane3 == 1) {
|
||||
|
@ -781,6 +936,17 @@ public class ClassViewer extends JPanel {
|
|||
panelArea.setText(proc_dc.decompileClassNode(cn));
|
||||
panelArea.setCaretPosition(0);
|
||||
panelArea.setEditable(false);
|
||||
panelArea.addKeyListener(new KeyListener() {
|
||||
public void keyPressed(KeyEvent e) {
|
||||
if ((e.getKeyCode() == KeyEvent.VK_F) && ((e.getModifiers() & KeyEvent.CTRL_MASK) != 0)) {
|
||||
field3.requestFocus();
|
||||
}
|
||||
|
||||
BytecodeViewer.viewer.checkKey(e);
|
||||
}
|
||||
@Override public void keyReleased(KeyEvent arg0) { }
|
||||
@Override public void keyTyped(KeyEvent arg0) { }
|
||||
});
|
||||
panel3.add(scrollPane);
|
||||
}
|
||||
|
||||
|
@ -794,6 +960,17 @@ public class ClassViewer extends JPanel {
|
|||
panelArea.setText(cfr_dc.decompileClassNode(cn));
|
||||
panelArea.setCaretPosition(0);
|
||||
panelArea.setEditable(false);
|
||||
panelArea.addKeyListener(new KeyListener() {
|
||||
public void keyPressed(KeyEvent e) {
|
||||
if ((e.getKeyCode() == KeyEvent.VK_F) && ((e.getModifiers() & KeyEvent.CTRL_MASK) != 0)) {
|
||||
field3.requestFocus();
|
||||
}
|
||||
|
||||
BytecodeViewer.viewer.checkKey(e);
|
||||
}
|
||||
@Override public void keyReleased(KeyEvent arg0) { }
|
||||
@Override public void keyTyped(KeyEvent arg0) { }
|
||||
});
|
||||
panel3.add(scrollPane);
|
||||
}
|
||||
|
||||
|
@ -807,6 +984,17 @@ public class ClassViewer extends JPanel {
|
|||
panelArea.setText(ff_dc.decompileClassNode(cn));
|
||||
panelArea.setCaretPosition(0);
|
||||
panelArea.setEditable(false);
|
||||
panelArea.addKeyListener(new KeyListener() {
|
||||
public void keyPressed(KeyEvent e) {
|
||||
if ((e.getKeyCode() == KeyEvent.VK_F) && ((e.getModifiers() & KeyEvent.CTRL_MASK) != 0)) {
|
||||
field3.requestFocus();
|
||||
}
|
||||
|
||||
BytecodeViewer.viewer.checkKey(e);
|
||||
}
|
||||
@Override public void keyReleased(KeyEvent arg0) { }
|
||||
@Override public void keyTyped(KeyEvent arg0) { }
|
||||
});
|
||||
panel3.add(scrollPane);
|
||||
}
|
||||
|
||||
|
@ -819,6 +1007,17 @@ public class ClassViewer extends JPanel {
|
|||
paneArea.setText(ClassNodeDecompiler.decompile(cn));
|
||||
paneArea.setCaretPosition(0);
|
||||
paneArea.setEditable(false);
|
||||
paneArea.addKeyListener(new KeyListener() {
|
||||
public void keyPressed(KeyEvent e) {
|
||||
if ((e.getKeyCode() == KeyEvent.VK_F) && ((e.getModifiers() & KeyEvent.CTRL_MASK) != 0)) {
|
||||
field3.requestFocus();
|
||||
}
|
||||
|
||||
BytecodeViewer.viewer.checkKey(e);
|
||||
}
|
||||
@Override public void keyReleased(KeyEvent arg0) { }
|
||||
@Override public void keyTyped(KeyEvent arg0) { }
|
||||
});
|
||||
panel3.add(scrollPane);
|
||||
}
|
||||
|
||||
|
@ -838,6 +1037,17 @@ public class ClassViewer extends JPanel {
|
|||
paneArea.setText(SmaliDisassembler.decompileClassNode(cn));
|
||||
paneArea.setCaretPosition(0);
|
||||
smali3 = paneArea;
|
||||
smali3.addKeyListener(new KeyListener() {
|
||||
public void keyPressed(KeyEvent e) {
|
||||
if ((e.getKeyCode() == KeyEvent.VK_F) && ((e.getModifiers() & KeyEvent.CTRL_MASK) != 0)) {
|
||||
field3.requestFocus();
|
||||
}
|
||||
|
||||
BytecodeViewer.viewer.checkKey(e);
|
||||
}
|
||||
@Override public void keyReleased(KeyEvent arg0) { }
|
||||
@Override public void keyTyped(KeyEvent arg0) { }
|
||||
});
|
||||
panel3.add(scrollPane);
|
||||
}
|
||||
|
||||
|
@ -847,11 +1057,22 @@ public class ClassViewer extends JPanel {
|
|||
.setSyntaxEditingStyle(SyntaxConstants.SYNTAX_STYLE_JAVA);
|
||||
bytecodeArea.setCodeFoldingEnabled(true);
|
||||
bytecodeArea.setAntiAliasingEnabled(true);
|
||||
RTextScrollPane bytecodeSPane = new RTextScrollPane(
|
||||
RTextScrollPane scrollPane = new RTextScrollPane(
|
||||
bytecodeArea);
|
||||
bytecodeArea.setText(krak_dc.decompileClassNode(cn));
|
||||
bytecodeArea.setCaretPosition(0);
|
||||
panel3.add(bytecodeSPane);
|
||||
bytecodeArea.addKeyListener(new KeyListener() {
|
||||
public void keyPressed(KeyEvent e) {
|
||||
if ((e.getKeyCode() == KeyEvent.VK_F) && ((e.getModifiers() & KeyEvent.CTRL_MASK) != 0)) {
|
||||
field3.requestFocus();
|
||||
}
|
||||
|
||||
BytecodeViewer.viewer.checkKey(e);
|
||||
}
|
||||
@Override public void keyReleased(KeyEvent arg0) { }
|
||||
@Override public void keyTyped(KeyEvent arg0) { }
|
||||
});
|
||||
panel3.add(scrollPane);
|
||||
}
|
||||
|
||||
|
||||
|
@ -862,12 +1083,23 @@ public class ClassViewer extends JPanel {
|
|||
.setSyntaxEditingStyle(SyntaxConstants.SYNTAX_STYLE_JAVA);
|
||||
bytecodeArea.setCodeFoldingEnabled(true);
|
||||
bytecodeArea.setAntiAliasingEnabled(true);
|
||||
RTextScrollPane bytecodeSPane = new RTextScrollPane(
|
||||
RTextScrollPane scrollPane = new RTextScrollPane(
|
||||
bytecodeArea);
|
||||
bytecodeArea.setText(KrakatauDisassembler.decompileClassNode(cn));
|
||||
bytecodeArea.setCaretPosition(0);
|
||||
krakatau3 = bytecodeArea;
|
||||
panel3.add(bytecodeSPane);
|
||||
krakatau3.addKeyListener(new KeyListener() {
|
||||
public void keyPressed(KeyEvent e) {
|
||||
if ((e.getKeyCode() == KeyEvent.VK_F) && ((e.getModifiers() & KeyEvent.CTRL_MASK) != 0)) {
|
||||
field3.requestFocus();
|
||||
}
|
||||
|
||||
BytecodeViewer.viewer.checkKey(e);
|
||||
}
|
||||
@Override public void keyReleased(KeyEvent arg0) { }
|
||||
@Override public void keyTyped(KeyEvent arg0) { }
|
||||
});
|
||||
panel3.add(scrollPane);
|
||||
}
|
||||
|
||||
resetDivider();
|
||||
|
|
|
@ -374,11 +374,17 @@ public class MainViewerGUI extends JFrame implements FileChangeNotifier {
|
|||
}
|
||||
|
||||
private class Test implements KeyEventDispatcher {
|
||||
long last = System.currentTimeMillis();
|
||||
@Override
|
||||
public boolean dispatchKeyEvent(KeyEvent e) {
|
||||
if(System.currentTimeMillis() - last <= (1000 * 4))
|
||||
checkKey(e);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
long last = System.currentTimeMillis();
|
||||
public void checkKey(KeyEvent e) {
|
||||
if(System.currentTimeMillis() - last <= (1000 * 4))
|
||||
return;
|
||||
|
||||
if ((e.getKeyCode() == KeyEvent.VK_O) && ((e.getModifiers() & KeyEvent.CTRL_MASK) != 0)) {
|
||||
last = System.currentTimeMillis();
|
||||
|
@ -407,8 +413,6 @@ public class MainViewerGUI extends JFrame implements FileChangeNotifier {
|
|||
last = System.currentTimeMillis();
|
||||
BytecodeViewer.resetWorkSpace(true);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
ImageIcon busy = new ImageIcon(getClass().getResource("/resources/1.gif"));
|
||||
|
@ -436,6 +440,10 @@ public class MainViewerGUI extends JFrame implements FileChangeNotifier {
|
|||
public final JRadioButtonMenuItem panel3Krakatau = new JRadioButtonMenuItem("Krakatau");
|
||||
public final JRadioButtonMenuItem panel3KrakatauEditable = new JRadioButtonMenuItem("Krakatau Editable");
|
||||
private final JMenuItem mntmSetJreRt = new JMenuItem("Set JRE RT Library");
|
||||
private final JSeparator separator_14 = new JSeparator();
|
||||
private final JCheckBoxMenuItem chckbxmntmPaneEditable = new JCheckBoxMenuItem("Pane 1 Editable");
|
||||
private final JCheckBoxMenuItem chckbxmntmPaneEditable_1 = new JCheckBoxMenuItem("Pane 2 Editable");
|
||||
private final JCheckBoxMenuItem chckbxmntmPaneEditable_2 = new JCheckBoxMenuItem("Pane 3 Editable");
|
||||
public void setIcon(final boolean busy) {
|
||||
SwingUtilities.invokeLater(new Runnable() {
|
||||
public void run() {
|
||||
|
@ -525,6 +533,8 @@ public class MainViewerGUI extends JFrame implements FileChangeNotifier {
|
|||
panel1Bytecode.addActionListener(listener);
|
||||
panel1Smali.addActionListener(listener);
|
||||
panel1Hexcode.addActionListener(listener);
|
||||
panel1Krakatau.addActionListener(listener);
|
||||
panel1KrakatauEditable.addActionListener(listener);
|
||||
panel2None.addActionListener(listener);
|
||||
panel2Fern.addActionListener(listener);
|
||||
panel2Proc.addActionListener(listener);
|
||||
|
@ -532,6 +542,8 @@ public class MainViewerGUI extends JFrame implements FileChangeNotifier {
|
|||
panel2Bytecode.addActionListener(listener);
|
||||
panel2Smali.addActionListener(listener);
|
||||
panel2Hexcode.addActionListener(listener);
|
||||
panel2Krakatau.addActionListener(listener);
|
||||
panel2KrakatauEditable.addActionListener(listener);
|
||||
panel3None.addActionListener(listener);
|
||||
panel3Fern.addActionListener(listener);
|
||||
panel3Proc.addActionListener(listener);
|
||||
|
@ -539,6 +551,8 @@ public class MainViewerGUI extends JFrame implements FileChangeNotifier {
|
|||
panel3Bytecode.addActionListener(listener);
|
||||
panel3Smali.addActionListener(listener);
|
||||
panel3Hexcode.addActionListener(listener);
|
||||
panel3Krakatau.addActionListener(listener);
|
||||
panel3KrakatauEditable.addActionListener(listener);
|
||||
obfuscatorGroup.add(strongObf);
|
||||
obfuscatorGroup.add(lightObf);
|
||||
obfuscatorGroup.setSelected(strongObf.getModel(), true);
|
||||
|
@ -562,7 +576,9 @@ public class MainViewerGUI extends JFrame implements FileChangeNotifier {
|
|||
public void actionPerformed(ActionEvent e) {
|
||||
JFileChooser fc = new JFileChooser();
|
||||
try {
|
||||
fc.setSelectedFile(new File(BytecodeViewer.lastDirectory));
|
||||
File f = new File(BytecodeViewer.lastDirectory);
|
||||
if(f.exists())
|
||||
fc.setSelectedFile(f);
|
||||
} catch(Exception e2) {
|
||||
|
||||
}
|
||||
|
@ -1054,6 +1070,14 @@ public class MainViewerGUI extends JFrame implements FileChangeNotifier {
|
|||
|
||||
menuBar.add(mnNewMenu_6);
|
||||
|
||||
mnNewMenu_6.add(chckbxmntmPaneEditable);
|
||||
|
||||
mnNewMenu_6.add(chckbxmntmPaneEditable_1);
|
||||
|
||||
mnNewMenu_6.add(chckbxmntmPaneEditable_2);
|
||||
|
||||
mnNewMenu_6.add(separator_14);
|
||||
|
||||
mnNewMenu_6.add(mnNewMenu_7);
|
||||
|
||||
mnNewMenu_7.add(panel1None);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue