Comment fonctionne Protector4J
Protector4J protège votre code source Java en convertissant les fichiers JAR en fichiers JARX chiffrés et privés. Nous utilisons plusieurs approches pour garantir la sécurité de votre application, tant au niveau de la JVM qu'au niveau binaire, offrant ainsi une protection applicative de haute qualité.
Les problèmes liés à l'obfuscation du code
Grâce à la haute sémantique du bytecode JVM, son analyse et sa lecture sont extrêmement simples. L'analyse de sa logique d'exécution est aisée grâce au débogage dynamique. La création d'un outil de débogage dynamique n'est pas une tâche très complexe. Par conséquent, l'obfuscation ne constitue pas une solution de protection fiable.
Les problèmes liés au chiffrement de classe
Du fait de l'existence du mécanisme d'attachement à la JVM, tout code chiffré non détaché du fonctionnement normal de la JVM peut être facilement lu à l'aide d'outils d'attachement. Par conséquent, cette solution de protection est la moins efficace.
Les problèmes liés à la protection des machines virtuelles
La protection par virtualisation est la méthode de protection du code la plus sûre, mais en raison de son impact significatif sur les performances, elle ne peut être appliquée à l'intégralité du code d'un programme. Elle ne protège que le code critique, tandis que le reste du code demeure exposé aux risques. En ciblant d'autres parties du code, il est possible d'obtenir des informations fonctionnelles sur la portion virtualisée.
Les problèmes liés à la compilation AOT
La compilation AOT est complexe à configurer et à compiler, et présente un risque d'échec élevé. Même en cas de succès, la logique du code est uniquement convertie de sa représentation en bytecode à sa représentation en code machine. Sa logique opérationnelle intrinsèque demeure intacte, sans protection particulière. Comprendre son mécanisme de compilation et d'exécution permet néanmoins de reconstituer un code lisible.
Désobfuscation avec vlx-vmengine
Désobfusquer du code Java avec le moteur d'exécution de bytecode JVM vlx-vmengine
Moteur d'exécution de bytecode JVM écrit en Java/Kotlin
Le débogage dynamique traditionnel en Java ne peut s'effectuer qu'à partir du code source. Sans code source ni fichiers de classes Java obfusqués, il est impossible. L'exécution des programmes Java repose sur la JVM, qui utilise le bytecode comme base d'exécution. Nous utilisons Kotlin pour construire un moteur d'exécution de bytecode JVM, compatible avec les IDE modernes tels qu'IDEa, afin de déboguer les programmes Java au niveau du bytecode et d'observer leur comportement lors de l'exécution.
Ingénierie inverse de GraalVM NativeImage
Pour les programmes Java entrés dans l'ère de la compilation binaire, leur code peut-il être facilement décompilé comme à l'époque du bytecode ? Quelles sont les caractéristiques des fichiers binaires compilés par NativeImage ? La robustesse de la compilation binaire est-elle suffisante pour protéger le code critique ? Afin d'explorer ces questions, j'ai récemment développé un outil d'analyse NativeImage qui a permis d'atteindre un certain niveau de dérivation inverse.
Piratage d'une application Java chiffrée avec jhsdb (débogueur HotSpot)
Une solution pour protéger le code Java consiste à chiffrer les fichiers de classe. Ces solutions chargent les fichiers de classe ou JAR chiffrés via un chargeur de classes personnalisé. Cependant, en raison du mécanisme d'attachement de la JVM, cette méthode est inefficace et peut être facilement contournée à l'aide des outils inclus dans le JDK.
Extraction d'informations sur les classes Java à partir de binaires compilés AOT
L'AOT est également considérée comme une solution pour la protection du code Java, mais malheureusement, de nombreux programmes Java sont désormais indissociables du framework. Du fait de la complexité de ce dernier, même les programmes compilés par AOT doivent inclure les informations de classe dans le fichier binaire final généré, et ces fichiers de classe sont soigneusement organisés dans la zone de ressources du fichier binaire.
Qu'est-ce qu'un fichier JARX ?
Le fichier JARX est notre format de fichier d'archive propriétaire, qui utilise le même algorithme de compression Deflate que Zip et l'algorithme de chiffrement AES pour chiffrer les données.
La meilleure solution de protection du code Java au-delà de l'obfuscation
Le chiffrement de votre code protège votre propriété intellectuelle et renforce considérablement la sécurité de vos applications. Il rend le vol de propriété intellectuelle, la falsification de code et la découverte de failles de sécurité tellement complexes et coûteux qu'un simple curieux muni d'un décompilateur Java gratuit ne suffira pas.
Alternative Excelsior JET
Protector4J est bien plus qu'un simple remplaçant pour Excelsior JET