Java代碼加密與反編譯(一):利用混淆器工具proGuard對jar包加密



        Java 代碼編譯后生成的 .class 中包含有源代碼中的所有信息(不包括注釋),尤其是在其中保存有調試信息的時候。所以一個按照正常方式編譯的 Java .class 文件可以非常輕易地被反編譯。通常情況下,反編譯可以利用現有的工具jd-gui.exe或者jad.exe。

(這兩個反編譯工具在我的資源里有下載:

jd-gui.exe: http://download.csdn.net/detail/dianacody/7760019

jad.exe: http://download.csdn.net/detail/dianacody/7760093

       有些情況下,為了保護java源碼不被別人看到,通常會使用加密手段對java源碼進行加密,加密的方式可以利用加密工具(比如java代碼混淆工具)、使用加密算法(如DES算法)修改classloader對編譯好的.class文件進行加密。

(注:這里推薦一款java代碼混淆器,可以混淆函數變量、類、方法名以實現代碼加密:proGuard: http://download.csdn.net/detail/dianacody/7760089

 

一、用java混淆器工具proGuard實現加密

這里使用proGuard對jar包進行加密。

1. 解壓下載的proguard,解壓后進入lib文件把proguard.jar拷貝到自己新建的文件夾里如圖:


2. 把需要混淆的jar和jar所依賴的包也放到新建的文件夾,都放在一起,如下圖。


3. 寫一個配置文件,名稱自己定,例如”a”文件,舉個簡單配置文件例子(那個proguard.map是過后自己生成的),內容如下,其中-injars:是你需要混淆的jar,-outjars:是你混淆后輸出的jar,-libraryjars:是你混淆的jar需要所依賴的jar包,后面的不在一一說明,可以參考proguard文檔,配置文件可以參考文檔來對自己混淆的需求來寫配置文件。

-injars       TheFirstDesktopApplication1.jar

-outjars      TheFirstDesktopApplication1_out.jar

-libraryjars  <java.home>/lib/rt.jar

-libraryjars appframework-1.0.3.jar

-libraryjarsswing-worker-1.1.jar

-printmappingproguard.map

-overloadaggressively

-defaultpackage ''

-allowaccessmodification

-dontoptimize

 

-keep public class*

{

 public protected *;

}

 

-keep public classorg.**

 

-keep public classit.**

 

4.   把配置文件保存到你建的文件夾下,如下圖。


5.點擊開始,運行,輸入cmd,進入你建的文件夾下,如下圖。


6.   然后輸入命令語句:java   -jarproguard.Jar  @a 然后回車,如下圖。



7.   混淆成功,在產生TheFirstDesktopApplication1_out.jar如下圖。


8.      混淆器后,利用反編譯器jad對沒TheFirstDesktopApplication1_out.jar反編譯,多了好多a,b,c之類的類文件,對反編譯的java文件是很難編譯的,即說明混淆成功。

 

        用上面方法試了一下,發現其實混淆效果並不好,使用jd-gui反編譯工具就可以輕易看到源碼。總結一下,網上找了幾個代碼混淆工具效果都不好,其實現成工具看來也並不是那么好用。

        然后想想,就換了一種方式,直接使用加密算法對java代碼進行解密。在下篇文章里再寫。




免責聲明!

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



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