IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> 反编译SpringBoot项目 -> 正文阅读

[Java知识库]反编译SpringBoot项目

项目缺失源码(外包项目没拿到源码 -_- ),但服务器上有项目的war包,然后需要通过war包反编译出项目源码进行项目的二次开发。

思路

项目采用SpringBoot2 + MybatisPlus框架开发,pom.xml、Mapper.xml等资源文件可以直接从war包中提取,主要就是要class字节码文件反编译回java源文件,war包结构如下:

├─META-INF          # 目录存放应用打包信息(Maven坐标、pom文件)和MANIFEST.MF文件
│  ├─MANIFEST.MF  
│  ├─maven          # 这里面可以获得项目的 pom.xml 文件
├─WEB-INF
│  ├─classes        # 目录存放应用编译后的class、application.yml、mapper.xml文件
│  ├─lib            # 目录存放应用依赖的第三方JAR包文件
├─org               # 目录存放SpringBoot相关class文件
  • 首先我们创建一个空的Maven项目
  • 从war包中获取pom.xml文件替换新建项目的pom.xml文件
  • 将wat包中 WEB-INF/classes 下的静态资源文件(排除class文件)复制到新项目的 src/main/resources 目录下
  • 将class文件反编译为java源文件后复制到新项目的 src/main/java 目录下(具体操作后面介绍)
  • 编译新项目,处理maven依赖问题以及反编译代码问题

如果项目pom.xml中存在共有Maven仓库不存在的依赖时,我们可以再 wat 包中 WEB-INF/lib 目录下找到对应的jar 文件,然后发布到我们的私有Maven仓库就可以解决了。

反编译工具的选择

fernflower

参考 fernflower idea内置的反编译工具 对class 文件进行反编译,

结果发现泛型丢失,如下图:
反编译出来的Java源文件
我直接用idea(2020.2)打开class文件可以看到是有泛型的:
正确的Java源文件
可能和fernflower版本有问题,参考使用idea自带的反编译工具 [FernFlower]Java 原文件时有泛型的。

java -cp 参数1 org.jetbrains.java.decompiler.main.decompiler.ConsoleDecompiler -dgs=true 参数2 参数3

参数说明:

  • 参数1。IDEA安装目录下的反编译插件“java-decompiler.jar”所在路径,需要加上双引号。示例:“E:\IntelliJ IDEA 2020.2.2\plugins\java-decompiler\lib\java-decompiler.jar”
  • 参数2。需要反编译的文件所在目录,不加双引号。示例:E:\exercise\reflect
  • 参数3。反编译后的文件输出目录,该目录需自己提前创建好,需要加上双引号。示例:“E:\exercise\reflect\test”
    完整命令示例:java -cp D:\JetBrains\apps\IDEA-U\ch-0\202.7660.26\plugins\java-decompiler\lib\java-decompiler.jar org.jetbrains.java.decompiler.main.decompiler.ConsoleDecompiler -dgs=true ApiVesrsionCondition.class .

但是源文件也会存在问题:

  • 项目有使用lombok,反编译处理的Java 文件 hashCode 第一行都多了一句 “int PRIME = true;”
    在这里插入图片描述

Java Decompiler(JD-GUI)

直接通过官网下载windows版本的执行程序,直接运行
fernflower idea内置的反编译工具
默认情况下到出的java 源码会后行号信息,可以再设置中关闭。
反编译处理的Java 文件是有泛型的,但 hashCode 第一行也都多了一句 “int PRIME = true;”

反编问题

首先就是大量的 JavaBean 的 hashCode 方法多了一句 “int PRIME = true;” 会导致编译报错,需要手动处理,应为项目使用了 lombok,可以通过idea的lombok插件处理,再有问题的JavaBean源文件中右键 Refactor -> Lombok -> Default @Data。
在这里插入图片描述
源代码中存在大量的强制类型转换:

User user = (User) this.userMapper.selectById(question.getTeacherUserId()); // 多余的强制类型转换
User user = this.userMapper.selectById(question.getTeacherUserId());

通过idea 的代码分析功能全局处理:
在这里插入图片描述

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2022-11-05 00:12:25  更:2022-11-05 00:13:16 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年3日历 -2025/3/10 18:44:46-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码