bytecode-viewer

Visualiseur multi-décompilateur de bytecode Java et Android. Affiche simultanément la sortie de plusieurs décompilateurs (Procyon, CFR, FernFlower, Krakatau) pour recoupement. Multi-decompiler Java and Android bytecode viewer. Simultaneously shows output from multiple decompilers (Procyon, CFR, FernFlower, Krakatau) for cross-verification.

↗ https://github.com/Konloch/bytecode-viewer

Overview

Bytecode Viewer (BCV) is a Java/Android reverse engineering tool that runs multiple decompilers simultaneously. You can view a class file through Procyon, CFR, FernFlower, and Krakatau at the same time — comparing outputs helps when one decompiler fails or produces inaccurate code. Supports APK, JAR, CLASS, and DEX files.

Installation

# Download JAR from GitHub releases
# https://github.com/Konloch/bytecode-viewer/releases

Run

java -jar BytecodeViewer.jar

Or Kali package

sudo apt install bytecode-viewer

Basic Usage

# Launch GUI
bytecode-viewer
# Or:
java -jar BytecodeViewer.jar

# Open a file:
# File → Open (or drag-and-drop)
# Supports: .jar, .apk, .class, .dex, .zip, .war

CLI mode

java -jar BytecodeViewer.jar -i input.apk -o output/ -decompiler cfr

Key Features

