Java代碼威步輕鬆防護

2020-12-06 TechWeb

JAVA 開發語言以其安全性高、代碼優化、跨平臺等特性,迅速取代了很多傳統高級語言,佔據了企業級網絡應用開發等諸多領域的霸主地位。特別是近年來大數據、網際網路+、雲計算技術的不斷發展,Java開發語言更具有不可替代的地位。

不過,JAVA最突出的跨平臺優勢使其要以中間代碼的形式運行在虛擬機環境中,因此JAVA代碼反編譯要比其他開發語言更容易實現,並且反編譯的代碼經過優化後幾乎可與原始碼相媲美。為了避免出現這種情況,保護軟體智慧財產權,有一種叫做Java混淆器的工具被開發出來。

但Java混淆器的作用是對編譯好的代碼進行混淆,使得反編譯後的代碼混亂難懂,真正起的作用只是增加了逆向工程的難度,最終的結果也是治標不治本,對於一些掌握工具的人來說幾乎還是透明的。另外由於Java程序中會有多重映射關係,因此大多數混淆工具的兼容性會很差。

  全自動保護Java程序

德國威步公司的AxProtector Java是一款省時、省力的全自動加密工具,採用AxProtector Java,軟體商無需任何代碼開發,即可輕鬆加密Java應用程式、Jar包、War包,防止反編譯,防止逆向工程,真正實現Java代碼加密。

  AxProtector Java II

威步AxProtector Java II 可對Java SE(J2SE)和Java EE(J2EEn)應用程式、Jar包、War包進行全面而複雜的全自動保護。軟體開發人員可以對各種類(Class)和方法(Method)分別進行加密;如需考慮安全性和性能的平衡,也可在需要的時候對個別類和方法不進行加密。

在集成的時候, AxEngine安全引擎直接被添加至Java應用程式中,在第一次調用應用程式時,AxEngine方法將在運行環境中註冊。所有的類和方法在加載時,都將自動執行該方法,確保加密後的類和方法可以自動解密。Java AxEngine II 安全引擎,由Java組件和本地JNI組成。

  AxProtector Java I

由於考慮兼容原因,威步仍然提供AxProtector Java I 產品。其僅在類層面上加密Java SE應用程式,因此需要對Java應用程式中每一個單獨的類分別進行加密。當然如果為了不影響性能,則需要排除個別類不做加密。

在集成的時候,AxEngine安全引擎將作為一個外殼類添加至Java應用程式中。

該外殼類將作為應用程式中新的主類,並首先執行。外殼類運行時首先需要加載「威步類加載器」,然後加載原程序的主類,同時「威步類加載器」負責對加密過的類進行解密。Java AxEngine I 安全引擎,由Java組件和本地JNI組成。

  使用JNI提升安全

代碼解密和大部分的安全檢查工作均由AxEngine引擎中的本地JNI完成。如果沒有相應的CmDongle硬體狗授權或CmActLicense軟授權,則代碼無法解密並運行。相比純Java解決方案,使用本地組件(JNI)可以顯著增強安全性。此類本地組件可支持Windows、MacOS以及Linux等作業系統。

AxProtector Java提供最先進的反調試機制加載至Java應用程式中,確保是受保護的應用程式運行在原Java虛擬機中。任何篡改或本地虛擬機轉存等行為,均會被檢測到,並阻止解密受保護的類。另外,該工具也能實時偵測JVMTI等調試工具。

  使用CodeMeter API提升安全

與集成CodeMeter API相比, AxProtector Java是以極小的使用成本實現高強度保護方案。如果希望更進一步的達到更高的安全強度,建議軟體商可以額外選擇使用CodeMeter API。軟體商如果使用CodeMeter API中的加密函數,則可更進一步增加數據安全和通訊安全,並且實現軟體分模塊授權管理等功能。

 使用分授權提升安全

使用AxProtector Java,可以使用不同的產品碼加密Java程序中的不同功能模塊。軟體商只需分發所有授權中的一部分,則用戶只能使用其購買的模塊或功能。使用CodeMeter API,軟體商也可實現軟體圖形元素(比如按鈕或菜單)的啟用或禁用功能。

