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