Visionneuse de bytecode Java
Téléchargez un fichier .class ou collez du bytecode hexadécimal pour consulter les instructions de bytecode Java, les entrées du pool de constantes, les trames de pile et les tables de numéros de ligne. Analysez les fichiers de classe JVM et inspectez les mnémoniques de bytecode de méthodes - le tout dans votre navigateur, sans envoi à un serveur.
Upload a .class file or paste hex bytecode to view Java bytecode instructions, constant pool entries, stack frames, and line number tables. Parse JVM class files and inspect method bytecode mnemonics, field descriptors, and class metadata — all in your browser with no server uploads.
Upload a .class file or paste hex bytecode to view the class structure, constant pool, and method bytecode instructions. The parser supports the full JVM class file format including constant pool, access flags, fields, methods, bytecode mnemonics, exception tables, line number tables, and stack map frames. Click Load example hex to try it with sample data.
Pourquoi utiliser notre visionneuse de bytecode Java ?
- Désassemblage instantané du bytecode Java : téléchargez un fichier .class ou collez du bytecode hexadécimal pour analyser et désassembler instantanément des fichiers de classe JVM. La visionneuse affiche la structure complète de la classe, y compris le nombre magique, les informations de version, les entrées du pool de constantes, les drapeaux d'accès, les descripteurs de champs et les instructions de bytecode de méthodes avec mnémoniques pour chaque opcode JVM. Tout le traitement est local et instantané.
- Inspection complète du fichier de classe : inspectez chaque aspect d'un fichier de classe Java : le pool de constantes avec tous les types d'entrée (Utf8, Class, Methodref, Fieldref, NameAndType, etc.), les instructions de bytecode de méthodes avec opérandes, les tables de gestionnaires d'exceptions, les tables de numéros de ligne pour la correspondance avec le source, les trames stack map et la décomposition complète des drapeaux d'accès. L'outil offre une vue complète de la structure du fichier de classe.
- Fonctionnalités complètes de la visionneuse de bytecode : naviguez entre les onglets Aperçu, Pool de constantes, Champs et Méthodes. Chaque méthode affiche sa séquence d'instructions de bytecode avec décalage, opcode, mnémonique, opérandes et commentaires. Consultez max stack/locals, tables d'exceptions, tables de numéros de ligne et trames stack map. L'onglet pool de constantes liste chaque entrée avec son type d'étiquette et ses valeurs résolues.
- Visionneuse de bytecode Java en ligne - sans installation : utilisez la visionneuse de bytecode Java directement dans n'importe quel navigateur moderne, sans téléchargement, application ni plugin. Téléchargez des fichiers .class, collez du bytecode hexadécimal ou chargez des données d'exemple. Toute l'analyse des fichiers de classe se fait localement en JavaScript - aucun envoi à un serveur, aucune fuite de données, totalement privé.
Cas d'usage courants de la visionneuse de bytecode Java
- Analyse de malwares et de charges utiles Java : les analystes en sécurité utilisent la visionneuse de bytecode pour inspecter les malwares, droppers et portes dérobées Java sans les exécuter. En consultant directement le pool de constantes et le bytecode des méthodes, les analystes peuvent extraire les URLs C2, les clés de chiffrement et les chaînes de configuration qui peuvent être obfusquées dans le code Java décompilé, mais qui sont visibles comme constantes dans le fichier de classe.
- Comprendre du code Java obfusqué : lorsque la sortie décompilée d'outils comme CFR, Procyon ou Fernflower produit un code confus, consulter le bytecode brut révèle les instructions réellement exécutées par la JVM. Cela aide les reverse engineers à comprendre ce que font réellement les méthodes obfusquées, en particulier avec l'aplatissement du flux de contrôle, les prédicats opaques et le chiffrement de chaînes.
- Analyse du contournement de validation de licence et de DRM : les chercheurs qui analysent les implémentations de licences et de DRM d'applications Java utilisent la visionneuse de bytecode pour inspecter les méthodes de validation de licence. Le pool de constantes révèle les formats de clés de licence codés en dur, les constantes d'algorithmes de validation et les empreintes de certificats numériques utilisés dans la logique de licence.
- Analyse forensique des mods et plugins Minecraft : les analystes de mods Minecraft utilisent la visionneuse de bytecode pour inspecter les plugins obfusqués Forge, Fabric et Bukkit/Spigot. L'outil aide à identifier les appels d'API cachés, les verrous de fonctionnalités premium, les points de terminaison de télémétrie et les identifiants codés en dur qui peuvent être invisibles dans le code décompilé mais clairement visibles dans le pool de constantes du bytecode.
- Audit et conformité de code Java d'entreprise : les auditeurs de sécurité qui inspectent des applications Java d'entreprise compilées utilisent la visionneuse de bytecode pour vérifier que les opérations sensibles utilisent les bonnes autorisations, que les opérations cryptographiques emploient les algorithmes attendus et qu'aucun appel d'API non autorisé n'est effectué. La vue du bytecode brut fournit une preuve incontestable du code réellement exécuté.
- Éducation et apprentissage du bytecode JVM : les étudiants en informatique et les développeurs Java qui apprennent le jeu d'instructions de la JVM utilisent la visionneuse de bytecode comme outil pédagogique. En compilant du code Java simple et en consultant le bytecode résultant, ils peuvent comprendre comment les constructions Java de haut niveau se traduisent en instructions JVM, opérations de pile et dispatch de méthodes.
Qu'est-ce que le bytecode Java ?
Le bytecode Java est la représentation intermédiaire du code source Java qui s'exécute sur la Machine Virtuelle Java (JVM). Lorsque vous compilez un fichier .java avec javac, le compilateur produit un fichier .class contenant des instructions de bytecode indépendantes de la plateforme. Contrairement au code source conçu pour la lisibilité humaine, le bytecode est conçu pour une exécution efficace par la JVM tout en conservant suffisamment de structure pour des fonctionnalités d'exécution comme la réflexion, le chargement dynamique de classes et le ramasse-miettes.
Un fichier de classe Java a un format binaire strict défini par la spécification de la JVM. Il commence par le nombre magique 0xCAFEBABE, suivi des informations de version, du pool de constantes (une table de toutes les constantes utilisées dans la classe), des drapeaux d'accès, des informations sur la hiérarchie de classes, des définitions de champs, des définitions de méthodes avec bytecode et des attributs de classe.
Comment fonctionne notre visionneuse de bytecode Java
- 1. Téléchargez ou collez le bytecode : téléchargez un fichier .class compilé en cliquant sur le bouton Télécharger, ou collez la représentation hexadécimale d'un fichier de classe dans la zone de texte. L'outil accepte les octets hexadécimaux bruts commençant par le nombre magique CAFEBABE. Vous pouvez aussi cliquer sur « Charger un hex d'exemple » pour analyser un fichier de classe d'exemple préconstruit et explorer sa structure.
- 2. Analyse du fichier de classe : l'analyseur basé sur JavaScript lit le format binaire du fichier de classe étape par étape : il valide le nombre magique et la version, décode le pool de constantes (jusqu'à 65535 entrées), analyse les drapeaux d'accès (ACC_PUBLIC, ACC_STATIC, ACC_FINAL, etc.), résout la hiérarchie de classes, énumère les champs avec leurs descripteurs et traite chaque méthode, y compris son attribut Code avec les séquences d'instructions de bytecode, les tables de gestionnaires d'exceptions, les tables de numéros de ligne et les trames stack map. L'analyseur gère les 17+ types d'entrée du pool de constantes.
- 3. Explorez la structure : utilisez la navigation par onglets pour passer entre les vues Aperçu, Pool de constantes, Champs et Méthodes. Cliquez sur n'importe quelle méthode pour la déplier et voir sa liste complète d'instructions de bytecode, max stack/locals, gestionnaires d'exceptions, correspondances de numéros de ligne et trames stack map. Chaque instruction de bytecode affiche son décalage, sa valeur d'opcode, son nom mnémonique, ses opérandes et les références résolues du pool de constantes.
Structure du fichier de classe Java expliquée
- Nombre magique et version : tout fichier de classe valide commence par le nombre magique de 4 octets 0xCAFEBABE. Les 4 octets suivants contiennent les numéros de version mineure et majeure, qui identifient la version de Java utilisée pour compiler cette classe (par ex., majeure 61 = Java 17, majeure 52 = Java 8).
- Pool de constantes : une table de longueur variable de constantes utilisées dans tout le fichier de classe. Les entrées incluent des chaînes UTF-8, des références de classe, des références de méthode/champ, des constantes numériques, des descripteurs nom-et-type et des sites d'appel dynamiques. Chaque entrée a une étiquette de 1 octet identifiant son type, et les entrées sont indexées à partir de 1 (l'index 0 est réservé comme null).
- Champs et méthodes : chaque champ et méthode est défini avec des drapeaux d'accès (public, private, static, final, etc.), un index de nom dans le pool de constantes, une chaîne de descripteur (par ex., (Ljava/lang/String;)V pour une méthode qui prend un String et renvoie void) et des attributs. L'attribut Code de chaque méthode contient les instructions de bytecode réelles, max stack/locals, les gestionnaires d'exceptions et des attributs de débogage optionnels.
- Instructions de bytecode : chaque instruction JVM est un opcode de 1 octet suivi de 0 ou plusieurs octets d'opérandes. Les instructions vont des opérations de pile simples (iconst_0, dup) aux invocations de méthodes complexes (invokevirtual, invokespecial, invokeinterface, invokedynamic), accès aux champs (getfield, putstatic), flux de contrôle (ifeq, goto, tableswitch) et opérations sur objets (new, checkcast, instanceof).
- Trames stack map : un attribut de vérification requis pour les fichiers de classe Java 7+. Les entrées StackMapTable décrivent l'état de type de la pile d'opérandes et des variables locales à des décalages de bytecode spécifiques, permettant à la JVM de vérifier la sûreté des types sans analyse de flux de données coûteuse. Les types de trames incluent same, same_locals_1_stack_item, chop, append et les trames complètes.
Confidentialité, sécurité et disponibilité
L'outil Visionneuse de bytecode Java est 100 % gratuit et sans inscription. Toute l'analyse des fichiers de classe est effectuée localement dans votre navigateur avec JavaScript - vos fichiers .class et données de bytecode ne quittent jamais votre appareil. Il n'y a aucune limite d'utilisation ni restriction. L'outil prend en charge le téléchargement de fichiers .class et le collage de bytecode encodé en hexadécimal, avec une inspection complète de la structure du fichier de classe incluant le pool de constantes, les champs, les méthodes, les mnémoniques de bytecode, les tables d'exceptions, les tables de numéros de ligne et les trames stack map.
Foire aux questions
La visionneuse prend en charge le format complet des fichiers de classe JVM (versions 45.0 à 67+). Elle analyse le pool de constantes avec ses 17+ types d'entrée, les drapeaux d'accès, la hiérarchie de classes, les interfaces, les champs avec descripteurs, les méthodes avec instructions de bytecode, les tables de gestionnaires d'exceptions, les tables de numéros de ligne et les trames stack map.
Oui. Les outils d'obfuscation renomment les classes, méthodes et champs, mais les instructions de bytecode elles-mêmes ne peuvent pas être obfusquées. Notre visionneuse affiche les instructions réellement exécutées par la JVM, révélant la logique même lorsque les noms sont obfusqués.
La visionneuse prend en charge toutes les instructions de bytecode JVM standard (opcodes 0x00 à 0xC9) avec des noms mnémoniques corrects et un décodage des opérandes. Cela inclut les opérations de pile, arithmétiques, de flux de contrôle, d'accès aux champs, d'invocation de méthodes et d'objets.
Oui. La visionneuse décode correctement les instructions invokedynamic et leurs entrées associées du pool de constantes (entrées InvokeDynamic et MethodHandle). Les expressions lambda compilées avec javac utilisent invokedynamic avec des méthodes bootstrap référencées dans le pool de constantes.
Absolument. La visionneuse de bytecode Java s'exécute entièrement dans votre navigateur. Votre fichier .class ou le bytecode hexadécimal collé n'est jamais envoyé à un serveur. Toute l'analyse se fait localement sur votre appareil. Aucun appel d'API, aucune analyse, aucune collecte de données.
Le pool de constantes contient des littéraux de chaîne, des noms de classes, des références de méthodes, des références de champs, des constantes numériques, des descripteurs de types, des method handles pour invokedynamic, des informations de module/paquet pour les modules Java 9+ et des paires nom-et-type.
Les applications Android utilisent le bytecode DEX, pas le bytecode JVM standard. Notre visionneuse n'analyse que les fichiers .class Java standard. Toutefois, si vous décompilez un fichier DEX en code source Java et le compilez avec javac, vous pouvez consulter le bytecode résultant avec cet outil.
Les tables de numéros de ligne sont générées par javac lorsque les classes sont compilées avec l'option -g ou les informations de débogage par défaut. Elles associent les décalages de bytecode aux numéros de ligne du fichier source. Les builds obfusqués suppriment souvent ces tables.
Oui - 100 % gratuite, sans inscription, sans compte et sans limite d'utilisation. Analysez autant de fichiers de classe que nécessaire, autant de fois que vous le souhaitez. Aucun frais caché, niveau premium ni plafond d'utilisation.