隨筆-16  評論-54  文章-0  trackbacks-0

          ??? 我們做java開發(fā)的一般都會遇到如何保護(hù)我們開發(fā)的代碼問題。java語言由于是基于jvm上面,所以反編譯class文件很很容易。假如我們做了一個web程序,并把這個web程序發(fā)布給客戶。實際上,客戶是很容易反編譯出我們的源代碼出來,包括所有的src文件和jsp文件等等。

          ???那么,如何保護(hù)我們的源代碼,實際上,應(yīng)該有幾種方法可以使用:1、使用代碼混淆器? 2、重載應(yīng)用服務(wù)器的classloader

          ???對于第一種方法來說,現(xiàn)在外面有很多開源工具可以使用,個人認(rèn)為最好用的當(dāng)屬proguard莫屬。proguard主要是易用易學(xué)。而且提供的功能也挺多。下面是個人一點使用心得

          ???(1)、從網(wǎng)上download proguard工具,proguard工具主要包含是幾個jar文件和一些example,下載地址http://proguard.sourceforge.net/

          ???(2)、將里面的幾個jar文件添加到類路徑下面。當(dāng)然,也可以不添加,但是下面在做混淆的時候,必須指定classpath,使在做混淆的過程中,能否訪問該類

          ???(3)、編寫一個配置文件,主要是混淆器的一些參數(shù)。比如,下面是一個例子
          -injars?????? platform.jar
          -outjars????? platform_out.jar
          -libraryjars? <java.home>/lib/rt.jar
          -libraryjars ibatis-common-2.jar
          -libraryjars ibatis-dao-2.jar
          -libraryjars ibatis-sqlmap-2.jar
          -libraryjars junit-3.8.1.jar
          -libraryjars d:/j2ee.jar
          -libraryjars struts.jar
          -libraryjars commons-lang.jar
          -libraryjars D:/0working/coreproject/byislib/jasperreports-0.6.1.jar
          -libraryjars? commons-beanutils.jar

          -printmapping proguard.map
          -overloadaggressively
          -defaultpackage ''
          -allowaccessmodification
          -dontoptimize

          -keep public class *
          {
          ?public protected *;
          }

          -keep public class org.**

          -keep public class it.**

          各個參數(shù)的含義參考proguard文檔,該文檔非常詳細(xì),上手很容易

          OK,到此就完成了代碼混淆,打開產(chǎn)生的jar包可以看到,多了好多a、b、c之類的類文件。說明混淆結(jié)果已經(jīng)成功。將原jar刪除、運行產(chǎn)生的混淆jar包,一切正常!

          常見問題:使用過程中個人遇到了幾個問題,開始也是找了很久才解決
          ???a. 內(nèi)存溢出異常: 主要是proguard在做混淆的時候,吃了很多內(nèi)存,因此,在運行混淆器的時候,可以增加內(nèi)存,比如 java -mx512m .....
          ? b.棧溢出異常: 主要是proguard在做混淆的時候,會對一些代碼進(jìn)行優(yōu)化,若遇到一些相對復(fù)雜的方法時,可能會拋出此異常。對付的辦法是增加配置參數(shù)-dontoptimize,如上面的配置例子所示

          對于第二種方法,重載服務(wù)器的classloader的原理是這樣。 首先我們通過一定算法把class文件加密; 然后寫我們自己的classloader,替換服務(wù)器的classloader。 這樣,我們可以讀取class文件,通過我們自己的算法反加密成正確的class,然后再次進(jìn)行l(wèi)oad。這個方式還沒應(yīng)用起來,這幾天個人正在研究,有什么新成果會在此做一些總結(jié)。

          posted on 2006-07-24 15:03 jspark 閱讀(7928) 評論(6)  編輯  收藏

          評論:
          # re: 代碼混淆器的使用 2006-07-24 22:40 | hama
          老大,不要用ctrl+c,ctrl+v啊
          總得加點自己的東西啊  回復(fù)  更多評論
            
          # re: 代碼混淆器的使用 2006-07-25 11:49 | jspark
          呵呵,的確是自己原創(chuàng)的!

          自己的一點工作心得   回復(fù)  更多評論
            
          # re: 代碼混淆器的使用 2008-03-24 20:35 | zzfly
          混淆過程能不能講的具體詳細(xì)點,這幾天做代碼混淆,悶了好幾天了,試了好幾個混淆器都不行~~  回復(fù)  更多評論
            
          # re: 代碼混淆器的使用 2009-03-23 21:27 | sandy
          我想問一下:
          -injars platform.jar
          -outjars platform_out.jar
          這里面的platform.jar和platform_out.jar
          都是自己編寫的嗎?分別應(yīng)該包括是什么內(nèi)容啊?

          我剛接觸proguard,還不明白 希望你能幫我解答一下。謝謝您  回復(fù)  更多評論
            
          # re: 代碼混淆器的使用[未登錄] 2009-07-30 16:57 | 海風(fēng)
          兄臺,我也在學(xué)習(xí)這個,就是用ant打包 不起作用,不知兄臺可否教教我,不知道500園 可否? 包我用會 proguard 和tomcat 加密 ? 如果有興趣聯(lián)系:QQ:94784312 Email:gufengset@gmail.com  回復(fù)  更多評論
            
          # re: 代碼混淆器的使用 2010-03-03 16:42 | 黃××
          前提eclipse環(huán)境:
          我的插件結(jié)構(gòu):
          plugin project,
          feature project,
          update project,

          安裝好第三方插件proguard obfuscate4e
          我的混淆操作:
          右擊MANIFEST.MF-->PDE tools-->Create proguard obfuscation configulation 會自動生成兩個文件然后feature 項目加一下版本號最后update 添加新版feature-->build 生成出來的jar包,有的有正常混淆,有的沒有混淆。不懂得還有哪些設(shè)置,或者該注意些什么。

          我的郵箱:dongfengpo25@163.com
          javaeye的問題鏈接:
          http://eclipsercpforum.group.javaeye.com/group/topic/17417#128517

          有興趣的朋友或者能解決此問題的朋友,歡迎一起討論,謝謝!  回復(fù)  更多評論
            

          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 宜兰市| 苍梧县| 富蕴县| 马鞍山市| 浪卡子县| 阿克陶县| 铜陵市| 晋城| 新野县| 年辖:市辖区| 西安市| 玛多县| 汪清县| 浦城县| 县级市| 凌云县| 越西县| 陕西省| 大渡口区| 平南县| 延津县| 合肥市| 保定市| 攀枝花市| 龙岩市| 旅游| 广东省| 汤原县| 革吉县| 敖汉旗| 昌都县| 东光县| 桂林市| 博湖县| 额济纳旗| 龙门县| 措美县| 洛南县| 南安市| 光泽县| 蒙城县|