Java 目标文件的修改

Posted on 2006-08-13 16:22 小蚂蚁 阅读(279) 评论(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发现文件改好了。


只有注册用户登录后才能发表评论。


网站导航: