文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

反编译jar实现的方式有哪些

2023-06-21 23:06

关注

这篇文章主要介绍“反编译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文件夹下

反编译jar实现的方式有哪些

在里面修改代码,之后在idea中使用快捷键ctrl+alt+shift+s引入完整的jar包

反编译jar实现的方式有哪些

在加号处引入即可
新建生成jar

反编译jar实现的方式有哪些

点击build

反编译jar实现的方式有哪些

反编译jar实现的方式有哪些

生成即可

反编译jar实现的方式有哪些

或者将生成的class文件,直接在jar包中修改
在项目的out\production\文件夹下有生成的class文件,直接拖到原始jar中修改即可

到此,关于“反编译jar实现的方式有哪些”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     801人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     348人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     311人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     432人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     220人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