1. 程式人生 > >常見的5種方式看保護java程式碼(混淆器)

常見的5種方式看保護java程式碼(混淆器)

在java程式碼中往往包含著一些非常敏感的資訊,有些關係到開發者的利益,有些可能因為使用環境不同而關係到軟體使用者的利益,於是,java程式是赤膊上陣還是全副武裝這個現實問題就擺在了java開發人員的面前,所以在這種情況下,從開發商和使用者兩方面角度考慮,都非常有必要對java程式進行保護。以下從技術角度就常見的保護措施和常用工具來看看如何有效保護java程式碼:

  將java包裝成exe

  特點:將jar包裝成可執行檔案,便於使用,但對java程式沒有任何保護。

  不要以為生成了exe就和普通可執行檔案效果一樣了。這些包裝成exe的程式執行時都會將jar檔案釋放到臨時目錄,很容易獲取。

  常用的工具有exe4j、jsmooth、NativeJ等等。jsmooth生成的exe執行時臨時目錄在exe所在目錄中或是使用者臨時目錄 中;exe4j生成的exe執行時臨時目錄在使用者臨時目錄中;NativeJ生成的exe直接用winrar開啟,然後用zip格式修復成一個jar文 件,就得到了原檔案。如果只是為了使用和釋出方便,不需要保護java程式碼,使用這些工具是很好的選擇。

  java混淆器

  特點:使用一種或多種處理方式將class檔案、java原始碼進行混淆處理後生成新的class,使混淆後的程式碼不易被反編譯,而反編譯後的程式碼難以閱 讀和理解。

  這類混淆器工具很多,而且也很有成效。

  缺點:雖然混淆的程式碼反編譯後不易讀懂,但對於有經驗的人或是多花些時間,還是能找到或計算出你程式碼中隱藏的敏感內容,而且在很多應用中不是全部程式碼都能 混淆的,往往一些關鍵的庫、類名、方法名、變數名等因使用要求的限制反而還不能混淆。

  隔離java程式到服務端

  特點:把java程式放到服務端,讓使用者不能訪問到class檔案和相關配套檔案,客戶端只通過介面訪問。

  這種方式在客戶/服務模式的應用中能較好地保護java程式碼。

  缺點是:必須是客戶/服務模式,這種特點限制了此種方式的使用範圍;客戶端因為邏輯的暴露始終是較為薄弱的環節,所以訪問介面時一般都需要安全性認證。

  java加密保護

  特點:自定義ClassLoader,將class檔案和相關檔案加密,執行時由此ClassLoader解密相關檔案並裝載類,要起到保護作用必須自定 義原生代碼執行器將自定義ClassLoader和加密解密的相關類和配套檔案也保護起來。

  此種方式能很有效地保護java程式碼。

  缺點:可以通過替換JRE包中與類裝載相關的java類或虛擬機器動態庫截獲java位元組碼。

  jar2exe屬於這類工具。

  提前編譯技術(AOT)

  特點:將java程式碼靜態編譯成本地機器碼,脫離通用JRE。

  此種方式能夠非常有效地保護java程式碼,且程式啟動比通用JVM快一點。

  具有代表性的是GNU的gcj,可以做到對java程式碼完全提前編譯,但gcj存在諸多侷限性,如:對JRE 5不能完整支援、不支援JRE 6及以後的版本。

  由於java平臺的複雜性,做到能及時支援最新java版本和JRE的完全提前編譯是非常困難的,所以這類工具往往採取靈活方式,該用即時編譯的地方還是 要用,成為提前編譯和即時編譯的混合體。

  缺點:由於與通用JRE的差異和java運用中的複雜性,並非java程式中的所有jar都能得到完全的保護;只能使用此種工具提供的一個執行環境,如果 工具更新滯後或你需要特定版本的JRE,有可能得不到此種工具的支援。

  Excelsior JET屬於這類工具。

  使用jni方式保護

  特點:將敏感的方法和資料通過jni方式處理。

  此種方式和“隔離java程式到服務端”有些類似,可以看作把需要保護的程式碼和資料“隔離”到動態庫中,不同的是可以在單機程式中運用。

  缺點和上述“隔離java程式到服務端”類似。

  不脫離JRE的綜合方式保護

  特點:非提前編譯,不脫離JRE,採用多種軟保護方式,從多方面防止java程式被竊取。

  此種方式由於採取了多種保護措施,比如自定義執行器和裝載器、加密、JNI、安全性檢測、生成可執行檔案等等,使保護力度大大增強,同樣能夠非常有效地保 護java程式碼。

  缺點:由於jar檔案存在方式的改變和java運用中的複雜性,並非java程式中的所有jar都能得到完全的保護;很有可能並不支援所有的JRE版本。

  JXMaker屬於此類工具。

  用加密鎖硬體保護

  特點:使用與硬體相關的專用程式將java虛擬機器啟動程式加殼,將虛擬機器配套檔案和java程式加密,啟動的是加殼程式,由加殼程式建立一個與硬體相關的 受保護的執行環境,為了加強安全性可以和加密鎖內植入的程式互動。

  此種方式與以上“不脫離JRE的綜合方式保護”相似,只是使用了專用硬體裝置,也能很好地保護java程式碼。

  缺點:有人認為加密鎖使用者使用上不太方便,且每個安裝需要附帶一個。

  從以上描述中我們可以看出:

  各種保護方式都有其優缺點,應根據實際選用

  要更好地保護java程式碼應該使用綜合的保護措施

  單機環境中要真正有效保護java程式碼,必須要有原生代碼程式配合

  當然,安全都是相對的,一方面看你的保護措施和使用的工具能達到的程度,一方面看黑客的意願和能力,不能只從技術上保護智慧財產權。總之,在java 程式碼保護方面可以採取各種可能的方式,不可拘泥於那些條條框框。

