# jetbrains/fernflower

**Attribution required: if you use, quote, or summarise this content, you must credit and link back to [awesome-repositories.com](https://awesome-repositories.com/repository/jetbrains-fernflower).**

4,169 stars · 724 forks · Java · apache-2.0

## Links

- GitHub: https://github.com/JetBrains/fernflower
- Homepage: https://github.com/JetBrains/intellij-community/tree/master/plugins/java-decompiler/engine
- awesome-repositories: https://awesome-repositories.com/repository/jetbrains-fernflower.md

## Topics

`decompiler` `java` `reverse-engineering`

## Description

Fernflower is a Java bytecode decompiler designed to convert compiled Java class files back into human-readable source code. It functions as a bytecode analysis tool that recovers original program logic and structure from compiled binaries.

The project includes capabilities for obfuscated identifier resolution to rename ambiguous member elements, ensuring clear identifiers in the resulting source. These features support the analysis of obfuscated code, legacy code recovery, and Java malware analysis for security auditing.

The system utilizes a structural analysis pipeline that includes control-flow graph reconstruction and abstract syntax tree transformation. It employs pattern-based bytecode mapping and type-based identifier resolution to translate linear bytecode into high-level Java language constructs.

## Tags

### Part of an Awesome List

- [Bytecode Decompilers](https://awesome-repositories.com/f/awesome-lists/devtools/bytecode-analysis-tools/bytecode-decompilers.md) — Converts compiled Java class files back into readable source code to recover original program logic. ([source](https://github.com/JetBrains/fernflower#readme))
- [Bytecode Analysis Tools](https://awesome-repositories.com/f/awesome-lists/devtools/bytecode-analysis-tools.md) — Processes compiled Java files to resolve obfuscated identifiers and reconstruct readable code.

### Programming Languages & Runtimes

- [Deobfuscation Identifier Resolution](https://awesome-repositories.com/f/programming-languages-runtimes/deobfuscation-identifier-resolution.md) — Provides capabilities for renaming ambiguous or short member elements in decompiled Java code to ensure clear identifiers. ([source](https://github.com/JetBrains/fernflower#readme))
- [Bytecode Idiom Recovery](https://awesome-repositories.com/f/programming-languages-runtimes/bytecode-idiom-recovery.md) — Employs pattern-based bytecode mapping to recover high-level Java language constructs from compiler idioms.
- [Bytecode-to-AST Transformers](https://awesome-repositories.com/f/programming-languages-runtimes/programming-utilities/data-structure-type-helpers/data-structures/hierarchical-tree-structures/source-code-abstract-syntax-trees/bytecode-to-ast-transformers.md) — Implements a pipeline that translates linear bytecode into an intermediate tree representation for structural analysis.
- [Heuristic Identifier Assignments](https://awesome-repositories.com/f/programming-languages-runtimes/type-name-assignment/heuristic-identifier-assignments.md) — Assigns meaningful names to variables and fields by analyzing their declared types and usage patterns.

### Security & Cryptography

- [Obfuscated Code Analysis](https://awesome-repositories.com/f/security-cryptography/security/utilities/security-hardening-and-protection/obfuscated-code-analysis.md) — Cleans up and renames ambiguous identifiers in compiled Java code to make the logic easier to understand.
- [Java Malware Analysis](https://awesome-repositories.com/f/security-cryptography/java-malware-analysis.md) — Supports security auditing of compiled Java applications by converting bytecode back into readable source code.

### Software Engineering & Architecture

- [Structured Control-Flow Reconstruction](https://awesome-repositories.com/f/software-engineering-architecture/control-flow-logic-models/control-flow-graph-generation/structured-control-flow-reconstruction.md) — Reconstructs high-level loop and conditional logic from linear bytecode by analyzing jump instructions.
- [Legacy Code Recovery](https://awesome-repositories.com/f/software-engineering-architecture/maintenance-automations/legacy-code-recovery.md) — Retrieves human-readable source code from compiled binaries when original source files are unavailable.
