Java Web應用軟件保護方法


1 代碼混淆概述
目前針對Java源文件方法主要有以下幾種方法:本
地編譯技術、數字水印技術、ClassLoader加密技術以及代
碼混淆技術。
Java本地編譯是指將Java應用程序編譯成本地應用
程序,如Windows平台下名為exe的應用程序。通過java
虛擬機將由源代碼生成Java類文件,再將類文件編譯成
可執行文件。
用該技術生成的本地應用程序是二進制格式的可執
行文件,但該方法犧牲了Java的跨平台特性,對於桌面應
用程序的開發問題不大,但對於web應用程序的開發,則
是一個致命缺陷。同時該方法技術層面還存在不成熟,支
持不完善的問題,不適合采用。
ClassLoader的基本目標是對類的請求提供服務。當
JVM 需要使用類時,它根據名稱向ClassLoader請求這個
類,然后ClassLoader試圖返回一個表示這個類的Class
對象。通過覆蓋對應於這個過程不同階段的方法,可以創
建定制的ClassLoader。在裝入原始數據后先進行解密,
然后再轉換成Class對象。由於把原始字節碼轉換成
Class對象的過程完全由系統負責,因此只需先獲得原始
數據,接着就可以進行包含解密在內的任何轉換。
這種方案比其他方案更加安全,然而這種加密方法存
在一個漏洞,由於ClassLoader的類是用Java編寫的,如
果對ClassLoader類進行反編譯,提取其中解密算法,就可
解密所有被加密的其他類。
數字水印技術是將一些標識信息(即數字水印)直接
嵌入數字載體(包括多媒體、文檔、軟件等)當中,但不影響
原載體的使用價值,也不容易被人的知覺系統覺察或注意
到。通過這些隱藏在載體中的信息,可以達到確認內容創
建者、購買者、傳送隱秘信息或者判斷載體是否被篡改等
目的。在需要證明程序是否非法使用時,數字水印就變得
很重要。使用水印技術並不能阻止類文件被反編譯,但是
可以在需要確認某些程序是否屬於剽竊時提供有效證據。
它可以有效地保證開發者對該程序的版權。
然而數字水印技術只是一種被動防御技術,只能在侵
權已經發生后,為證明產權的歸屬提供證據時發揮作用,
而不能從根本上防止侵權行為的發生。
代碼混淆是將計算機程序的代碼,轉換成一種功能上
等價,但是難於閱讀和理解的形式的行為。代碼混淆可以
用於程序源代碼,也可以用於程序編譯而成的中間代碼。
代碼混淆技術是目前比較成熟和流行的Java類文件保護
方法,其本質上是類文件模糊技術。處理以后的類文件功
能和處理以前的類文件功能在邏輯上是等同的,即運行后
能夠得到一樣的輸出結果。
Java因其具有跨平台性、開放性和高度成熟等特性得
到了廣泛應用。目前的應用主要是Web應用程序。web
應用程序常以War包的方式發布。對這些封裝包最常見
的保護方法是代碼混淆技術。
一些專業代碼混淆工具的效果已經非常成熟,如:
ProGuard、JavaGuard、RetroGuard等,合理使用這些工具
就可以對自己的產品起到很好的保護作用。使用代碼混
淆工具,操作簡單便捷,能讓開發團隊專注業務的開發。
被混淆的代碼難於理解,因此調試除錯也變得困難起來。
開發人員通常需要保留原始的未混淆的代碼用於調試。
代碼混淆並不能真正阻止反向工程,只能增大其難度。因
此,對於對安全性要求很高的場合,需要配合使用軟件授