【CSDN 7月23日訊息】從事Java程式設計的人都知道,可以通過逆向工程反編譯得到Java程式的原始碼,這種反編譯工具之一就是JAD。因此,為保護我們的勞動成果,儘可能給反編譯人員製造障礙,我們可以使用Java Obfuscator(Java混淆器)保護Java的類檔案。

Java Obfuscator的原理就是將位元組碼轉換為一個邏輯上的對等物,這種轉換後的版本極難拆散。即使有人試圖去反編譯,過程將極其艱難複雜,並很難繞過轉換後模糊晦澀的編碼。主要的過程如下:

用一個常規編譯器(比如JDK)編譯Java原始碼執行混淆器,在受保護的環境下生成編譯類檔案。最後生成的會是一個不同的輸出文件,也許副檔名也會不同。

這個被重新命名為.class file的檔案在功能上與原位元組碼是對等的,由於虛擬機器仍然可以對其進行解譯,因此對效能不會產生影響。

以下是一些可用來混淆(obfuscate)Java位元組碼的工具:

Zelix KlassMaster

Zelix KlassMaster是一款用Java寫的實用工具,能讀取和修改Java類檔案,可以執行在任何支援1.1.6版Java虛擬機器的平臺上。
下載:http://www.zdnetindia.com/downloads/info/898255.html

Cinnabar Canner

Canner通過建立一個原生Windows可執行檔案(EXE檔案)保護你的程式碼不被逆向工程反編譯,這個可執行檔案包含了你的應用程式類和資源的全部加密版本,只有在被JVM呼叫到記憶體中時才處於非加密狀態。
網站:http://www.cinnabarsystems.com/canner.html
下載:http://www.cinnabarsystems.com/download.html

Jmangle Java類粉碎機

Jmangle是用來阻止反編譯Java程式,降低盜版的軟體,開發者可用其粉碎類檔案中的符號。
網站:http://www.elegant-software.com/software/jmangle/
下載:http://www.elegant-software.com/software/jmangle/download.html

RetroGuard

JavaGuard是一款通用的位元組碼混淆器,用來無縫融入你的日常構建和測試過程中,使得你辛苦編寫寶貴的Java程式碼更加安全。
網站:http://java-source.net/open-source/obfuscators/javaguard

JODE

JODE是一款含Java解碼器和優化器的java包。
網站:http://java-source.net/open-source/obfuscators/jode

最後要說的是,你也可使用其他幾款類似的實用工具,這些工具運用許多不同的方法達到了相同的目標。他們也有共同之處,就是允許通過不同的過程轉換生成.exe檔案,將.class和.jar檔案模糊化。Google Directory上有一張它們的綜合列表:
http://directory.google.com/Top/Computers/Programming/Languages/Java/Development_Tools/Obfuscators