Die Probleme mit Code-Verschleierung

Code-Verschleierung ist die früheste Lösung, die für den Java-Code-Schutz angewendet wird, und sie ist auch die direkteste Lösung.

Code-Verschleierung umfasst in der Regel die folgenden vier Methoden:

  1. Paketname, Klassenname, Variablenname Konvertierung
  2. Kontrollstrukturen ändern sich, wie z. B. eine Abflachung des Kontrollflusses, das Hinzufügen unveränderlicher Prädikate usw.
  3. String-Verschleierung oder Verschlüsselung
  4. Fügen Sie nutzlosen Code hinzu

Code-Verschleierung kann die Lesbarkeit von dekompiliertem Code erheblich verringern und die statische Analyse schwieriger machen, aber unabhängig davon, wie die Code-Verschleierung durchgeführt wird, wird die Ausführungslogik des Programms nicht verändert.

Der JVM-Bytecode ist ein sehr klarer und expliziter semantischer Zwischencode, der gut lesbar ist. Auch wenn verschleierte Klassendateien nicht in lesbaren Java-Quellcode wiederhergestellt werden können, können sie dennoch auf Bytecode-Ebene analysiert werden. Aufgrund der hohen Semantik des Java-Bytecodes ist dieser Vorgang eigentlich relativ einfach.

Wir haben eine JVM-Bytecode-Ausführungs-Engine unter Verwendung der Sprachen Java und Kotlin entwickelt. Benutzer können dieses Projekt verwenden, um Java-Programme auf Bytecode-Ebene in IntelliJ IDEA dynamisch zu debuggen. Weitere Informationen finden Sie im folgenden Artikel.

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

Und wir verwenden diesen Motor, um zu versuchen, einen bekannten verschleierten Code zu knacken, der spezifische Prozess kann in dem folgenden Artikel nachgelesen werden

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

Fazit

Aus der obigen Analyse ist ersichtlich, dass der JVM-Bytecode aufgrund der hohen Semantik sehr einfach zu analysieren und zu lesen ist. Die laufende Logik kann durch dynamisches Debuggen einfach analysiert werden. Das Schreiben dynamischer Debugging-Tools ist keine sehr komplexe Aufgabe, daher ist Verschleierung keine zuverlässige Schutzlösung.