Protector4J 工作原理
Protector4J 透過將 jar 檔案轉換為私有加密的 jarx 檔案來保護您的 Java 原始碼,我們從 JVM 和二進位層面採取多種方法來確保應用程式的安全性,提供高強度的應用程式保護。
程式碼混淆的問題
由於JVM位元組碼的高度語義性,極其容易分析和閱讀。透過動態除錯可以輕鬆分析其執行邏輯。編寫動態除錯工具並非非常複雜的任務。因此,混淆不是一個可靠的保護方案。
Class檔案加密的問題
由於JVM附加機制的存在,所有未脫離正常JVM執行的所謂加密程式碼都可以透過附加工具輕鬆讀取。因此,這是最無效的保護方案。
虛擬機器保護的問題
虛擬化保護是最安全的程式碼保護方法,但由於其對效能的顯著影響,無法應用於程式中的所有程式碼。只能保護關鍵程式碼,而其他程式碼仍面臨暴露風險。透過針對其他部分的程式碼,可以獲取虛擬化部分程式碼的功能資訊。
AOT編譯的問題
AOT編譯設定和編譯困難,失敗機率很高。即使編譯成功,程式碼邏輯也只是從位元組碼表示變為機器碼表示。其固有的執行邏輯仍然存在,沒有任何特殊保護。如果能夠理解其自身的編譯和執行機制,仍然可以逆向還原出可讀程式碼。
使用 vlx-vmengine 反混淆
使用JVM位元組碼執行引擎 vlx-vmengine 反混淆Java程式碼
用Java/Kotlin編寫的JVM位元組碼執行引擎
傳統的Java動態除錯只能基於原始碼進行,沒有原始碼或經過混淆的Java class檔案,動態除錯就不可能實現。Java程式的執行基於JVM,JVM以位元組碼作為執行基礎。我們使用Kotlin構建了一個JVM位元組碼執行引擎,可以配合現代IDE(如IDEA)在位元組碼層面除錯Java程式以觀察程式的執行行為。
GraalVM NativeImage 逆向工程
對於已經進入二進位編譯時代的Java程式,其程式碼是否還能像位元組碼時代一樣輕鬆反編譯?NativeImage編譯的二進位檔案有什麼特點?二進位編譯的強度是否足以保護重要程式碼?為了探究以上問題,我最近編寫了一個NativeImage分析工具,已經實現了一定程度的逆向推導。
使用jhsdb(HotSpot除錯器)破解加密的Java應用程式
Java程式碼保護的一種解決方案是加密class檔案。此類方案透過自訂類別載入器載入加密的class或jar檔案,由於JVM附加機制的存在,這種方法無效,可以使用JDK自帶的工具輕鬆破解。
從AOT編譯的二進位檔案中提取Java類別資訊
AOT也被認為是Java程式碼保護的一種方案,但不幸的是,許多Java程式現在無法脫離框架。由於框架的複雜性,即使是AOT編譯的程式也必須在最終產生的二進位檔案中包含類別資訊,而class檔案實際上整齊地排列在二進位檔案的資源區域中。
什麼是JARX檔案
JARX檔案是我們專有的封存檔案格式,使用與Zip相同的Deflate壓縮演算法和AES加密演算法來加密資料。
超越混淆的最佳Java程式碼保護方案
加密程式碼可以保護您的智慧財產權,並大大增強應用程式的安全性。它使智慧財產權竊取、程式碼篡改和安全漏洞的發現變得如此複雜和昂貴,以至於配備免費Java反編譯器的普通窺探者無法做到。
Excelsior JET 替代方案
Protector4J 不僅僅是 Excelsior JET 的替代品