最近很多同学问我,JByteMod和javassist是怎么用的呐
我今天就来给大家梳理一下他们的使用方法吧
一、JByteMod
查看jar代码的工具,很多时候我们是拿不到源码的,想看jar的逻辑代码就需要用到JByteMod
下载链接:https://download.csdn.net/download/qq_42834405/12994116
使用方法:
1.cmd中输入java -jar JByteMod-1.6.1.jar
2.会出来这样的页面,点击file 点击load,选择你的jar
3.就能看到代码了
二、javassist
1.Javassist是一个开源的分析、编辑和创建Java字节码的类库。
2.demo下载链接
https://download.csdn.net/download/qq_42834405/12965646
3.使用方法
将javassist.jar加入工程里面
4.代码,全部贴出来了,可以直接使用
public static void main(String[] args) {
//方法一,方法名唯一适用
/* try {
ClassPool.getDefault().insertClassPath("d:\\test\\aspose.pdf-17.8.jar");
CtClass License =ClassPool.getDefault().getCtClass("com.aspose.pdf.z123");
CtMethod a = License.getDeclaredMethod("m1");
System.out.println(a);
a.setBody("{return null;}");
License.writeFile();
} catch (NotFoundException | CannotCompileException | IOException e) {
e.printStackTrace();
}*/
//方法二,适用于有同名不同参方法的修改
try {
ClassPool.getDefault().insertClassPath("d:\\test\\aspose-cells-19.2.jar");//需要修改的jar
CtClass c2 = ClassPool.getDefault().getCtClass("com.aspose.cells.License");//jar中需要修改的类
CtMethod[] ms = c2.getDeclaredMethods();//获取类中的方法
for (CtMethod c : ms) {
CtClass[] ps = c.getParameterTypes();
//类中的方法名字为a(需要修改的方法,方法的参数有2个,都是string类型)
if (c.getName().equals("a") && ps.length == 2 &&
ps[0].getName().equals("java.lang.String") &&
ps[1].getName().equals("java.lang.String")) {
//将方法修改
String aaa = "{return true;}";
//设置该方法
c.setBody(aaa);
}
}
//写到类里面
c2.writeFile();
//运行之后去com里面获取该类,替换到原jar里面即可
} catch (NotFoundException | CannotCompileException | IOException e) {
e.printStackTrace();
}
}
5.去项目路径com里面找到生成的类
6.用压缩包方法打开你自己要修改的jar,将生成的类替换到jar里面即可