Skip to content

Commit 0f5ef77

Browse files
committed
2.9.0
02/11/2015 - Added ZStringArray String Decrypter. (Thanks Righteous) 02/20/2015 - Moved the decompilers/disassemblers around. 02/20/2015 - Fixed a resource leak with Krakatau Decompiler/Disassembler/Assembler. 02/21/2015 - Fixed regex searching if your regex search contained a syntax error. 02/21/2015 - Added the compiler/decompiler instances to the BytecodeViewer API class. 02/21/2015 - Sped up the decompilers, each view pane runs its own decompiler thread. 02/21/2015 - Added Janino compiler, you can now compile the decompiled source code inside of BCV. 02/21/2015 - Added the editable option for almost all of the decompilers/disassemblers. 02/21/2015 - Cached the next/previous icons and added a resources class for all resources. 01/21/2015 - Renamed EZ-Injection as File-Run, however kept the plugin named EZ-Injection. 02/21/2015 - Dropped Groovy support, added .Java plugin compilation instead (now only 10mb). 02/21/2015 - Added support for reading resources, including displaying images, detecting pure ascii files and more. 02/21/2015 - Fixed an issue with loading an already selected node in the file navigation pane. 02/22/2015 - Added an error console to the Java compiler 02/22/2015 - Ensured the spawned Python/Krakatau processes are killed when closing BCV. 02/22/2015 - Made it more beginner friendly. 02/22/2015 - Fixed? The file navigation search. 02/22/2015 - Added a shit ton more comments to non-api related classes. 02/23/2015 - Added APK resources. 02/23/2015 - MORE ANDROID LOVE! Added APKTool.jar's decode. (Takes a while so it's a setting, also pumped the jar back to 16MB) 02/23/2015 - Added close all but this tab menu. 02/23/2015 - Not really code related, but added _install.bat and _uninstall.bat for the exe version of BCV. 02/23/2015 - Back to ASM5, packed dex2jar in its own obfuscated jar. 02/23/2015 - Added the annotations back to the Bytecode Decompiler. (Once again, thanks Bibl) 02/23/2015 - It once again works with Java 8 Jars.
1 parent bde746b commit 0f5ef77

File tree

160 files changed

+39653
-1173
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

160 files changed

+39653
-1173
lines changed

BCV Icon.ico

14.7 KB
Binary file not shown.

BytecodeViewer 2.9.0.jar

15.3 MB
Binary file not shown.
Binary file not shown.

README.txt

Lines changed: 28 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ Key Features:
4949
Java Decompiler - It utilizes FernFlower, Procyon and CFR for decompilation.
5050
Bytecode Decompiler - A modified version of CFIDE's.
5151
Hex Viewer - Powered by JHexPane.
52-
Each Decompiler/Viewer is toggleable, you can also select what will display on each pane.
52+
Each Decompiler/Editor/Viewer is toggleable, you can also select what will display on each pane.
5353
Fully Featured Search System - Search through strings, functions, variables and more!
5454
A Plugin System With Built In Plugins - (Show All Strings, Malicious Code Scanner, String Decrypters, etc)
5555
Fully Featured Scripting System That Supports Groovy.
@@ -292,4 +292,30 @@ Changelog:
292292
02/04/2015 - Added Krakatau Assembly.
293293
--- 2.8.1 ---:
294294
02/04/2015 - Fixed UI bug with Krakatau/Krakatau Editable view panes.
295-
02/05/2015 - Added CTRL + F.
295+
02/05/2015 - Added CTRL + F.
296+
--- 2.9.0 ---:
297+
02/11/2015 - Added ZStringArray String Decrypter. (Thanks Righteous)
298+
02/20/2015 - Moved the decompilers/disassemblers around.
299+
02/20/2015 - Fixed a resource leak with Krakatau Decompiler/Disassembler/Assembler.
300+
02/21/2015 - Fixed regex searching if your regex search contained a syntax error.
301+
02/21/2015 - Added the compiler/decompiler instances to the BytecodeViewer API class.
302+
02/21/2015 - Sped up the decompilers, each view pane runs its own decompiler thread.
303+
02/21/2015 - Added Janino compiler, you can now compile the decompiled source code inside of BCV.
304+
02/21/2015 - Added the editable option for almost all of the decompilers/disassemblers.
305+
02/21/2015 - Cached the next/previous icons and added a resources class for all resources.
306+
01/21/2015 - Renamed EZ-Injection as File-Run, however kept the plugin named EZ-Injection.
307+
02/21/2015 - Dropped Groovy support, added .Java plugin compilation instead (now only 10mb).
308+
02/21/2015 - Added support for reading resources, including displaying images, detecting pure ascii files and more.
309+
02/21/2015 - Fixed an issue with loading an already selected node in the file navigation pane.
310+
02/22/2015 - Added an error console to the Java compiler
311+
02/22/2015 - Ensured the spawned Python/Krakatau processes are killed when closing BCV.
312+
02/22/2015 - Made it more beginner friendly.
313+
02/22/2015 - Fixed? The file navigation search.
314+
02/22/2015 - Added a shit ton more comments to non-api related classes.
315+
02/23/2015 - Added APK resources.
316+
02/23/2015 - MORE ANDROID LOVE! Added APKTool.jar's decode. (Takes a while so it's a setting, also pumped the jar back to 16MB)
317+
02/23/2015 - Added close all but this tab menu.
318+
02/23/2015 - Not really code related, but added _install.bat and _uninstall.bat for the exe version of BCV.
319+
02/23/2015 - Back to ASM5, packed dex2jar in its own obfuscated jar.
320+
02/23/2015 - Added the annotations back to the Bytecode Decompiler. (Once again, thanks Bibl)
321+
02/23/2015 - It once again works with Java 8 Jars.

