Java 目標文件的修改

          Posted on 2006-08-13 16:22 小螞蟻 閱讀(299) 評論(0)  編輯  收藏 所屬分類: Java 相關

          以前一直在win32匯編里打滾,對于修改一個exe文件是件很容易的事情,但到了java下發現想修改一個
          沒源碼的.class文件還真是個問題,上網看了一大堆資料,有ASM和Javassist可以做這事情,ASM看上去
          很專業,但看了文檔好象要在op code的級別下寫代碼,頭暈。Javassist簡單些,看完幾個sample心里基本
          有數了,隨手找來一個有日期限制的Taglib,關鍵的代碼猜都不用猜在License.class里,反編譯后:
          ??
          public static LicDate d()
          {??
          ? String s = Dec("^%$&^%&*%&");
          ? return new LicDate.newInstance(Dec("%&&(*(&$%%"), s);
          }

          s里放著用Dec解碼的日期,自己寫個小程序:

          import javassist.*;

          public class Crack {
          ?public static void main(String args[])
          ?{
          ??try
          ??{
          ??? ClassPool pool = ClassPool.getDefault();
          ??? pool.insertClassPath("./taglib");
          ??? CtClass License = pool.get("License");
          ???
          ??? CtMethod a = License.getDeclaredMethod("d");
          ??? a.insertBefore("{return LicDate.newInstance(\"MM-dd-yyyy HH:mm:ss\",\"21-30-2088 01:01:01\");}"
          ??? License.writeFile();
          ??}
          ??catch (Exception e)
          ??{
          ???e.printStackTrace();
          ??}
          ?}
          }

          反編譯新的License.class發現文件改好了。


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


          網站導航:
           
          主站蜘蛛池模板: 繁峙县| 岳普湖县| 巢湖市| 清水河县| 西吉县| 临沂市| 内黄县| 凉城县| 惠水县| 太谷县| 屯昌县| 峨眉山市| 睢宁县| 岳西县| 龙口市| 石城县| 瑞金市| 安图县| 藁城市| 凤冈县| 花垣县| 锦州市| 张北县| 峨眉山市| 青冈县| 大方县| 乌拉特后旗| 武平县| 神木县| 崇阳县| 永清县| 定南县| 西充县| 裕民县| 清水河县| 武安市| 青阳县| 治县。| 江安县| 重庆市| 安西县|