|
2 | 2 |
|
3 | 3 | 
|
4 | 4 |
|
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??? |
6 | 6 |
|
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 | +``` |
14 | 10 |
|
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: |
18 | 12 |
|
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 | +``` |
26 | 21 |
|
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: |
30 | 23 |
|
31 |
| - |
| 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 | +``` |
32 | 46 |
|
33 | 47 | ## 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 |
35 | 55 | - [Data-flow analysis with copy and constant propagation](docs/propagation-analysis.png) (provided by MapleIR)
|
36 | 56 | - 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 | + |
| 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. |
38 | 74 |
|
39 | 75 | More to come in the future.
|
40 | 76 |
|
41 |
| -## Maple-IR Plugin |
| 77 | +## MapleIR Plugin |
42 | 78 |
|
43 | 79 | To install the plugin put the plugin jar in `~/.jda/plugins` (or equivalently, `%USERPROFILE%\.jda\plugins` on Windows), then restart.
|
44 | 80 |
|
|
0 commit comments