虛擬化保護方案的問題

混淆可以增加靜態分析的難度,但無法有效防止動態分析。程式碼虛擬化的目的是增加動態分析的難度。

Java 程式碼虛擬化是透過建構自訂虛擬化引擎來實現的,使原本可以直接執行的位元組碼透過這些虛擬化引擎來執行。由於是自訂虛擬化引擎,外界無法直接存取其執行方式、指令格式等資訊。此外,它會導致程式碼大幅膨脹,使得難以逆向工程出包含原始語義資訊的程式碼。

虛擬化對效能的影響

虛擬化保護是一種極為強大的程式碼保護方案,但虛擬化保護最大的問題是效能。自訂虛擬化引擎難以採用像 JVM 那樣的眾多效能最佳化措施,也無法應用 JIT 等效能最佳化技術。您可以嘗試使用我們之前提到的 JVM 引擎來執行與普通 JVM 相同的程式碼並比較效能,可能會產生超過 100 倍的效能差異。

結論

虛擬化保護是最安全的程式碼保護方法,但由於其對效能的顯著影響,無法應用於程式中的所有程式碼。它只能保護關鍵程式碼,而其他程式碼仍然存在暴露的風險。透過針對其他部分的程式碼,可以獲取虛擬化部分程式碼的功能資訊。