| | 1. Javassist | By: | JBoss | License: | GNU Library or Lesser General Public License (LGPL) | URL: | http://www.jboss.org/products/javassist | Description: | Javassist (Java programming assistant) is a load-time reflective system for Java. It is a class library for editing bytecodes in Java; it enables Java programs to define a new class at runtime and to modify a class file before the JVM loads it. Unlike other similar systems, Javassist provides source-level abstraction; programmers can modify a class file without detailed knowledge of the Java bytecode. They do not have to even write an inserted bytecode sequence; Javassist instead can compile a fragment of source text on line (for example, just a single statement). This ease of use is a unique feature of Javassit against other tools.
|
2. Byte Code Engineering Library | By: | Apache Software Foundation | License: | Apache Software License | URL: | http://jakarta.apache.org/bcel/ | Description: | The Byte Code Engineering Library is intended to give users a convenient possibility to analyze, create, and manipulate (binary) Java class files (those ending with .class). Classes are represented by objects which contain all the symbolic information of the given class: methods, fields and byte code instructions, in particular.
Such objects can be read from an existing file, be transformed by a program (e.g. a class loader at run-time) and dumped to a file again. An even more interesting application is the creation of classes from scratch at run-time. The Byte Code Engineering Library (BCEL) may be also useful if you want to learn about the Java Virtual Machine (JVM) and the format of Java .class files.
BCEL contains a byte code verifier named JustIce, which usually gives you much better information about what's wrong with your code than the standard JVM message.
|
3. ASM | By: | ObjectWeb Consortium | License: | BSD License | URL: | http://asm.objectweb.org/ | Description: | ASM is a Java bytecode manipulation framework. It can be used to dynamically generate stub classes or other proxy classes, directly in binary form, or to dynamically modify classes at load time, i.e., just before they are loaded into the Java Virtual Machine.
|
4. Serp | By: | | License: | BSD License | URL: | http://serp.sourceforge.net/ | Description: | Serp is an open source framework for manipulating Java bytecode. If you have a suggestion for functionality that you would like to see incorporated into serp, please feel free to send it to me. Bug reports are also greatly appreciated. And if you choose to incorporate serp into any of your projects, I would love to hear about it!
|
5. jclasslib | By: | ej-technologies GmbH | License: | GNU General Public License (GPL) | URL: | http://www.ej-technologies.com/products/jclasslib/overview.html | Description: | jclasslib bytecode viewer is a tool that visualizes all aspects of compiled Java class files and the contained bytecode. In addition, it contains a library that enables developers to read, modify and write Java class files and bytecode.
|
7. Cojen | By: | Brian S O'Neill | License: | Apache Software License | URL: | http://cojen.sourceforge.net/ | Description: | Cojen's primary goal is making raw Java classfile generation easy, without hiding any of the advanced features. Basic knowledge of how Java classfiles are structured is still required, however. The Virtual Machine Specification is an excellent reference.
Method bytecode is constructed via a builder, in which virtual machine opcodes are represented as slightly higher level instructions. It takes care of selecting optimal opcodes, managing branch labels, computing operand stack depth, choosing local variable registers, and reducing register usage by liveness analysis. In addition, it supports long branches, pushing large string constants onto the stack, boxing and unboxing conversions, and inlining of Java code.
The builder is represented by an interface, which can be used as a visitor into a code disassembler. This feature can be used for just-in-time method mutation, and to aid in understanding how to use the code building facilities.
A simple "Hello World" example is provided which demonstrates the major class generation and loading features. Disassembly tools which can be run from the command line show how any class can be used as an example for class generation.
|
8. Trove | By: | | License: | Apache Software License | URL: | http://teatrove.sourceforge.net/trove.html | Description: | Trove is a library of useful classes that is used by Tea and the TeaServlet. Trove includes the Class File API, the Logging API and a set of utility classes.
The Class File API simplifies creation of Java class files. Instead of having to write byte-code, the Class File API allows you to call high-level methods which generate the byte-code for you.
The Logging API is a powerful logging framework. This framework allows you to listen for logging events and route them to the appropriate log file or database.
Trove also includes a set of Utility Classes. The Thread Pool class is useful for managing a collection of reusable threads. The Cache class is a generic caching utility that keeps the most recently used items in memory. The Property Map class allows for simple but powerful properties files.
|
9. Jiapi | By: | | License: | GNU Library or Lesser General Public License (LGPL) | URL: | http://jiapi.sourceforge.net/ | Description: | When a Java virtual machine encounters a request for a class which hasn't been loaded to its memory, it consults a class loader to locate and load the class. Typically, the classes are loaded from a filesystem or URL as a bytecode array and then converted into an instance of class java.lang.Class within the virtual machine. Jiapi is a tool which can be used to alter this normal class loading behavior. Instead of letting the class to be loaded as it is, Jiapi is used to manipulate classes' bytecode. The manipulated class is then passed to a class loader which loads it into a Java virtual machine. In addition to just described just-in-time bytecode weaving, Jiapi can be used to instrument a class ahead-of-time. In this mode compiled classes are preprocessed by Jiapi instrumentors and modified classes are then serialized on a filesystem to be executed later.
|
10. cglib | By: | cglib | License: | Apache Software License | URL: | http://cglib.sourceforge.net/ | Description: | cglib is a powerful, high performance and quality Code Generation Library, It is used to extend JAVA classes and implements interfaces at runtime. See samples and API documentation to learn more about features.
|
11. Classfile Reader and Writer | By: | Kimberley | License: | Public Domain | URL: | http://www.kimbly.com/code/classfile/ | Description: | This package makes it easy to read and write java classfiles. It doesn't, however, provide any help with displaying the contents of a classfile to the user (unless you count debug output), or disassembling the bytecodes.
|
12. Soot: a Java Optimization Framework | By: | Soot | License: | GNU Library or Lesser General Public License (LGPL) | URL: | http://www.sable.mcgill.ca/soot/ | Description: | Soot is a Java optimization framework. It provides four intermediate representations for analyzing and transforming Java bytecode:
1. Baf: a streamlined representation of bytecode which is simple to manipulate.
2. Jimple: a typed 3-address intermediate representation suitable for optimization.
3. Shimple: an SSA variation of Jimple.
4. Grimp: an aggregated version of Jimple suitable for decompilation and code inspection.
Soot can be used as a stand alone tool to optimize or inspect class files, as well as a framework to develop optimizations or transformations on Java bytecode.
|
14. Bundle | By: | Kimberley | License: | GNU GPL | URL: | http://www.kimbly.com/code/bundle/ | Description: | Bundle: Combining several Java I/O streams into one
These classes let you combine several streams into one. BundleOutputStream packs several OutputStreams (called channels) into a single OutputStream. BundleInputStream separates a bundle back into the original channels. Channels are identified by Strings, so you can give them names that make sense for your program.
A bundle could be used for a log file, with separate channels for debug info and normal data. Bundles can also help if your program has a lot of data streams, but only a few physical connections. For example, if an applet runs 1000 threads, each generating information that needs to be sent to the server, it would be very inefficient to use a separate Socket for each thread. But with a bundle, only one Socket is needed, and each thread can use a separate channel.
Channels are read and written to the bundle in parallel, so you don't have to finish reading/writing one channel before starting to read/write a second channel.
|
15. Java Binary Enhancement Tool (JBET) | By: | ISSO-jbet at sparta.com. | License: | BSD License | URL: | http://opensource.nailabs.com/jbet/ | Description: | The Java Binary Enhancement Tool (JBET) is a general Java program analysis and manipulation tool. Existing class files can be disassembled, reassembled, or edited programmatically through the JBET API. JBET can also be used to create new Java class files from scratch. JBET uses a convenient internal representation of all the contents of Java binary (.class) files, allowing the user to edit the classes easily, in a structured manner.
JBET was developed as part of the DARPA Self-Protecting Mobile Agents project under the OASIS and Active Networks programs (contract number N66001-00-C-8602) in order to study automated software obfuscation. The Java language was chosen for this project because of the (relative) ease of constructing binary editing tools provided by the large amount of type information present in the class files. Our two reports, the Obfuscation Techniques Evaluation Report, and the Obfuscation Report, are available from the download area. The obfuscation tool developed is not part of this release.
JBET was also used in the DARPA/AFRL Survivable Server project (contract number F30602-00-C-0183) to add additional security checks to the Java Standard Library. (The Java SecurityManager API does not support many desirable security checks, such as continued authorization of file accesses after opening.) JBET was used to replace the native method references in the Java standard library with stubs that call a pluggable security policy. This tool, called Jpolicy, is also available for download at this website. Jpolicy is very incomplete at this time, but may be interesting to those working in Java security or changing the standard library themselves.
|
16. Retrotranslator | By: | | License: | Open Source | URL: | http://retrotranslator.sourceforge.net | Description: | Retrotranslator is a Java bytecode transformer that translates Java classes compiled with JDK 5.0 into classes that can be run on JVM 1.4. It is a free, open-source tool based on the ASM bytecode manipulation framework and concurrency utilities backported to Java 1.4.
|
|