使用多個不同的產品碼可以實現最大的安全性,每個產品碼使用不同的AES密鑰加密程序。如果沒有相對應的產品碼存在,則相應密鑰不存在,並且無法授權解密相應的程序。

  純代碼保護防止逆向工程

與威步其他軟體加密產品一樣,AxProtector Java產品也提供純代碼保護(Protection Only)方案。最終用戶無需購買任何硬體加密狗或軟授權,即可運行加密後的Java應用程式、Jar包或War包。軟體商只需將CodeMeter Runtime與已經激活的授權和Java應用程式一起發行即可。Java應用程式的解密是發生在CodeMeter Runtime的本地部分裡,相比純Java方案,其安全標準更高。

威步總部位於德國科技中心——卡爾斯魯厄,是當今德國唯一的一家集開發、生產及銷售於一體的軟體保護開發公司,專注該領域27年,一直致力於提供智慧財產權保護、防惡意篡改以及建立靈活授權的管理方案、解決方案。近年來,威步持續大力投入研發領域,與合作夥伴在軟體加密解決方案、加密狗硬體、嵌入式系統加密解決方案、授權增值服務等領域全面開展合作,持續向客戶提供威步系統數字安全、智慧財產權保護和完整性保護等系列產品,更多安全防護知識您可以在微信中搜索「威步信息」關注更多相關信息!