_install BCV.bat

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
@echo off
2+
assoc .class=BCV
3+
assoc .apk=BCV
4+
assoc .dex=BCV
5+
ftype BCV="%CD%\BytecodeViewer.exe" "%%1"
6+
echo.
7+
echo.
8+
echo Installed, .class, .apk and .dex will be associated with BytecodeViwer.exe
9+
echo.
10+
echo Note, if you move BytecodeViewer.exe
11+
echo you'll need to re-run this program in the same directory as it.
12+
echo.
13+
echo.
14+
pause

_uninstall BCV.bat

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
@echo off
2+
assoc .class=
3+
assoc .apk=
4+
assoc .dex=
5+
echo.
6+
echo.
7+
echo Uninstalled, .class, .apk and .dex will no longer be associated.
8+
echo.
9+
echo.
10+
pause

jar2exe_config.j2e

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
"C:\Program Files\Jar2Exe Wizard\j2ewiz" /jar "C:\Users\null\Documents\GitHub\bytecode-viewer\BytecodeViewer 2.9.0.jar" /o C:\Users\null\Documents\GitHub\bytecode-viewer\BytecodeViewer.exe /m the.bytecode.club.bytecodeviewer.BytecodeViewer /type windows /minjre 1.7 /platform windows /checksum /icon "C:\Users\null\Documents\GitHub\bytecode-viewer\BCV Icon.ico, 0" /pv 1,0,0,1 /fv 1,0,0,1 /ve ProductVersion=1.9.0 /ve "ProductName=The Bytecode Club" /ve "LegalCopyright=Copyright (c) 2014 - 2015 Kalen (Konloch) Kinloch" /ve "SpecialBuild=1, 0, 0, 1" /ve FileVersion=1 /ve "FileDescription=Java Reverse Engineering Suite" /ve "LegalTrademarks=Trade marks" /ve "InternalName=1, 0, 0, 1" /ve "CompanyName=The Bytecode Club"

libs/apktool_2.0.0rc4_obf.jar

5.16 MB
Binary file not shown.

libs/asm-all-3.3.1.jar

-202 KB
Binary file not shown.

libs/asm-all-5.0.3.jar

236 KB
Binary file not shown.

libs/commons-compiler-jdk.jar

45.7 KB
Binary file not shown.

libs/commons-compiler.jar

29.9 KB
Binary file not shown.

libs/dex-ir-1.12.jar

-124 KB
Binary file not shown.

libs/dex-reader-1.15.jar

-108 KB
Binary file not shown.

libs/dex-tools-0.0.9.15.jar

-66.2 KB
Binary file not shown.

libs/dex-translator-0.0.9.15.jar

-70.1 KB
Binary file not shown.

libs/dex_obf.jar

823 KB
Binary file not shown.

libs/dx.jar

-966 KB
Binary file not shown.

libs/groovy-all-2.1.7.jar

-6.08 MB
Binary file not shown.

