You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
3.2 KiB
3.2 KiB
| name | description | version |
|---|---|---|
| decompile-classes | Decompile Java .class files back to source code. Use when user wants to restore compiled Java projects, reverse engineer class files, or convert bytecode to readable Java source. | 1.0.0 |
Java Class Decompilation Guide
This skill guides the decompilation of Java .class files back to readable source code.
When to Use
- User has compiled .class files without source code
- User wants to restore a Java project from compiled artifacts
- User needs to understand legacy compiled code
- User wants to reverse engineer a Java application
Decompilation Process
Step 1: Assess the Project
Before decompiling, gather information:
# Count class files
find <classes_dir> -name "*.class" | wc -l
# List package structure
find <classes_dir> -name "*.class" | sed 's|/[^/]*\.class$||' | sort -u
# Check for inner classes
find <classes_dir> -name "*\$*.class" | wc -l
Step 2: Download CFR Decompiler
CFR is the recommended decompiler for modern Java:
# Download to plugin scripts directory
curl -L -o scripts/cfr.jar https://github.com/leibnitz27/cfr/releases/download/0.152/cfr-0.152.jar
Step 3: Run Batch Decompilation
Use the decompile script:
bash C:/Users/K/.claude/plugins/cache/claude-plugins-official/plugin-dev/9eae436aa296/scripts/decompile.sh <input_dir> <output_dir>
Or decompile individual files:
java -jar cfr.jar MyClass.class --outputdir ./src
Step 4: Handle Decompilation Issues
Common issues and solutions:
| Issue | Solution |
|---|---|
| Enum classes | CFR handles these well by default |
| Lambda expressions | Use --decodelambdas true |
| Inner classes | CFR outputs them as separate files |
| Obfuscated code | Use --renamedupmembers true |
| Missing dependencies | Add classpath with --extraclasspath |
Step 5: Verify Decompiled Code
After decompilation:
- Check file count matches original
- Look for decompilation errors in output
- Verify package structure is preserved
- Spot-check complex classes for correctness
CFR Command Options
java -jar cfr.jar <input> [options]
Options:
--outputdir <dir> Output directory
--silent Suppress progress output
--decodelambdas Decode lambda expressions
--decodestringswitch Decode string switches
--decodeswitch Decode switch statements
--renamedupmembers Rename duplicate members
--removeboilerplate Remove boilerplate code
--removeinnerclasses Remove inner class references
--showinferredlambdaithrows Show inferred lambda throws
--extraclasspath <path> Additional classpath for dependencies
Post-Decompilation
After successful decompilation:
- Run
analyze-structureto understand the project - Run
generate-projectto create Maven/Gradle structure - Run
analyze-dependenciesto map dependencies - Review and fix any decompilation artifacts
Tips
- Large projects: Process in batches to manage memory
- Error recovery: CFR is resilient, but check output for errors
- Naming conflicts: Inner classes may cause naming issues
- Encoding: Ensure UTF-8 for Chinese/Unicode content
- Dependencies: Some classes may reference external JARs