Skip to content

Commit 47def72

Browse files
committed
Update documentation
1 parent 0520ca2 commit 47def72

File tree

4 files changed

+61
-25
lines changed

4 files changed

+61
-25
lines changed

README.md

+61-25
Original file line numberDiff line numberDiff line change
@@ -2,43 +2,79 @@
22

33
![JDA Logo](docs/icon.png)
44

5-
Java Disassembler (JDA) is a fork of Bytecode Viewer (BCV) that adds advanced code analysis features. The basic principles of BCV are maintained; however, many aspects are different.
5+
Tired of seeing this???
66

7-
## Motivation
8-
The main reason JDA was forked was that BCV was becoming too large and cumbersome, with many redundant, unused, or
9-
useless features. The issue with removing them is that there could be many BCV users that relied on such features.
10-
Because of this, it is more appropriate to fork JDA as a separate project. Additionally, BCV's development has
11-
stagnated, and the last official build is from July 2015. It has since grown increasingly difficult and arcane to
12-
compile BCV from source, and full jars often range into 20Mb in size. It has become necessary to fork BCV in order
13-
to make large-scale changes.
7+
```java
8+
// $FF: Couldn't be decompiled
9+
```
1410

15-
In addition to the growing power and complexity of commercial obfuscation programs for Java, it has become increasingly
16-
necessary to develop improved reverse engineering and static analysis tools. For this reason, JDA has been developed
17-
in order to provide professional-quality static analysis tools for JVM-based languages.
11+
The Java Disassembler (JDA) is a GUI reverse engineering tool that can turn this:
1812

19-
## Scope
20-
With that in mind, JDA's goal is to be a light-weight yet powerful Java static disassembler. BCV suffered from a
21-
multitude of issues, but a large one was that it tried to be a dynamic reverse engineering tool (debugger) as well
22-
as a static tool (disassembler) at the same time, only succeeding partially in the latter. JDA's role is to provide
23-
a platform and interface for the core features such as analysis and disassembly. Additionally, many useless
24-
or irrelevant features have been removed. JDA's scope as a program currently is to be a platform for reverse engineering
25-
tools to be built on top of.
13+
```java
14+
// $FF: Couldn't be decompiled
15+
// java.lang.IllegalArgumentException: Invalid type: @
16+
// at org.jetbrains.java.decompiler.struct.gen.VarType.getType(VarType.java:405)
17+
// at org.jetbrains.java.decompiler.struct.gen.VarType.<init>(VarType.java:90)
18+
// at org.jetbrains.java.decompiler.struct.gen.VarType.<init>(VarType.java:62)
19+
// ...
20+
```
2621

27-
In the future, JDA will have powerful static analysis tools, such as control and data flow analysis, code contraction
28-
(copy and constant propagation), whole binary cross referencing (xrefs), and an IR engine. However, these standard
29-
core utilities will be distributed separately as the [MapleIR](https://github.com/LLVM-but-worse/maple-ir) plugin.
22+
into this:
3023

31-
![MapleIR demo](docs/demo.png)
24+
```java
25+
public void keyPressed(KeyEvent var1) {
26+
super.keyPressed(var1);
27+
int var10000 = var1.getKeyCode();
28+
int var10001 = (3 << 2 & 9 | 5 | 7) ^ 5;
29+
int var10003 = 0 ^ 1165448477 ^ 958591453 ^ 2085987521;
30+
if (var10000 == var10001) {
31+
11.iiIIiiiiIiIIi(this.IIiiIiiiIIiiI, this.IiIIiiiiiiiiI, this.IIiiiiiiIIiIi);
32+
}
33+
}
34+
```
35+
36+
and finally this:
37+
38+
```java
39+
public void keyPressed(KeyEvent var1) {
40+
super.keyPressed(var1);
41+
if (var1.getKeyCode() == 10) {
42+
11.iiIIiiiiIiIIi(this.IIiiIiiiIIiiI, this.IiIIiiiiiiiiI, this.IIiiiiiiIIiIi);
43+
}
44+
}
45+
```
3246

3347
## Features
34-
- Ergonomic design for low-level bytecode reversing
48+
JDA offers powerful static analysis tools, such as control and data flow analysis, and code simplification
49+
built using a custom IL. Moreover, many tasks expected of a disassembler such as constant and string searching are available.
50+
These standard core utilities are with the [MapleIR](https://github.com/LLVM-but-worse/maple-ir) plugin. You
51+
can also access the IL API and integrate into the UI by writing your own plugins in Java.
52+
In the near future it will support whole binary cross referencing (xrefs) and more.
53+
54+
- Ergonomic design for high-level browsing or low-level bytecode reversing
3555
- [Data-flow analysis with copy and constant propagation](docs/propagation-analysis.png) (provided by MapleIR)
3656
- Support for a variety of decompilers
37-
- Cross-reference bytecode, decompilation, and IR.
57+
- Side-by-side view of decompilation, bytecode, and IL.
58+
59+
![MapleIR demo](docs/demo.png)
60+
61+
## Motivation
62+
Due to the growing power and complexity of commercial obfuscation programs for Java, it has become
63+
necessary to develop improved reverse engineering and static analysis tools. JDA was developed to
64+
provide professional-quality static analysis tools for JVM-based languages.
65+
66+
JDA began as a fork of Bytecode Viewer (BCV). BCV suffered heavily from bloat, poor performance, and
67+
stagnant development. In JDA many useless or irrelevant features have been removed, and significant parts
68+
of the codebase have been cleaned up or rewritten entirely.
69+
70+
## Scope
71+
With that in mind, JDA's goal is to be a focused, light-weight yet powerful Java static disassembler.
72+
JDA's role is to provide a platform and interface for the core features such as analysis and disassembly.
73+
Therefore, JDA's scope is to be a platform for Java reverse engineering tools to be built on top of.
3874

3975
More to come in the future.
4076

41-
## Maple-IR Plugin
77+
## MapleIR Plugin
4278

4379
To install the plugin put the plugin jar in `~/.jda/plugins` (or equivalently, `%USERPROFILE%\.jda\plugins` on Windows), then restart.
4480

docs/demo.png

-15.9 KB
Loading

docs/icon.png

-3.34 KB
Loading

docs/propagation-analysis.png

1.26 KB
Loading

0 commit comments

Comments
 (0)