反编译jar实现的方式有哪些
发表于:2025-02-02 作者:千家信息网编辑
千家信息网最后更新 2025年02月02日,这篇文章主要介绍"反编译jar实现的方式有哪些",在日常操作中,相信很多人在反编译jar实现的方式有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"反编译jar实现的
千家信息网最后更新 2025年02月02日反编译jar实现的方式有哪些
这篇文章主要介绍"反编译jar实现的方式有哪些",在日常操作中,相信很多人在反编译jar实现的方式有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"反编译jar实现的方式有哪些"的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
工具准备
相同大版本的jdk
idea
fernflower.jar
javassist.jar
jd-gui
三种方式
1.使用fernflower反编译之后再编译
把要反编译的.jar
修改成.zip
java -jar fernflower.jar classes.zip zzCode/
即可得到全为java的jar文件,用压缩软件解压后导入idea即可
2.使用javassist动态修改class
import javassist.ClassPool;import javassist.CtClass;import javassist.CtMethod;import java.util.Map;import javassist.NotFoundException;public class main { public static void main(String[] args) throws Exception { try { ClassPool pool = ClassPool.getDefault(); //指定class所在的路径 pool.insertClassPath("C:\\rike.jar"); //指定引入的包,这里不需要,所以注释掉 //pool.importPackage("dialog.DialogUtils"); //pool.importPackage("common.ListenerUtils"); //pool.importPackage("java.util.Map"); //指定要修改class的完整类名 CtClass cc = pool.get("aggressor.dialogs.WindowsExecutableDialog"); //设置要修改的方法需要的参数,没有参数可以不设置 CtClass[] param = new CtClass[5]; param[0] = pool.get("java.util.Map"); param[1] = pool.get("dialog.DialogUtils"); param[2] = pool.get("common.ListenerUtils"); //指定要修改的类方法 CtMethod m = cc.getDeclaredMethod("dialogAction"); //如果需要修改参数,使用下面这个 //CtMethod m = cc.getDeclaredMethod("dialogAction",param); //插入新的代码到最前面 //m.insertBefore("{if(true) return ;}"); //重新设置方法体 m.setBody("{System.out.println(\"hi class1\");}"); //保存到文件里,文件会保持到该工程下 cc.writeFile(); } catch (Exception e) { e.printStackTrace(); } }}
会生成一个class文件,直接复制到jar包就可以
注意,在setBody
包里面,用$0
代表this
$1
代表第一个参数 $2
代表第二个参数
3.通过引入原来的jar包,修改代码(推荐)
我在测试的时候,因为jar文件比较复杂,前面的方式都会有很多报错,所以使用这种方法
在你要修改的class文件对应目录下建立文件夹,例如在idea中,项目的src文件夹下
在里面修改代码,之后在idea
中使用快捷键ctrl
+alt
+shift
+s
引入完整的jar包
在加号处引入即可
新建生成jar
点击build
生成即可
或者将生成的class文件,直接在jar包中修改
在项目的out\production\文件夹下有生成的class文件,直接拖到原始jar中修改即可
到此,关于"反编译jar实现的方式有哪些"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!
文件
编译
方式
参数
方法
生成
学习
代码
代表
文件夹
更多
项目
帮助
原始
复杂
实用
相同
接下来
下有
加号
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
重庆苹果软件开发收费多少
kudu 创建数据库
武宣天气预报软件开发
网络安全上机试题
网格化管理数据库设计
软件开发完成情况怎么写
七日杀服务器难度
深圳市至京网络技术
kvm数据采集服务器
数据库导出的文件用什么打开
扬明网络技术有限公司
用友u8引入账套数据库错误
理解计算机网络技术
家用服务器安全吗
麻将软件开发目标
新创网络技术有限公司
网络安全团会策划书
数据库加密的主要方式
曙光服务器管理卡重启
博山网络审批oa软件开发
t168服务器老版
互联网 未来科技
企业网络安全性差
服务器选择什么虚拟机
阿里云服务器免流教程
服务器做虚拟化
python数据库登录
ftp服务器 断点续传
徐州网络软件开发商家
第四届红帽杯网络安全大赛