Java 目標文件的修改

          Posted on 2006-08-13 16:22 小螞蟻 閱讀(291) 評論(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發現文件改好了。


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


          網站導航:
           
          主站蜘蛛池模板: 灵石县| 罗平县| 富裕县| 台山市| 南岸区| 靖安县| 甘泉县| 汝城县| 广西| 辽阳县| 名山县| 吉木乃县| 石门县| 牟定县| 资中县| 武胜县| 潮州市| 息烽县| 贵港市| 炎陵县| 万安县| 方山县| 微博| 石棉县| 汨罗市| 九江市| 景宁| 扶风县| 胶南市| 香河县| 修文县| 滨海县| 洛浦县| 扬中市| 板桥市| 五大连池市| 海淀区| 永福县| 云南省| 松桃| 吉林省|