Java Jar 包反编译

Java Jar 包反编译

关键词:java jar javac luyten classpath 编译 反编译 修改 源码


1.安装反编译工具Luyten(Windows安装示例)

1.1 下载luyten

项目地址:https://github.com/deathmarine/Luyten

在这里插入图片描述

下载好后解压

1.2 安装maven

1.2.1 下载最新Maven程序

https://maven.apache.org/download.cgi

在这里插入图片描述

1.2.2 解压到本地

像我的话就是解压到 F:\Program\java\

文件改名为 apache-maven

在这里插入图片描述

1.2.3 配置环境变量

新建环境变量 MAVEN_HOME

在这里插入图片描述


编辑环境变量Path,追加%MAVEN_HOME%\bin\

在这里插入图片描述

1.2.4 查看maven版本

【Win】+R -> cmd

mvn -v

在这里插入图片描述

1.2.5配置本地仓库路径

在F:\Program\java\目录下新建maven-repository文件夹,该目录用作maven的本地库

打开F:\Program\java\maven\conf\settings.xml文件,查找下面这行代码:

<localRepository>/path/to/local/repo</localRepository>

localRepository节点默认是被注释掉的,需要把它移到注释之外,然后将localRepository节点的值改为我们在3.1中创建的目录F:\Program\java\apache-maven-reposity

localRepository节点用于配置本地仓库,本地仓库其实起到了一个缓存的作用,它的默认地址是 C:\Users\用户名.m2。当我们从maven中获取jar包的时候,maven首先会在本地仓库中查找,如果本地仓库有则返回;如果没有则从远程仓库中获取包,并在本地库中保存。此外,我们在maven项目中运行mvn install,项目将会自动打包并安装到本地仓库中。

1.3 安装wget

1.3.1 下载wget.exe

https://eternallybored.org/misc/wget/

在这里插入图片描述

将wget文件复制到C:\Windows\System32文件夹下即可

1.4 使用 maven 对 luyten 项目进行编译和打包

打开cmd命令行,进入到 Luyten-master 文件夹下,执行 mvn package

在这里插入图片描述

等待安装完成

看到BUILD SUCCESS 即为安装完成,如下图

在这里插入图片描述


安装完成后,进入 Luyten-master 文件夹下新增的 target 文件夹

双击 luyten-0.5.3.exe 即可使用


2.反编译

使用反编译工具反编译 jar 包,在 jar 包中找到自己的所需文件,并导出为 java 文件

在这里插入图片描述

在这里插入图片描述


3.修改源码

不熟悉的话可以先进行简单修改,如添加日志输出、新增函数等。

对代码比较熟悉的时候,可以直接修改源码。


4.编译修改后的新代码

首先,要将 java 文件编译为 class 文件。

编译准备:准备你需要依赖的jar包。

我这里以反编译Elasticsearch源码作为示例,我会准备所有Elasticsearch的原生jar包一份。编译通常需要使用到 elasticsearch-6.8.4/lib/下的jar包和elasticsearch-6.8.4/modules/x-pack-core/下的jar包。

编译命令格式(windows 下)

javac -cp "dir/file.jar;dir/file.jar" xx.java

javac -cp "dir/*;dir/*" xx.java

使用注意要点

  • cp 就是 classpath
  • 需要使用 “” 将 jar 包括起来,""中的 jar 包一般包含为主函数 jar 包与其余依赖 jar 包
  • cp 参数支持通配符匹配 jar 文件。使用 * 而不是使用 *.jar 来匹配 jar 包。
  • /foo/* 会加载 foo 下的 .jar 文件,但不会加 /foo/ 子目录下的 jar 文件
  • 加载的顺序是不固定的

例如,

javac -cp "F:\Program\java\elasticsearch\elasticsearch-6.8.4\lib\*;F:\Program\java\elasticsearch\elasticsearch-6.8.4\modules\x-pack-core\*" Netty4HttpRequestHandler.java
javac -cp "F:\Program\java\elasticsearch\elasticsearch-6.8.4\lib\*;F:\Program\java\elasticsearch\elasticsearch-6.8.4\modules\x-pack-core\*;guava-20.0.jar" Netty4HttpRequestHandler.java
javac -cp "F:\Program\java\elasticsearch\elasticsearch-6.8.4-2\lib\*;F:\Program\java\elasticsearch\elasticsearch-6.8.4-2\modules\x-pack-core\*" Netty4HttpRequestHandler.java

使用以上命令编译出来一个以上以Netty4HttpRequestHandler开头的class文件。


5.新旧替换

解压原 jar 包,替换掉旧 class 文件,压缩成新 jar 包

想使用 jar 命令,就需要先安装 jdk-devel 包

解压原有 jar 包

jar -xf file.jar

解压原有 jar 包到指定目录

unzip file.jar -d dir/-

在 jar 包解压出来的目录文件中,替换掉旧的 class 文件

将制定的目录文件压缩成新 jar 包

jar cfm elasticsearch-6.8.4.jar .../MANIFEST.MF -C filesDir/ .

6.运行测试

测试是否能够正常运行

像我的反编译测试:

在这里插入图片描述

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值