Java 目標文件的修改

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

          以前一直在win32匯編里打滾,對于修改一個exe文件是件很容易的事情,但到了java下發(fā)現(xiàn)想修改一個
          沒源碼的.class文件還真是個問題,上網(wǎng)看了一大堆資料,有ASM和Javassist可以做這事情,ASM看上去
          很專業(yè),但看了文檔好象要在op code的級別下寫代碼,頭暈。Javassist簡單些,看完幾個sample心里基本
          有數(shù)了,隨手找來一個有日期限制的Taglib,關(guān)鍵的代碼猜都不用猜在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)站導(dǎo)航:
           
          主站蜘蛛池模板: 土默特右旗| 鹿邑县| 台江县| 同江市| 北辰区| 阜新| 林州市| 奉节县| 鄂尔多斯市| 噶尔县| 新疆| 海淀区| 淮安市| 涞源县| 诸城市| 孙吴县| 涞水县| 福海县| 宾川县| 汉川市| 利辛县| 河东区| 长武县| 武冈市| 嘉荫县| 金川县| 太湖县| 临沧市| 鹤峰县| 志丹县| 五莲县| 延长县| 抚远县| 海南省| 思茅市| 宣化县| 介休市| 清丰县| 肇庆市| 上思县| 孝感市|