Les problèmes liés à l'obfuscation du code

L'obfuscation du code est la première solution appliquée à la protection du code Java, et c'est aussi la solution la plus directe.

L'obfuscation du code fait généralement appel aux quatre méthodes suivantes :

  1. conversion du nom du package, du nom de la classe et du nom de la variable
  2. Les structures de contrôle évoluent, notamment par l'aplatissement du flux de contrôle, l'ajout de prédicats immuables, etc.
  3. Obfuscation ou chiffrement de chaînes de caractères
  4. Ajouter du code inutile

L'obfuscation du code peut réduire considérablement la lisibilité du code décompilé et augmenter la difficulté de l'analyse statique, mais quelle que soit la manière dont l'obfuscation du code est effectuée, la logique d'exécution du programme ne sera pas altérée.

Le bytecode JVM est un code intermédiaire sémantique très clair et explicite, offrant une excellente lisibilité. Même si les fichiers de classes obfusqués ne peuvent être reconstitués en code source Java lisible, leur analyse au niveau du bytecode reste possible. Grâce à la haute sémantique du bytecode Java, ce processus est relativement simple.

Nous avons développé un moteur d'exécution de bytecode JVM utilisant les langages Java et Kotlin. Ce projet permet aux utilisateurs de déboguer dynamiquement des programmes Java au niveau du bytecode dans IntelliJ IDEA. Pour plus d'informations, veuillez consulter l'article ci-dessous.

https://protector4j.com/articles/jvm-bytecode-engine-written-with-java-and-kotlin/

Nous utilisons ce moteur pour tenter de déchiffrer un code obscurci bien connu ; le processus précis est décrit dans l’article suivant.

http://protector4j.com/articles/deobfuscate-with-vlx-vmengine/

Conclusion

L'analyse précédente montre que, grâce à la haute sémantique du bytecode JVM, celui-ci est très facile à analyser et à lire. La logique d'exécution peut être aisément analysée par débogage dynamique. La création d'outils de débogage dynamique n'étant pas une tâche très complexe, l'obfuscation ne constitue pas une solution de protection fiable.