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:
- Paketname, Klassenname, Variablenname Konvertierung
- Kontrollstrukturen ändern sich, wie z. B. eine Abflachung des Kontrollflusses, das Hinzufügen unveränderlicher Prädikate usw.
- String-Verschleierung oder Verschlüsselung
- 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.