相關焦點

  • Java程式設計師必備基礎:Java代碼是怎麼運行的?
    運行時創建對象 方法調用,執行引擎解釋為機器碼 CPU執行指令 多線程切換上下文 編譯 我們都知道,java代碼是運行在Java虛擬機上的。
  • (提高Java代碼質量)|25個優化Java代碼的小技巧
    反例:4.集合初始化儘量指定大小java 的集合類用起來十分方便,但是看源碼可知,集合也是有大小限制的。每次擴容的時間複雜度很有可能是 O(n) ,所以儘量指定可預知的集合大小,能減少集合的擴容次數。反例:正例:5.字符串拼接使用 StringBuilder一般的字符串拼接在編譯期 java 會進行優化,但是在循環中字符串拼接,java 編譯期無法做到優化,所以需要使用 StringBuilder 進行替換。
  • Android被指抄襲Java代碼引爭議
    Mueller仔細檢查了Android的代碼,除了甲骨文在訴訟中提到的一個文件之外,他還發現了六個與Java文件非常相似的文件。這些文件是在Android 2.2版和2.3版中發現的。此外,Mueller指出,在Android的代碼中有三十七個文件包含一些提示,稱這個代碼是Sun專有的代碼。
  • 一些防止java代碼被反編譯的方法
    舉報   作者 | Zzzkis  來源 | urlify.cn/2u2yEb  76套java
  • 如何用java判斷一個數是不是質數?
    哈嘍大家好,這是java小白成長記!昨天分享了怎麼判斷一個數是不是迴文數,目的是為了鞏固一下if選擇語句和求餘數運算符,今天分享一下怎麼判斷一個數是不是質數,可以鞏固for循環、if選擇語句、還有沒怎麼使用過的基本數據類型Boolean。
  • 跟我學java編程—認識java語言的字符類型
    用記事本打開「CharSample.java」文件,輸入以下代碼:編譯「CharSample.java」文件,在命令行窗口輸入「javac CharSample.java」並執行命令,編譯通過後,在命令行窗口輸入「java CharSample」運行Java程序,命令行窗口顯示如下信息:
  • VSCode 6 月 Java 更新,編輯器就該有編輯器的樣子
    VSCode 不斷在改進對 Java 語言的支持,前陣子微軟為 Java 開發者推出了一個 VSCode 安裝程序 Visual Studio Code Java Pack Installer,讓開發者可以快速配置好 Java 開發環境,更輕鬆地開始上手編碼
  • Java基礎教程:java反射機制教程
    請看下面的代碼: 這是一個最簡單不過的類,當我們使用的時候直接new出來一個User對象即可。這時候java語言在設計的時候為我們提供了一個機制,就是反射機制,他能夠很方便的去解決我們的問題。
  • Java常見內存溢出異常分析
    編譯運行上述代碼後, 會有如下輸出:   》》》java -Xms10m - Xms10m-XX:HeapDumpOnOutOfMemoryError com.test.OutOfMemoryErrorTest 16-10-12 10:28   java.lang.OutOfMemoryError:Java heap
  • Java8 lambda表達式語法
    但是有一點這裡強調一下(Windows系統):目前我們工作的版本一般是java 6或者java 7,所以很多人安裝java8基本都是學習為主。這樣就在自己的機器上會存在多版本的JDK。而且大家一般是希望在命令行中執行java命令是基於老版本的jdk。但是在安裝完jdk8並且沒有設置path的情況下,你如果在命令行中輸入:java -version,屏幕上會顯示是jdk 8。
  • 跟我學java編程—認識java的整數類型
    示例2:int類型的溢出在D盤Java目錄下,新建「OverFlow.java」文件。用記事本打開「OverFlow.java」文件,輸入以下代碼:編譯「OverFlow.java」文件,在命令行窗口輸入「javac OverFlow.java」並執行命令,編譯器顯示如下信息:編譯器給出過大的整數錯誤信息,num的數值明顯超出的int所能表示的最大值。
  • Java中Lambda表達式的5種不同語法
    1.標準語法考慮以下示例:String[] arr = {"program", "creek", "is", "a", "java", "site"};Arrays.sort在這種情況下,它是一個單一表達式-Integer.compare(m.length(), n.length())Output:[a, is, java, site, creek, program]2.可以推斷參數類型
  • 用經典案例來幫助初學者解析Java的「多態」
    概念:Java中這種相同類型的對象(或說是「變量」)、調用了相同的方法、執行的具體代碼卻不同、運行的結果也不同的現象,我們稱之為「多態」!這裡理論上的東西咱就先往後放一放,咱們先看看案例中的具體代碼、品一品、悟一悟、回味回味,可能就已經透徹了很多!
  • smart-doc 1.9.7 發布,Java 零註解文檔生成工具
    smart-doc是一款同時支持java restful api和apache dubbo rpc接口文檔生成的工具
  • 跟我學java編程—Java邏輯運算符
    示例1:邏輯運算符在D盤Java目錄下,新建「LogicSample.java」文件。用記事本打開「LogicSample.java」文件,輸入以下代碼:代碼結構分析程序功能主要是演示邏輯運算符的用法。類似語句「bJudge = !
  • Java之Random類的簡單介紹
    第一步,導包:import java.util.Random第二步,創建:Random a=new Random();小括號是可以留空的第三步,使用:如果要獲取一個隨機數int數字(範圍是int所有範圍,有正負兩種):int num=a.nextInt();為了方便大家的理解,小編就先粘幾行代碼,是一個比較簡單的猜數字小遊戲,代碼如下:
  • Java編程中基礎反射詳細解析
    類加載器負責加載所有的類,系統為所有加載到內存中的類生成一個java.lang.Class 的實例。那麼我們便可以更靈活的編寫代碼,代碼可以在運行時裝配,無需在組件之間進行原始碼連結,降低代碼的耦合度;還有動態代理的實現等等。
  • 深入分析java中的多態(從jvm角度分析)
    二、代碼實現多態1、類內部之間得多態:方法重載從上述代碼我們可以看到,在類的內部可以有相同的方法名,但是有唯一的參數列表。當然返回類型和修飾符也可以不同。下面我們再看一下類之間的多態。1、jvm內存在上面的代碼中我們其實已經看到了,不管是類內部之間實現的多態,還是類之間實現的多態,這些方法的名字其實都是一樣的,那我們的程序在運行的時候,底層虛擬機是如何去區分的呢(java虛擬機實現動態調用)?為此我們還是先從java虛擬機講起。
  • Java8 lambda表達式
    匿名內部類是為了讓java程式設計師傳遞行為和傳遞數據一樣容易,不幸的是,他們並不容易,為了調用處理邏輯的代碼仍然有四行模板代碼,重複的模板代碼並不是唯一的問題,這種代碼也難以閱讀,我們並不想傳遞一個對象,而僅僅只需要傳遞某種行為,在java8中我們可以寫得更簡潔不同於傳遞一個實現某個接口的對象,我們傳遞了一段沒有命名函數的代碼
  • 打工人打工魂,打工的必會java調用python的幾種用法
    /download.html下載Jython的jar包或者在maven的pom.xml文件中加入如下代碼:<dependency>java<groupId>org.python</groupId> <artifactId>jython-standalone</artifactId> <version