不可不說
          隨心所欲,無往不利!
          posts - 88,  comments - 92,  trackbacks - 0
          Firestorm是一個用JAVA寫的代碼生成工具,可以替你節省很多的代碼量,可以說同類軟件中功能最強的一個。

          Firestorm是一個用JAVA寫的代碼生成工具,可以替你節省很多的代碼量,可以說同類軟件中功能最強的一個。
          你可以在網上下載到最新的2.3試用版本,同時網站會發給你一個試用的license文件。既然是試用,
          那么在使用上肯定有一定的限制。主要限制有3個:
              1.只能最多生成5張表的DAO;
              2.有時間限制;
              3.不能自己定制代碼生成;

          為了能夠更好的試用這個軟件,我得改改它,去掉這些限制。將firestorm.jar打開后,可以看到它使用了
          混淆器進行代碼保護,不同于大多數的混淆器生成的文件,它的class和package大部分都是以關鍵字來命名,
          所以如果你用JAD之類的工具把它反編譯后是不能再把它編譯成功,編譯器會提示出錯誤。

          反編譯后,找到幾個有關注冊的關鍵文件,發現它使用的是數字簽名技術來做的保護,所以想逆向找出
          注冊碼的計算方法是不可行的了,只能通過修改文件的方法來破解。通常我們是先反編譯,然后再修改
          反編譯后生成的原文件,最后再重新編譯。但是由于文件名和包名的關系我們無法進行編譯,除非把它的
          這些‘非法'的文件名和包名全部改成符合java語言規范的名稱,由于類,包眾多,互相調用也很
          頻繁,所以這種方法幾乎不可能的。

          另外一種方法就是使用softice之類的調試軟件來破解,不過這個脫離JAVA的范疇,這里不做討論。

          還有一種方法可能很少有人用,就是先反編譯得到原文件,然后找到關鍵的方法后修改它的字節碼,
          也就是class文件,這中方法往往需要你知道一些有關CLASS文件格式方面的知識(如果沒有也不用擔心),
          有許多的處理字節碼的工具可以幫助你,比較流行的這類工具主要有:apache.org的BCEL;
          jboss.com的javassist;objectweb.org的asm。都是出身名門哈。這3個工具各有特點,
          這次我選用javassist,因為它修改class文件最方便,甚至不需要懂得字節碼和class文件格式。

          讓我們來看看具體步驟:


          step1:
              下載并安裝FIRESTORM。
          step2:
              反編譯jar文件,閱讀代碼,找到關鍵的方法。當然,我這里寫出來,你就不用再麻煩了。(其實這步是最
              麻煩的)。
              找到com.codefutures.if.if文件中的方法
                  public static boolean a(java.security.PublicKey publickey,
                          byte abyte0[], byte abyte1[])
                      throws java.security.NoSuchAlgorithmException,
                      java.security.NoSuchProviderException,
                      java.security.InvalidKeyException,
                      java.security.SignatureException {
                      java.security.Signature signature = java.security.Signature.getInstance("SHA1withDSA", "SUN");
                      signature.initVerify(publickey);
                      signature.update(abyte0);
                      return signature.verify(abyte1);
                  }

              這個方法是對公鑰進行檢驗,修改的思路就是直接讓他返回一個true.

          step2:
              收到firestorm.license文件后不要急著安裝,先修改如下:
                  <custom-codegen>no</custom-codegen>
                      改為
                  <custom-codegen>yes</custom-codegen>

                  <restriction>5</restriction>
                      改為
                  <restriction>none</restriction>

                  <expiry-date>[日期]</expiry-date>
                      改為
                  <expiry-date>never</expiry-date>

              修改后放到firestorm的安裝路徑的license目錄。

          step3:
              修改com.codefutures.if.if的class文件.這里我們需要寫一個小程序來完成實現:
                  import javassist.ClassPool;
                  import javassist.CtClass;
                  import javassist.CtMethod;


                  public class Test {
                      
                      public static void main(String[] args) throws Exception {
                          ClassPool pool = ClassPool.getDefault();

                          //設置目標類的路徑,確保能夠找到需要修改的類,這里我指向firestorm.jar
                          //解包后的路徑
                          pool.insertClassPath("d:/work/firestorm/firestorm") ;    
                          
                          //獲得要修改的類
                          CtClass cc = pool.get("com.codefutures.if.if");
                          //設置方法需要的參數
                          CtClass[] param = new CtClass[3] ;                
                          param[0] = pool.get("java.security.PublicKey") ;
                          param[1] = pool.get("byte[]") ;
                          param[2] = pool.get("byte[]") ;

                          //得到方法
                          CtMethod m = cc.getDeclaredMethod("a", param);
                          //插入新的代碼
                          m.insertBefore("{return true ;}") ;
                          //保存到文件里
                          cc.writeFile() ;
                      }
                  }

              
              修改完后,你可以反編譯修改過的的class文件,看看代碼是否加入成功。

          step4:
              將所有的class文件重新打包成firestorm.jar,然后替換
              [firestorm安裝路徑]/lib/firestorm.jar,再啟動firestorm即可。
          posted on 2008-09-18 15:26 藍劍 閱讀(7703) 評論(0)  編輯  收藏

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


          網站導航:
           


          <2025年6月>
          25262728293031
          1234567
          891011121314
          15161718192021
          22232425262728
          293012345

          常用鏈接

          留言簿(6)

          隨筆分類(62)

          隨筆檔案(90)

          文章檔案(9)

          相冊

          友情鏈接

          搜索

          •  

          積分與排名

          • 積分 - 325661
          • 排名 - 172

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 东阿县| 莱州市| 中方县| 文成县| 西藏| 吉木乃县| 万宁市| 阿拉善左旗| 锡林郭勒盟| 蒙自县| 清涧县| 青铜峡市| 建德市| 新田县| 马山县| 甘孜县| 弋阳县| 澄迈县| 三明市| 新余市| 奉化市| 隆德县| 泸州市| 濉溪县| 屏边| 横山县| 肇东市| 玉树县| 胶南市| 盐池县| 正蓝旗| 白水县| 永定县| 新宁县| 山丹县| 微博| 丰县| 龙游县| 淮安市| 会昌县| 德化县|