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

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

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

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

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

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

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

          各個參數的含義參考proguard文檔,該文檔非常詳細,上手很容易

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

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

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

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

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

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

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

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

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

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

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


          網站導航:
           
          主站蜘蛛池模板: 宜兰县| 扶余县| 庆城县| 巧家县| 永年县| 铜梁县| 沈阳市| 巴楚县| 成安县| 株洲市| 贡山| 仪征市| 龙里县| 平湖市| 青浦区| 苍山县| 光山县| 四川省| 高青县| 江西省| 青浦区| 防城港市| 赣州市| 海林市| 龙游县| 忻州市| 高碑店市| 西吉县| 遵义市| 抚顺市| 德格县| 山西省| 普宁市| 河东区| 宿迁市| 铜鼓县| 祁东县| 冷水江市| 共和县| 西吉县| 靖州|