Multi-decompiler view:
  - Show same class with multiple decompilers side-by-side
  - FernFlower (IntelliJ's decompiler)
  - Procyon
  - CFR
  - Krakatau
  - JADX-core
  - JD-Core
  - Bytecode (raw bytecode view)
  - Smali (Android bytecode)

Navigation:
  - Tree view of all classes/packages
  - Search across all decompiled code
  - Quick jump to class/method

Editing:
  - Recompile modified classes back into JAR
  - APK rebuild after modification

Opening Files

# Drag and drop onto the window, or:
# File → Open → select .apk/.jar/.class

# For Android APKs:
# BCV handles the full DEX → JAR → decompile pipeline
# automatically

# For encrypted/obfuscated JARs:
# Some decompilers handle obfuscation better than others
# Switch decompilers if one shows errors or empty output

CLI Decompilation

Decompile to directory

java -jar BytecodeViewer.jar \
  -i input.apk \
  -o /tmp/decompiled/ \
  -decompiler cfr
# Available decompilers for CLI:
# cfr, procyon, fernflower, jadx-core, jd-core

Decompile specific class

java -jar BytecodeViewer.jar -i input.jar -o out/ -decompiler procyon

Recompile modified source

java -jar BytecodeViewer.jar -recompile -i modified/ -o patched.jar

APK Analysis Workflow

# 1. Open APK in BCV
# 2. Navigate to com/<company>/app/

# Key classes to inspect:
# - MainActivity, Application class
# - Network/API classes (look for URLs, API keys)
# - Crypto/auth classes
# - BuildConfig (debug flags, server URLs, API keys)

# 3. Search for strings:
# Ctrl+F → search "http" → find hardcoded URLs
# Search "password", "key", "token", "secret"

# 4. Export findings via File → Save

Comparison with JADX

BCV pros:
  - Multiple decompilers simultaneously
  - Bytecode/Smali view alongside Java
  - APK rebuilding
  - More decompiler options

JADX pros:
  - Better single-decompiler quality
  - Faster for large APKs
  - Better search
  - Actively maintained
  
Best practice: use JADX first, BCV when JADX fails on specific classes

Tips

  • When one decompiler shows errors, switch to another — each handles edge cases differently
  • The raw bytecode view is authoritative — decompiled Java is an approximation
  • For obfuscated code, try Krakatau or CFR which handle some obfuscation better
  • Use “Search in decompiled output” (Ctrl+F) to find hardcoded strings across all classes
Help / Man page
java -jar BytecodeViewer.jar [options]

GUI mode (no arguments): launches the graphical interface

CLI mode:
  -i FILE           Input file (jar/apk/class/dex)
  -o DIR            Output directory
  -decompiler NAME  Decompiler: cfr, procyon, fernflower, jadx-core, jd-core
  -recompile        Recompile mode
  -help             Show help

Vue d’ensemble

Bytecode Viewer (BCV) est un outil de rétro-ingénierie Java/Android qui exécute plusieurs décompilateurs simultanément. Vous pouvez voir un fichier class à travers Procyon, CFR, FernFlower et Krakatau en même temps : comparer les sorties aide quand un décompilateur échoue ou produit du code inexact. Supporte les fichiers APK, JAR, CLASS et DEX.

Installation

# Télécharger le JAR depuis les releases GitHub
# https://github.com/Konloch/bytecode-viewer/releases
# Lancer
java -jar BytecodeViewer.jar
# Ou le paquet Kali
sudo apt install bytecode-viewer

Utilisation de base

# Lancer l'interface graphique
bytecode-viewer
# Ou :
java -jar BytecodeViewer.jar

# Ouvrir un fichier :
# File → Open (ou glisser-déposer)
# Supporte : .jar, .apk, .class, .dex, .zip, .war
# Mode CLI
java -jar BytecodeViewer.jar -i input.apk -o output/ -decompiler cfr

Fonctionnalités clés

Vue multi-décompilateur :
  - Afficher la même classe avec plusieurs décompilateurs côte à côte
  - FernFlower (le décompilateur d'IntelliJ)
  - Procyon
  - CFR
  - Krakatau
  - JADX-core
  - JD-Core
  - Bytecode (vue du bytecode brut)
  - Smali (bytecode Android)

Navigation :
  - Vue en arbre de toutes les classes/packages
  - Recherche dans tout le code décompilé
  - Saut rapide vers une classe/méthode

Édition :
  - Recompiler les classes modifiées en JAR
  - Reconstruction de l'APK après modification

Ouvrir des fichiers

# Glisser-déposer sur la fenêtre, ou :
# File → Open → sélectionner .apk/.jar/.class

# Pour les APK Android :
# BCV gère automatiquement toute la chaîne DEX → JAR → décompilation

# Pour les JAR chiffrés/obfusqués :
# Certains décompilateurs gèrent mieux l'obfuscation que d'autres
# Changez de décompilateur si l'un affiche des erreurs ou une sortie vide

Décompilation en CLI

# Décompiler vers un répertoire
java -jar BytecodeViewer.jar \
  -i input.apk \
  -o /tmp/decompiled/ \
  -decompiler cfr
# Décompilateurs disponibles en CLI :
# cfr, procyon, fernflower, jadx-core, jd-core
# Décompiler une classe spécifique
java -jar BytecodeViewer.jar -i input.jar -o out/ -decompiler procyon

# Recompiler la source modifiée
java -jar BytecodeViewer.jar -recompile -i modified/ -o patched.jar

Workflow d’analyse d’APK

# 1. Ouvrir l'APK dans BCV
# 2. Naviguer vers com/<company>/app/

# Classes clés à inspecter :
# - MainActivity, la classe Application
# - Classes réseau/API (chercher URLs, clés d'API)
# - Classes de crypto/auth
# - BuildConfig (flags de debug, URLs serveur, clés d'API)

# 3. Rechercher des chaînes :
# Ctrl+F → rechercher "http" → trouver les URLs en dur
# Rechercher "password", "key", "token", "secret"

# 4. Exporter les découvertes via File → Save

Comparaison avec JADX

Avantages de BCV :
  - Plusieurs décompilateurs simultanément
  - Vue Bytecode/Smali à côté du Java
  - Reconstruction d'APK
  - Plus d'options de décompilateurs

Avantages de JADX :
  - Meilleure qualité en décompilateur unique
  - Plus rapide sur les gros APK
  - Meilleure recherche
  - Activement maintenu
  
Bonne pratique : utiliser JADX d'abord, BCV quand JADX échoue sur des classes précises

Conseils

  • Quand un décompilateur affiche des erreurs, passez à un autre : chacun gère les cas limites différemment
  • La vue du bytecode brut fait foi : le Java décompilé est une approximation
  • Pour du code obfusqué, essayez Krakatau ou CFR qui gèrent mieux une partie de l’obfuscation
  • Utilisez “Search in decompiled output” (Ctrl+F) pour trouver des chaînes en dur dans toutes les classes
Aide / Page de manuel
java -jar BytecodeViewer.jar [options]

GUI mode (no arguments): launches the graphical interface

CLI mode:
  -i FILE           Input file (jar/apk/class/dex)
  -o DIR            Output directory
  -decompiler NAME  Decompiler: cfr, procyon, fernflower, jadx-core, jd-core
  -recompile        Recompile mode
  -help             Show help