plugins/EldevinStringDecrypter.gy

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
import the.bytecode.club.bytecodeviewer.api.*;
2+
import java.util.ArrayList;
3+
import org.objectweb.asm.tree.ClassNode;
4+
import javax.swing.JDialog;
5+
import javax.swing.JOptionPane;
6+
import java.lang.reflect.Field;
7+
import org.objectweb.asm.tree.FieldNode;
8+
9+
public class EldevinStringDecrypter extends Plugin {
10+
11+
@Override
12+
public void execute(ArrayList<ClassNode> classNodesList) {
13+
PluginConsole gui = new PluginConsole("Eldevin String Decrypter");
14+
15+
JOptionPane pane = new JOptionPane("WARNING: This method of decryption loads the classes into a classloader and executes the init function, this could lead to malicious code executing.\n\r\n\rAre you sure you want to run this plugin?");
16+
String[] options = ["Yes", "No"];
17+
pane.setOptions(options);
18+
JDialog dialog = pane.createDialog(the.bytecode.club.bytecodeviewer.BytecodeViewer.viewer, "WARNING");
19+
dialog.show();
20+
Object obj = pane.getValue();
21+
int result = -1;
22+
for (int k = 0; k < options.length; k++)
23+
if (options[k].equals(obj))
24+
result = k;
25+
26+
27+
if(result == 0) {
28+
for(ClassNode cn : classNodesList) {
29+
the.bytecode.club.bytecodeviewer.api.BytecodeViewer.getClassNodeLoader().addClass(cn);
30+
31+
for(Object o : cn.fields.toArray()) {
32+
FieldNode f = (FieldNode) o;
33+
if(f.name.equals("z")) {// && f.desc.equals("([Ljava/lang/String;)V")) {
34+
try {
35+
for(Field f2 : the.bytecode.club.bytecodeviewer.api.BytecodeViewer.getClassNodeLoader().nodeToClass(cn).getFields()) {
36+
String s = f2.get(null);
37+
if(s != null && !s.empty())
38+
gui.appendText(cn+":"+s);
39+
}
40+
} catch(Exception | StackOverflowError e) {}
41+
}
42+
}
43+
44+
}
45+
46+
gui.setVisible(true);
47+
}
48+
}
49+
}

plugins/Skeleton.rb

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
require 'java'
2+
3+
java_import 'the.bytecode.club.bytecodeviewer.api.Plugin'
4+
java_import 'the.bytecode.club.bytecodeviewer.api.PluginConsole'
5+
java_import 'java.lang.System'
6+
java_import 'java.util.ArrayList'
7+
java_import 'org.objectweb.asm.tree.ClassNode'
8+
9+
class Skeleton < Plugin
10+
def execute(classNodeList)
11+
gui = PluginConsole.new "Skeleton"
12+
gui.setVisible(true)
13+
gui.appendText("exceuted skeleton")
14+
end
15+
end

plugins/Test.gy

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
import the.bytecode.club.bytecodeviewer.api.*;
2+
import java.util.ArrayList;
3+
import org.objectweb.asm.tree.ClassNode;
4+
import the.bytecode.club.bytecodeviewer.decompilers.*;
5+
6+
public class Test extends Plugin {
7+
8+
@Override
9+
public void execute(ArrayList<ClassNode> classNodesList) {
10+
PluginConsole gui = new PluginConsole("Skeleton");
11+
gui.setVisible(true);
12+
gui.appendText(Smali.decompileClassNode(the.bytecode.club.bytecodeviewer.BytecodeViewer.viewer.workPane.getCurrentClass().cn));
13+
}
14+
}

plugins/skeleton.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
from the.bytecode.club.bytecodeviewer.api import Plugin
2+
from the.bytecode.club.bytecodeviewer.api import PluginConsole
3+
from java.lang import System
4+
from java.lang import Boolean
5+
from java.util import ArrayList
6+
from org.objectweb.asm.tree import ClassNode
7+
8+
class skeleton(Plugin):
9+
10+
def execute(classNodeList, poop): #for some reason it requires a second arg
11+
gui = PluginConsole("Skeleton")
12+
gui.setVisible(Boolean.TRUE)
13+
gui.appendText("exceuted skeleton")

