Probleme mit Virtualisierungsschutz-Lösungen
Obfuskation kann die Schwierigkeit der statischen Analyse erhöhen, kann aber dynamische Analyse nicht effektiv verhindern. Der Zweck der Code-Virtualisierung besteht darin, die Schwierigkeit der dynamischen Analyse zu erhöhen.
Die Java-Code-Virtualisierung wird durch den Aufbau benutzerdefinierter Virtualisierungs-Engines erreicht, die es ermöglichen, Bytecodes, die direkt ausgeführt werden könnten, über diese Virtualisierungs-Engines auszuführen. Da es sich um eine benutzerdefinierte Virtualisierungs-Engine handelt, kann die Außenwelt nicht direkt auf ihre Ausführungsmethode, ihr Befehlsformat und andere Informationen zugreifen. Darüber hinaus führt dies zu einer erheblichen Code-Expansion, was es schwierig macht, den Code mit seinen ursprünglichen semantischen Informationen zurückzuentwickeln.
Die Auswirkung der Virtualisierung auf die Leistung
Virtualisierungsschutz ist eine extrem starke Code-Schutzlösung, aber das größte Problem beim Virtualisierungsschutz ist die Leistung. Benutzerdefinierte Virtualisierungs-Engines können nur schwer die zahlreichen Leistungsoptimierungsmaßnahmen wie die JVM übernehmen und können keine Leistungsoptimierungstechniken wie JIT anwenden. Sie können versuchen, die zuvor erwähnte JVM-Engine zu verwenden, um denselben Code wie eine normale JVM auszuführen und die Leistung zu vergleichen, was zu einem Leistungsunterschied von über dem 100-fachen führen kann.
Fazit
Virtualisierungsschutz ist die sicherste Code-Schutzmethode, aber aufgrund seiner erheblichen Auswirkung auf die Leistung kann er nicht auf den gesamten Code eines Programms angewendet werden. Er kann nur kritischen Code schützen, während anderer Code weiterhin dem Risiko der Offenlegung ausgesetzt ist. Durch die Analyse anderer Codeteile kann man funktionale Informationen über den virtualisierten Codeabschnitt erhalten.