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

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

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

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

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

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

          ???(3)、編寫一個(gè)配置文件,主要是混淆器的一些參數(shù)。比如,下面是一個(gè)例子
          -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.**

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

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

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

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

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

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

          自己的一點(diǎn)工作心得   回復(fù)  更多評論
            
          # re: 代碼混淆器的使用 2008-03-24 20:35 | zzfly
          混淆過程能不能講的具體詳細(xì)點(diǎn),這幾天做代碼混淆,悶了好幾天了,試了好幾個(gè)混淆器都不行~~  回復(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)
          兄臺(tái),我也在學(xué)習(xí)這個(gè),就是用ant打包 不起作用,不知兄臺(tái)可否教教我,不知道500園 可否? 包我用會(huì) 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 會(huì)自動(dòng)生成兩個(gè)文件然后feature 項(xiàng)目加一下版本號最后update 添加新版feature-->build 生成出來的jar包,有的有正常混淆,有的沒有混淆。不懂得還有哪些設(shè)置,或者該注意些什么。

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

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

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


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 达孜县| 峨山| 长海县| 苍山县| 锦屏县| 山阳县| 锡林浩特市| 威远县| 资兴市| 绥宁县| 宁武县| 新源县| 婺源县| 尚志市| 平利县| 宁化县| 姚安县| 云安县| 青河县| 桦南县| 西昌市| 广河县| 克什克腾旗| 湘乡市| 乐都县| 沿河| 玉环县| 成武县| 纳雍县| 平塘县| 壤塘县| 宾阳县| 南和县| 白山市| 新巴尔虎右旗| 嘉鱼县| 望江县| 怀安县| 金塔县| 博白县| 磐石市|