2.9.7 release

07/02/2015 - Added ajustable font size.
07/05/2015 - Started working on the new Boot Screen.
07/06/2015 - Moved the font size to be under the view menu.
07/06/2015 - Fixed a bug with plugins not being able to grab the
currently viewed class.
07/07/2015 - Started adding enjarify as an optional APK converter
instead of Dex2Jar.
07/07/2015 - Finished the new Boot Screen
07/09/2015 - Fixed a process leak with krakatau decompiler.
07/09/2015 - Finished adding enjarify.
07/09/2015 - Supressed syntax exceptions due to JD-GUI.
07/09/2015 - Fixed refresh on non-refreshable resources.
07/09/2015 - Fixed opening a class and the name is so big, you cannot
close because the [X] does not appear.
07/09/2015 - Added support for smaller screens for the boot screen.
07/16/2015 - Removed the FileFilter classes.
07/16/2015 - Updated the decompiler class to make more sense.
07/16/2015 - Started working on BCV CLI.
07/16/2015 - Finished BCV CLI.
This commit is contained in:
Konloch 2015-07-18 19:00:58 -06:00
parent fecc98f2f9
commit 3784629fbf
17 changed files with 72 additions and 61 deletions

Binary file not shown.

View file

@ -361,7 +361,7 @@ Changelog:
04/21/2015 - Changed 'View Panes' to simply 'View'. 04/21/2015 - Changed 'View Panes' to simply 'View'.
--- 2.9.5 ---: --- 2.9.5 ---:
05/01/2015 - Added 'pingback' for statistics (to track how many people globally use BCV) 05/01/2015 - Added 'pingback' for statistics (to track how many people globally use BCV)
-----2.9.6-----: --- 2.9.6 ---:
05/05/2015 - Fixed a typo in the about window 05/05/2015 - Fixed a typo in the about window
05/28/2015 - Started importing JD-GUI Decompiler. 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 - Compile on refresh and compile on save are now enabled by default.
@ -369,3 +369,20 @@ Changelog:
06/24/2015 - Fixed a logic error with the Field & Method searchers. 06/24/2015 - Fixed a logic error with the Field & Method searchers.
06/26/2015 - Updated Procyon & CFR to their latest versions. 06/26/2015 - Updated Procyon & CFR to their latest versions.
07/02/2015 - Added JD-GUI Decompiler. - Huge thanks to the guys behind JD-GUI! <3 (FIVE DECOMPILERS NOW LOL) 07/02/2015 - Added JD-GUI Decompiler. - Huge thanks to the guys behind JD-GUI! <3 (FIVE DECOMPILERS NOW LOL)
--- 2.9.7 ---:
07/02/2015 - Added ajustable font size.
07/05/2015 - Started working on the new Boot Screen.
07/06/2015 - Moved the font size to be under the view menu.
07/06/2015 - Fixed a bug with plugins not being able to grab the currently viewed class.
07/07/2015 - Started adding enjarify as an optional APK converter instead of Dex2Jar.
07/07/2015 - Finished the new Boot Screen
07/09/2015 - Fixed a process leak with krakatau decompiler.
07/09/2015 - Finished adding enjarify.
07/09/2015 - Supressed syntax exceptions due to JD-GUI.
07/09/2015 - Fixed refresh on non-refreshable resources.
07/09/2015 - Fixed opening a class and the name is so big, you cannot close because the [X] does not appear.
07/09/2015 - Added support for smaller screens for the boot screen.
07/16/2015 - Removed the FileFilter classes.
07/16/2015 - Updated the decompiler class to make more sense.
07/16/2015 - Started working on BCV CLI.
07/16/2015 - Finished BCV CLI.

Binary file not shown.

BIN
libs/apktool_2.0.1_obf.jar Normal file

Binary file not shown.

BIN
libs/fernflower2015-1.jar Normal file

Binary file not shown.

Binary file not shown.

View file