src/org/codehaus/janino/Access.java

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
2+
/*
3+
* Janino - An embedded Java[TM] compiler
4+
*
5+
* Copyright (c) 2001-2010, Arno Unkrig
6+
* All rights reserved.
7+
*
8+
* Redistribution and use in source and binary forms, with or without modification, are permitted provided that the
9+
* following conditions are met:
10+
*
11+
* 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the
12+
* following disclaimer.
13+
* 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the
14+
* following disclaimer in the documentation and/or other materials provided with the distribution.
15+
* 3. The name of the author may not be used to endorse or promote products derived from this software without
16+
* specific prior written permission.
17+
*
18+
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
19+
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
20+
* THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
21+
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
22+
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
23+
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
24+
* POSSIBILITY OF SUCH DAMAGE.
25+
*/
26+
27+
package org.codehaus.janino;
28+
29+
import org.codehaus.janino.util.enumerator.Enumerator;
30+
import org.codehaus.janino.util.enumerator.EnumeratorFormatException;
31+
32+
/** Return value for {@link IClass.IMember#getAccess}. */
33+
public final
34+
class Access extends Enumerator {
35+
36+
/** Representation of PRIVATE accessibility. */
37+
public static final Access PRIVATE = new Access("private");
38+
39+
/** Representation of PROTECTED accessibility. */
40+
public static final Access PROTECTED = new Access("protected");
41+
42+
/** Representation of DEFAULT accessibility. */
43+
public static final Access DEFAULT = new Access("/*default*/");
44+
45+
/** Representation of PUBLIC accessibility. */
46+
public static final Access PUBLIC = new Access("public");
47+
48+
// These MUST be declared exactly like this:
49+
private Access(String name) { super(name); }
50+
51+
/** @return The {@code name} converted to {@link Access} */
52+
public static Access
53+
fromString(String name) throws EnumeratorFormatException {
54+
return (Access) Enumerator.fromString(name, Access.class);
55+
}
56+
}
Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
2+
/*
3+
* Janino - An embedded Java[TM] compiler
4+
*
5+
* Copyright (c) 2001-2010, Arno Unkrig
6+
* All rights reserved.
7+
*
8+
* Redistribution and use in source and binary forms, with or without modification, are permitted provided that the
9+
* following conditions are met:
10+
*
11+
* 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the
12+
* following disclaimer.
13+
* 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the
14+
* following disclaimer in the documentation and/or other materials provided with the distribution.
15+
* 3. The name of the author may not be used to endorse or promote products derived from this software without
16+
* specific prior written permission.
17+
*
18+
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
19+
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
20+
* THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
21+
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
22+
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
23+
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
24+
* POSSIBILITY OF SUCH DAMAGE.
25+
*/
26+
27+
package org.codehaus.janino;
28+
29+
import java.util.Map;
30+
31+
/** This {@link ClassLoader} allows for the loading of a set of Java&trade; classes provided in class file format. */
32+
@SuppressWarnings({ "rawtypes", "unchecked" }) public
33+
class ByteArrayClassLoader extends ClassLoader {
34+
35+
/**
36+
* The given {@link Map} of classes must not be modified afterwards.
37+
*
38+
* @param classes String className => byte[] data
39+
*/
40+
public
41+
ByteArrayClassLoader(Map<String /*className*/, byte[] /*data*/> classes) { this.classes = classes; }
42+
43+
/** @see #ByteArrayClassLoader(Map) */
44+
public
45+
ByteArrayClassLoader(Map<String /*className*/, byte[] /*data*/> classes, ClassLoader parent) {
46+
super(parent);
47+
this.classes = classes;
48+
}
49+
50+
/**
51+
* Implements {@link ClassLoader#findClass(String)}.
52+
* <p>
53+
* Notice that, although nowhere documented, no more than one thread at a time calls this
54+
* method, because {@link ClassLoader#loadClass(java.lang.String)} is
55+
* <code>synchronized</code>.
56+
*/
57+
@Override protected Class
58+
findClass(String name) throws ClassNotFoundException {
59+
byte[] data = (byte[]) this.classes.get(name);
60+
if (data == null) throw new ClassNotFoundException(name);
61+
62+
// Notice: Not inheriting the protection domain will cause problems with Java Web Start /
63+
// JNLP. See
64+
// http://jira.codehaus.org/browse/JANINO-104
65+
// http://www.nabble.com/-Help-jel--java.security.AccessControlException-to13073723.html
66+
return super.defineClass(
67+
name, // name
68+
data, 0, data.length, // b, off, len
69+
this.getClass().getProtectionDomain() // protectionDomain
70+
);
71+
}
72+
73+
private final Map<String /*className*/, byte[] /*data*/> classes;
74+
}

0 commit comments

Comments
 (0)