本文主要介绍反编译jar的三种方式,通过实例代码详细介绍,具有一定的参考价值。感兴趣的朋友可以参考一下。
目录
工具有三种准备方式:1。用fernflower反编译然后编译;2.用javassist动态修改class33.通过引入原始jar包(推荐)摘要来修改代码
工具准备
相同版本的jdk
想法
蕨类植物
Javassist.jar或本地下载地址
Jd-gui或本地下载地址
三种方式
1.使用fernflower反编译之后再编译
修改。要反编译成。拉链。
Java-jar fern flower . jar classes . zip zzCode/
你可以得到全是java的jar文件,用压缩软件解压,导入idea。
2.使用javassist动态修改class
导入javassist。ClassPool
导入javassist。CtClass
导入javassist。CtMethod
导入Java . util . map;
导入javassist。NotFoundException
公共类main {
公共静态void main(String[] args)引发异常{
尝试{
class pool pool=class pool . get default();
//指定类所在的路径
pool . insert class path(' C:\ \ rike . jar ');
//指定导入的包,这里不需要,所以将其注释掉
//pool.importPackage('dialog。dialog utils’);
//pool.importPackage('common。listener utils ');
//pool . import package(' Java . util . map ');
//指定要修改的类的完整类名
CtClass cc=pool . get(' aggregate . dialogs . windows executabledialog ');
//设置要修改的方法所需的参数。无法设置任何参数。
CtClass[] param=新的CtClass[5];
param[0]=pool . get(' Java . util . map ');
param[1]=pool.get('对话框。dialog utils’);
param[2]=pool.get('common。listener utils ');
//指定要修改的类方法
CT method m=cc . getdeclaredmethod(' dialog action ');
//如果需要修改参数,请使用以下命令
//CT method m=cc . getdeclaredmethod(' dialog action ',param);
//将新代码插入到前面
//m . insert before(' { if(true)return;}');
//重置方法体
m . set body(' { system . out . println(' hi class 1 ');}');
//保存到一个文件,该文件将保存在此项目下。
cc . writefile();
} catch(异常e) {
e . printstacktrace();
}
}
}
将生成一个类文件,并直接复制到jar包中。
注意,在setBody包中,$0表示这个$1表示第一个参数,$2表示第二个参数。
3.通过引入原来的jar包,修改代码(推荐)
我在测试的时候之所以用这个方法,是因为jar文件比较复杂,之前的方法有很多错误。
在你要修改的类文件对应的目录下创建一个文件夹,比如idea中项目的src文件夹。
修改里面的代码,然后在idea中使用快捷键ctrl alt shift s引入完整的jar包。
在加号处介绍一下就可以了。
生成新jar
单击构建。
生成。
或者直接在jar包中修改生成的类文件。
项目的out\production\文件夹中有生成的类文件,只需拖拽到原jar中修改即可。
总结
这是之前挖坑的总结。之前没接触过java,真的比php难多了…
这就是关于反编译jar实现的三种方法的文章。更多相关反编译jar内容,请搜索我们之前的文章或者继续浏览下面的相关文章。希望大家以后能多多支持我们!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。