2 軟件授權設計與實現
2.1 授權方法選取
一般商用軟件的授權方式分為3種:序列號、聯網認
證、授權碼。序列號方式是最常見的軟件授權方式,也為
絕大多數商用軟件所采用,它的安全性最低,最容易盜版,
但這類軟件大多為通用型軟件,有廣大的用戶群,廠商依
然能獲得足夠的利潤。多為桌面系統軟件所采用。聯網
認證則是隨着互聯網的飛速發展,而出現的新型軟件授權
方式,已經在Microsoft和Adobe等廠商的產品中得到廣
泛應用,首先要開發一個客戶端驗證軟件,其次還要架設
專門的提供驗證授權服務的網站,從技術成本和資金成本
上來講,都不適合中小軟件公司;也不適用於專用性較強,
用戶群較小的軟件。在完成軟件開發后,如果不想被盜
版,可以采用授權碼的方式來保護成果。它的步驟可以簡
單歸結如下:
① 程序獲得運行機的唯一標識(如:網卡硬件地址、
CPU ID序列號、硬盤序列號等);② 程序將獲得的唯一標
識加密(可靈活選用各種加密算法進行加密),然后由用戶
或者程序自動將加密后的標識作為申請碼發送給軟件的
開發方;③ 開發者將加密后的唯一標識解密,然后開發者
再將唯一標識加密作為授權碼發送給客戶注冊;④ 客戶將
開發者發送的授權碼進行注冊解密,解密后的內容其實就
是:唯一標識;⑤ 每當程序啟動,首先解密已獲取的授權
碼,然后讀取網卡硬件地址、CPU ID序列號、硬盤序列號
等,進行驗證,比較兩個標識是否一致。如果經比較一致,
則認為是合法授權安裝,程序正常啟動;如不一致,則認為
是非法授權安裝,程序停止啟動。
獲取運行機唯一標識的時候,可以靈活選取網卡硬件
地址、CPU ID序列號、硬盤序列號中的一種或幾種來進
行,雖說CPU ID序列號是唯一的,但從實際經驗來看,仍
然存在同一廠商,同型號CPU ID序列號相同的情況,硬
盤也存在這個問題,或者存在某些硬件信息無法獲取的情
況。從軟件可靠性方面考慮,真正唯一的是網卡硬件地
址,在做標識獲取的時候,最好包括運行機網卡硬件地址。
采用授權碼的方式實際上是用軟件的方式來代替硬件加
密狗的功能,它相比硬件加密狗的優勢在於,費用低廉、不
易破解、一旦軟件被人破解,開發者無需對軟件做過多改
動,只需更改獲取標識碼的硬件組合,再變換加密算法,即
可應對破解,這對於投入高、用戶群小、專業性強的軟件是
最優選擇。
2.2 授權實現
由於Java的安全機制不允許程序直接訪問系統硬
件,因此無法在程序中直接獲得用戶的主機硬件信息,要
解決這個問題,傳統的方式是使用Java的JNI接口。JNI
允許Java代碼使用以其它語言(如C和C” )編寫的代碼
和代碼庫。使用JNI技術能獲取系統的硬件信息來做唯
一標識,但這樣破壞了Java Web開發最重要的特性可移
植性。因此通常在用Java實現的系統中如果要查詢本機
的網卡硬件地址,往往采用先借助運行時(Runtime)對象
運行與網絡參數配置相關的操作系統命令(Windows-ip—
config/all;Unix、Linux—ipconfig)然后從其運行結果中獲
取網卡硬件地址信息的做法。這種方法存在明顯的不足:
① 跨平台通用性不強,因不同操作系統用於查詢網卡硬件
地址的命令不同。需要針對不同操作系統提供不同方案;
② 可靠性不佳,在Unix/Linux下通常只有root用戶才有
執行ifconfig命令的權限。普通用戶沒有相應權限,無法
獲取網卡硬件地址。從JDK1.4開始,java.net包中提供
了一個Networklnterface類,該類中封裝了與網絡接口相
關的信息。調用其中相關的API即可獲取MAC地址。
借助該方法可用純Java方式方便地獲取本機的硬件地址
信息,而且該方法具備跨平台、無須Root權限的特點,能
克服傳統實現方法的缺陷,滿足網絡應用程序中獲取網卡
硬件地址並加以應用的要求。
為方便對客戶的系統進行授權,需要開發一個授權號
生成軟件,考慮到整個系統的一致性,可以考慮使用Java
Swing來進行,但在Eclipse下進行Swing開發,相應的插
件要么需要收費,要么配置繁瑣,開發Swing最好的工具
是Netbeans,可視化程度非常高,完全支持所見即所得的
效果,深受業界推崇。
3 結束語
世界上不存在無法破解的軟件,只要破解方投入足夠
的人力和資金,肯定能有所收獲。開發的軟件無法破解,
不是最終目標,只要讓破解方的投入高於收益,加密授權
策略就取得了成功。我們采取授權碼和代
碼混淆的策略,對該軟件進行保護,經眾多用戶使用實踐
證明,效果良好,有力地保護了我方的知識產權免受侵害。
隨着技術的飛速發展,還需要進一步完善Java的軟件保
護機制。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM