Les problèmes avec l'obfuscation du code

L'obscurcissement du code est la première solution appliquée à la protection du code Java, mais c'est également la solution la plus directe.

L'obfuscation de code implique généralement les quatre méthodes suivantes:

  1. Conversion de nom de package, de nom de classe et de nom de variable
  2. Les structures de contrôle changent, comme l'aplatissement du flux de contrôle, l'ajout de prédicats immuables, etc.
  3. Obfuscation ou chiffrement de chaîne
  4. Ajouter du code inutile

L'obscurcissement 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'obscurcissement du code est effectué, la logique d'exécution du programme ne sera pas modifiée.

Le bytecode JVM est un code intermédiaire sémantique très clair et explicite, hautement lisible. Pour les fichiers de classe obscurcis, même s'ils ne peuvent pas être restaurés en code source Java lisible, ils peuvent toujours être analysés au niveau du bytecode. En raison de la nature sémantique élevée du bytecode Java, ce processus est en réalité relativement simple.

Nous avons développé un moteur d'exécution de bytecode JVM utilisant les langages Java et Kotlin. Les utilisateurs peuvent utiliser ce projet pour déboguer dynamiquement des programmes Java au niveau du bytecode dans IntelliJ IDEA. Pour plus d’informations, veuillez vous référer à l’article ci-dessous.

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

Et nous utilisons ce moteur pour tenter de craquer un code obscurci bien connu, le processus spécifique peut être consulté dans l'article suivant

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

Conclusion

De l'analyse ci-dessus, on peut voir qu'en raison de la sémantique élevée du bytecode JVM, il est très facile à analyser et à lire. La logique en cours d'exécution peut être facilement analysée grâce au débogage dynamique. L'écriture d'outils de débogage dynamique n'est pas une tâche très complexe, l'obscurcissement n'est donc pas une solution de protection fiable.