Java 目標文件的修改

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

          以前一直在win32匯編里打滾,對于修改一個exe文件是件很容易的事情,但到了java下發(fā)現(xiàn)想修改一個
          沒源碼的.class文件還真是個問題,上網(wǎng)看了一大堆資料,有ASM和Javassist可以做這事情,ASM看上去
          很專業(yè),但看了文檔好象要在op code的級別下寫代碼,頭暈。Javassist簡單些,看完幾個sample心里基本
          有數(shù)了,隨手找來一個有日期限制的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發(fā)現(xiàn)文件改好了。


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


          網(wǎng)站導航:
           
          主站蜘蛛池模板: 云霄县| 东方市| 奎屯市| 灵武市| 德化县| 巩留县| 武宁县| 永平县| 吴江市| 仙桃市| 香港 | 武冈市| 威信县| 抚远县| 博罗县| 江孜县| 西青区| 阜新市| 建德市| 昆山市| 灵丘县| 桐城市| 铜陵市| 南京市| 收藏| 彝良县| 仙桃市| 金寨县| 正镶白旗| 探索| 大方县| 平和县| 庄河市| 宝兴县| 巴彦淖尔市| 江都市| 资阳市| 长阳| 阿城市| 平原县| 南宁市|