使用jd-gui反编译修改jar包里的.class并重新生成新jar

这篇具有很好参考价值的文章主要介绍了使用jd-gui反编译修改jar包里的.class并重新生成新jar。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

  • 准备工具:jd-gui.exe反编译工具
  • 下面以我本地修改graphql-java-15.0.jar包为例:
  1. 准备jar包,新建origin文件夹,将jar包通过win.rar或当前文件夹cmd运行解压命令jar -xvf graphql-java-15.0.jar解压到origin文件夹内
    jdgui反编译jar,java,jar,java,jvm
    jdgui反编译jar,java,jar,java,jvm
  2. 使用 jd-gui工具 打开graphql-java-15.0.jar
    jdgui反编译jar,java,jar,java,jvm
    假如我要修改Assert.class,不要在 jd-gui工具里面修改,先ctrl+s保存要修改的文件到某目录
    jdgui反编译jar,java,jar,java,jvm
    我保存在跟graphql-java-15.0.jar同目录下
    jdgui反编译jar,java,jar,java,jvm
  3. 使用文本编辑工具(我用nodepad),修改java文件里的某段逻辑,然后通过命令重新编译该java文件为class文件
javac -cp graphql-java-15.0.jar Assert.java   //  -cp graphql-java-15.0.jar  表示Assert.java编译时依赖graphql-java-15.0.jar

jdgui反编译jar,java,jar,java,jvm
4. 用编译好的Assert.class替换掉原先解药的origin目录里的,使用命令将origin目录里的文件打包为新的jar包:
先进入到origin,执行打包命令:

jar -cvfm0 graphql-java-15.0-modify.jar META-INF/MANIFEST.MF ./

至此便生成新的jar包
jdgui反编译jar,java,jar,java,jvm
5. 引用修改后的jar包
将jar包放在项目lib,修改pom文件
jdgui反编译jar,java,jar,java,jvm
jdgui反编译jar,java,jar,java,jvm
注意!!!
原本通过pom引入的jar包,如果有外部包,要手动引入,我们修改后引入的graphql-java-15.0-modify.jar不会自动导入这些外部依赖包
jdgui反编译jar,java,jar,java,jvm
在pom文件引入:文章来源地址https://www.toymoban.com/news/detail-614668.html

<!--graphql-java-15.0.jar依赖的其他jar begin-->
		<dependency>
			<groupId>org.antlr</groupId>
			<artifactId>antlr4-runtime</artifactId>
			<version>4.7.2</version>
		</dependency>
		<dependency>
			<groupId>com.graphql-java</groupId>
			<artifactId>java-dataloader</artifactId>
			<version>2.2.3</version>
		</dependency>
		<dependency>
			<groupId>org.reactivestreams</groupId>
			<artifactId>reactive-streams</artifactId>
			<version>1.0.3</version>
		</dependency>
		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>slf4j-api</artifactId>
			<version>1.7.29</version>
		</dependency>
		<!--graphql-java-15.0.jar依赖的其他jar end-->

到了这里,关于使用jd-gui反编译修改jar包里的.class并重新生成新jar的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 关于jar包的命令:运行jar包时指定端口、直接修改jar包里的配置文件

    如下:指定端口为8081,不管jar包里面之前是指定了什么端口号,最终访问服务时还是以8081这个端口进行访问 vim进入jar包后,会有类似如下的的内容 在定位到具体某行(文件名)后,该文件会有提示,直接回车进入编辑模式,即可编辑了

    2024年02月12日
    浏览(37)
  • mac jd-gui安装

    在macOS上安装JD-GUI(Java Decompiler GUI)是一个简单的过程。JD-GUI是一个独立的图形化应用程序,你可以使用它来查看Java字节码对应的源代码。下面是安装步骤: 下载JD-GUI : 访问JD-GUI的官方网站(http://java-decompiler.github.io/)或直接到GitHub的发布页(https://github.com/java-decompiler/

    2024年04月17日
    浏览(26)
  • 解决 MacOS BigSur JD-GUI 打开失败的问题

    前言 JD-GUI 是一款轻量级的 Java 反编译工具,对于一些没有源码的 Jar 包,直接拖进去就可以反编译源码,十分的方便。 在 MacOS 还是 Mojave 的时候,JD-GUI 使用一切正常。 当系统升级到 BigSur 和 Monterey 的时候,打开 JD-GUI 就会提示找不到 JDK 环境。(即使你的电脑已经存在 JDK

    2024年02月15日
    浏览(27)
  • 获取jar包里的资源路径

    jar中资源有其专门的URL形式: jar:!/{entry} 。所以,如果jar包中的类源代码用File f=new File(相对路径);的形式,是不可能定位到文件资源的,启动jar包时会报出FileNotFoundException。 打包时将文件放在jar包外,然后通过服务器的路径去获取文件,File file = new File(“服务器的资源路径”

    2024年02月13日
    浏览(24)
  • javassist 动态修改 jar 包中 class

    Javassist(Java Programming Assistant)是一个用于在运行时操作字节码的库,它可以用于动态修改和操作Java类。使用Javassist,可以通过修改现有的类或创建新的类来实现动态修改Jar包中的类。 下面是一个简单的示例,展示了如何使用Javassist在运行时动态修改Jar包中的类: 上述示例

    2024年02月11日
    浏览(29)
  • 压缩包里的文件名可以这样隐藏起来

    我们知道,压缩后的文件如果有保密需要,可以给压缩包设置打开密码。 设置密码后,还是可以打开压缩包,也可以看到压缩包里面的文件名称,当你点击里面的文件,才会提示需要输入密码后才能打开文件。 如果希望加密后的压缩包,不止文件的内容保密,文件名也不想

    2024年02月06日
    浏览(35)
  • OpenHarmony应用开发引入开源C/C++库---之Har包里的NDK

    Har 包 HAR(Harmony Archive)是静态共享包,可以包含代码、C++ 库、资源和配置文件。通过 HAR 可以实现多个模块或多个工程共享 ArkUI 组件、资源等相关代码。HAR 不同于 HAP,不能独立安装运行在设备上,只能作为应用模块的依赖项被引用。 使用场景 作为二方库,发布到 OHPM  私

    2024年04月14日
    浏览(31)
  • Jar包反编译,修改代码后,重新打jar包

    最近遇到一个问题,需要把现有的jar包反编译成java代码,然后运行,测试,修改后再次打jar包。并不复杂的项目,只是一个很简单的main方法,并不是spring项目。可能是之前的开发走了,然后代码丢失了,只剩下客户那边有一个用的jar包。 jar包:xxx-0.0.1-SNAPSHOT-jar-with-dependen

    2023年04月08日
    浏览(47)
  • 开发Android原生插件,引入自己打的jar报,编译报 Unsupported class file major version 61

    “Unsupported class file major version 61” 错误的原因是由于你自己大的jar包当时是用的Java 17打包的,因为在 Java 中,每个主要版本都有一个对应的 major version 值。例如,Java 8 的 major version 值为 52,Java 9 的 major version 值为 53,以此类推。Java 17 的 major version 值为 61。 解决这个问题,

    2024年02月09日
    浏览(34)
  • 低版本jdk运行高版本编译jar包失败(class file version 61.0), this version of the Java Runtime class file 52.0

    省流:使用jdk1.8执行17编译的包,启动报错。         项目运行中难免出现服务器环节集成其它jar包的情况,而其它jar包的jdk版本可能和我们业务项目的jdk版本不一致,如果比我们业务版本低,那么可能不会出现问题, 因为jdk向下兼容,如果jdk版本比我们业务版本高,可能就

    2024年02月02日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包