@ -86,9 +86,10 @@ import the.bytecode.club.bytecodeviewer.plugin.PluginManager;
* add stackmapframes to bytecode decompiler * add stackmapframes to bytecode decompiler
* add stackmapframes remover? * add stackmapframes remover?
* make ez-injection plugin console show all sys.out calls * make ez-injection plugin console show all sys.out calls
* Command line parameter to save source
* add JEB decompiler optionally, requires them to add jeb library jar externally and disable update check * add JEB decompiler optionally, requires them to add jeb library jar externally and disable update check
* add decompile as zip for krakatau-bytecode and smali for CLI * add decompile as zip for krakatau-bytecode, jd-gui and smali for CLI
* fix hook inject for EZ-Injection
* fix classfile searcher
* *
* -----2.9.7-----: * -----2.9.7-----:
* 07/02/2015 - Added ajustable font size. * 07/02/2015 - Added ajustable font size.
@ -116,7 +117,7 @@ public class BytecodeViewer {
/*per version*/ /*per version*/
public static String version = "2.9.7"; public static String version = "2.9.7";
public static boolean previewCopy = true; public static boolean previewCopy = false;
/*the rest*/ /*the rest*/
public static MainViewerGUI viewer = null; public static MainViewerGUI viewer = null;
public static ClassNodeLoader loader = new ClassNodeLoader(); //might be insecure due to assholes targeting BCV, however that's highly unlikely. public static ClassNodeLoader loader = new ClassNodeLoader(); //might be insecure due to assholes targeting BCV, however that's highly unlikely.
@ -145,8 +146,7 @@ public class BytecodeViewer {
public static boolean runningObfuscation = false; public static boolean runningObfuscation = false;
private static long start = System.currentTimeMillis(); private static long start = System.currentTimeMillis();
public static String lastDirectory = ""; public static String lastDirectory = "";
public static ArrayList<Process> krakatau = new ArrayList<Process>(); public static ArrayList<Process> createdProcesses = new ArrayList<Process>();
public static ArrayList<Process> enjarify = new ArrayList<Process>();
public static Refactorer refactorer = new Refactorer(); public static Refactorer refactorer = new Refactorer();
public static boolean pingback = false; public static boolean pingback = false;
public static boolean deleteForiegnLibraries = true; public static boolean deleteForiegnLibraries = true;
@ -396,10 +396,8 @@ public class BytecodeViewer {
Runtime.getRuntime().addShutdownHook(new Thread() { Runtime.getRuntime().addShutdownHook(new Thread() {
@Override @Override
public void run() { public void run() {
for(Process krakatau : krakatau) for(Process proc : createdProcesses)
krakatau.destroy(); proc.destroy();
for(Process enjarify : enjarify)
enjarify.destroy();
Settings.saveGUI(); Settings.saveGUI();
cleanup(); cleanup();
} }

View file

@ -82,6 +82,7 @@ public class CommandLineInput {
"-decompiler <decompiler> Selects the decompiler, procyon by default", "-decompiler <decompiler> Selects the decompiler, procyon by default",
"-i <input file> Selects the input file", "-i <input file> Selects the input file",
"-o <output file> Selects the output file", "-o <output file> Selects the output file",
"-t <target classname> Must either be the fully qualified classname or \"all\" to decompile all as zip",
"-nowait Doesn't wait for the user to read the CLI messages" "-nowait Doesn't wait for the user to read the CLI messages"
}) })
System.out.println(s); System.out.println(s);
@ -302,7 +303,8 @@ public class CommandLineInput {
Thread.sleep(5 * 1000); Thread.sleep(5 * 1000);
if(target.equalsIgnoreCase("all")) { if(target.equalsIgnoreCase("all")) {
Decompiler.jdgui.decompileToZip(output.getAbsolutePath()); System.out.println("Coming soon.");
//Decompiler.jdgui.decompileToZip(output.getAbsolutePath());
} else { } else {
try { try {
ClassNode cn = BytecodeViewer.getClassNode(target); ClassNode cn = BytecodeViewer.getClassNode(target);

View file

@ -40,7 +40,7 @@ public class Enjarify {
pb.directory(new File(BytecodeViewer.enjarifyWorkingDirectory)); pb.directory(new File(BytecodeViewer.enjarifyWorkingDirectory));
Process process = pb.start(); Process process = pb.start();
BytecodeViewer.enjarify.add(process); BytecodeViewer.createdProcesses.add(process);
//Read out dir output //Read out dir output
InputStream is = process.getInputStream(); InputStream is = process.getInputStream();
@ -96,7 +96,7 @@ public class Enjarify {
Process process = pb.start(); Process process = pb.start();
BytecodeViewer.enjarify.add(process); BytecodeViewer.createdProcesses.add(process);
//Read out dir output //Read out dir output
InputStream is = process.getInputStream(); InputStream is = process.getInputStream();

View file

@ -54,7 +54,7 @@ public class KrakatauAssembler extends Compiler {
); );
Process process = pb.start(); Process process = pb.start();
BytecodeViewer.krakatau.add(process); BytecodeViewer.createdProcesses.add(process);
//Read out dir output //Read out dir output
InputStream is = process.getInputStream(); InputStream is = process.getInputStream();

View file

@ -65,7 +65,7 @@ public class KrakatauDecompiler extends Decompiler {
); );
Process process = pb.start(); Process process = pb.start();
BytecodeViewer.krakatau.add(process); BytecodeViewer.createdProcesses.add(process);
//Read out dir output //Read out dir output
InputStream is = process.getInputStream(); InputStream is = process.getInputStream();
@ -138,7 +138,7 @@ public class KrakatauDecompiler extends Decompiler {
); );
Process process = pb.start(); Process process = pb.start();
BytecodeViewer.krakatau.add(process); BytecodeViewer.createdProcesses.add(process);
//Read out dir output //Read out dir output
InputStream is = process.getInputStream(); InputStream is = process.getInputStream();

View file

@ -51,7 +51,7 @@ public class KrakatauDisassembler extends Decompiler {
); );
Process process = pb.start(); Process process = pb.start();
BytecodeViewer.krakatau.add(process); BytecodeViewer.createdProcesses.add(process);
//Read out dir output //Read out dir output
InputStream is = process.getInputStream(); InputStream is = process.getInputStream();
@ -119,7 +119,7 @@ public class KrakatauDisassembler extends Decompiler {
); );
Process process = pb.start(); Process process = pb.start();
BytecodeViewer.krakatau.add(process); BytecodeViewer.createdProcesses.add(process);
//Read out dir output //Read out dir output
InputStream is = process.getInputStream(); InputStream is = process.getInputStream();

View file

@ -12,6 +12,7 @@ import the.bytecode.club.bytecodeviewer.BytecodeViewer;
import the.bytecode.club.bytecodeviewer.Resources; import the.bytecode.club.bytecodeviewer.Resources;
import java.awt.Color; import java.awt.Color;
import javax.swing.JScrollPane;
/** /**
* The about frame. * The about frame.
@ -21,17 +22,19 @@ import java.awt.Color;
*/ */
public class AboutWindow extends JFrame { public class AboutWindow extends JFrame {
JTextArea txtrBytecodeViewerIs = new JTextArea(); JTextArea textArea = new JTextArea();
public AboutWindow() { public AboutWindow() {
this.setIconImages(Resources.iconList); this.setIconImages(Resources.iconList);
setSize(Toolkit.getDefaultToolkit().getScreenSize()); setSize(Toolkit.getDefaultToolkit().getScreenSize());
setType(Type.UTILITY); setType(Type.UTILITY);
setTitle("Bytecode Viewer - About - https://bytecodeviewer.com | https://the.bytecode.club"); setTitle("Bytecode Viewer - About - https://bytecodeviewer.com | https://the.bytecode.club");
getContentPane().setLayout(new CardLayout(0, 0)); getContentPane().setLayout(new CardLayout(0, 0));
JScrollPane scrollPane = new JScrollPane();
txtrBytecodeViewerIs.setDisabledTextColor(Color.BLACK); getContentPane().add(scrollPane, "name_322439757638784");
txtrBytecodeViewerIs.setWrapStyleWord(true); textArea.setWrapStyleWord(true);
getContentPane().add(txtrBytecodeViewerIs, "name_140466526081695");txtrBytecodeViewerIs.setEnabled(false); textArea.setEnabled(false);
textArea.setDisabledTextColor(Color.BLACK);
scrollPane.setViewportView(textArea);
this.setResizable(false); this.setResizable(false);
this.setLocationRelativeTo(null); this.setLocationRelativeTo(null);
} }
@ -39,20 +42,27 @@ public class AboutWindow extends JFrame {
@Override @Override
public void setVisible(boolean b) { public void setVisible(boolean b) {
super.setVisible(b); super.setVisible(b);
txtrBytecodeViewerIs.setFont(new Font(Font.MONOSPACED, Font.PLAIN, (int)BytecodeViewer.viewer.fontSpinner.getValue())); textArea.setFont(new Font(Font.MONOSPACED, Font.PLAIN, (int)BytecodeViewer.viewer.fontSpinner.getValue()));
txtrBytecodeViewerIs textArea.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 CopyLeft\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 2.7 (or PyPy): " + BytecodeViewer.python+BytecodeViewer.nl+ " Python 2.7 (or PyPy): " + BytecodeViewer.python+BytecodeViewer.nl+
"Python 3.0 (or PyPy): " + BytecodeViewer.python3+BytecodeViewer.nl+ " Python 3.X (or PyPy): " + BytecodeViewer.python3+BytecodeViewer.nl+
" RT.jar:" + BytecodeViewer.rt+BytecodeViewer.nl+ " RT.jar:" + BytecodeViewer.rt+BytecodeViewer.nl+
" Optional Lib: " + BytecodeViewer.library+BytecodeViewer.nl+ " Optional Lib: " + BytecodeViewer.library+BytecodeViewer.nl+
" BCV Krakatau: v" + BytecodeViewer.krakatauVersion+BytecodeViewer.nl+ " BCV Krakatau: v" + BytecodeViewer.krakatauVersion+BytecodeViewer.nl+
" Krakatau Dir: " + BytecodeViewer.krakatauWorkingDirectory+BytecodeViewer.nl+ " Krakatau Dir: " + BytecodeViewer.krakatauWorkingDirectory+BytecodeViewer.nl+
" BCV Enjarify: v" + BytecodeViewer.enjarifyVersion+BytecodeViewer.nl+ " BCV Enjarify: v" + BytecodeViewer.enjarifyVersion+BytecodeViewer.nl+
" Enjarify Dir: " + BytecodeViewer.enjarifyWorkingDirectory+BytecodeViewer.nl+BytecodeViewer.nl+ " Enjarify Dir: " + BytecodeViewer.enjarifyWorkingDirectory+BytecodeViewer.nl+BytecodeViewer.nl+
"Command Line Input:"+BytecodeViewer.nl+
" -help Displays the help menu"+BytecodeViewer.nl+
" -list Displays the available decompilers"+BytecodeViewer.nl+
" -decompiler <decompiler> Selects the decompiler, procyon by default"+BytecodeViewer.nl+
" -i <input file> Selects the input file (Jar, Class, APK, ZIP, DEX all work automatically)"+BytecodeViewer.nl+
" -o <output file> Selects the output file (Java or Java-Bytecode)"+BytecodeViewer.nl+
" -t <target classname> Must either be the fully qualified classname or \"all\" to decompile all as zip"+BytecodeViewer.nl+
" -nowait Doesn't wait for the user to read the CLI messages"+BytecodeViewer.nl+BytecodeViewer.nl+
"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+

View file

@ -398,7 +398,7 @@ public class FileNavigationPane extends VisibleComponent implements
g.setColor(new Color(0, 0, 0, 100)); g.setColor(new Color(0, 0, 0, 100));
g.fillRect(0, 0, getWidth(), getHeight()); g.fillRect(0, 0, getWidth(), getHeight());
g.setColor(Color.white); g.setColor(Color.white);
String s = "Drag class/jar here"; String s = "Drag class/jar/zip/APK/DEX here";
g.drawString(s, g.drawString(s,
((int) ((getWidth() / 2) - (m.getWidth(s) / 2))), ((int) ((getWidth() / 2) - (m.getWidth(s) / 2))),
getHeight() / 2); getHeight() / 2);

View file

@ -80,22 +80,6 @@ public final class PluginManager {
if(p != null) { if(p != null) {
runPlugin(p); runPlugin(p);
} }
/*if (f.getName().endsWith(".java")) {
p = loadJavaScript(f);
}
if (f.getName().endsWith(".gy") || f.getName().endsWith(".groovy")) {
p = loadGroovyScript(f);
}
if (f.getName().endsWith(".py") || f.getName().endsWith(".python")) {
p = loadPythonScript(f);
}
if (f.getName().endsWith(".rb") || f.getName().endsWith(".ruby")) {
p = loadRubyScript(f);
}
if (p != null) {
runPlugin(p);
}*/
} }
public static void register(String name, PluginLaunchStrategy strat) { public static void register(String name, PluginLaunchStrategy strat) {
@ -122,7 +106,7 @@ public final class PluginManager {
@Override @Override
public String getDescription() { public String getDescription() {
return "Plugins"; return "BCV Plugins";
} }
} }
} }