使用jar包反编译形成pom工程

目录
  • 1. 反编译jar得到源码
    • 1.1 使用jd-gui工具
    • 1.2 点击file - > open file 选中需要反编译的jar
    • 1.3 保存反编译的源代码
  • 2. ideal新建pom工程
    • 2.1 file ->new ->project
    • 2.2 GroupId 和 ArtifactId 可以自定义填写
    • 2.3 项目名称和项目文件保存路径会自动填入
    • 2.4 新建好的项目结构如下
  • 3. 复制jar源码到pom工程
    • 3.1 解压上面1.3那个步骤输出的zip
    • 3.2 补充pom文件里面的配置
    • 3.3 检查源代码
    • 3.4编译打包

这周接了一个需要吧把jar还原代码新建pom项目的工作,一百多个jar还是挺累的,鼠标用的都不灵敏了。当然这只是量的问题,下面记录一下具体的操作方法。

1. 反编译jar得到源码

1.1 使用jd-gui工具

这个不需要安装,下载之后压缩包里面有exe应用程序。打开jd-gui.exe,先设置一下反编译后不需要有注释。点击help -> preferences, 不要勾选write original line number 和write metadata

1.2 点击file - > open file 选中需要反编译的jar

或者直接把jar拖入到jd-gui的窗口。左边是列举包路径和文件,右边的窗口是显示源代码的

1.3 保存反编译的源代码

file -> save all source ,它会以zip的形式保存在本地计算机。

反编译之后的源文件有些是正常的,有部分可能是需要人工修复一下代码,比如反编译后有goto关键词,super指向报错等问题。可以换其他的反编译工具试试,再比对反编译之后的差异进行参考对其修复代码。这里还介绍一个反编译工具luyten,最新版本是0.0.5。其他的根据也很多,可以网上搜索。

如果同时使用不同的反编译工具,建议以某一个为主,其他做辅助参考。因为不同的反编译工具反编译之后的代码是有些差异的。比如变量名称,gd-gui是反编译是String str ,luyten 反编译是 String name,当然这个变量在整个类或者方法中都是一致的,不会报错关系不大,只是可阅读性是否容易看懂源码。格式上gd-gui会有很多断行空行没luyten整齐好阅读。luyten 的反编译速度没jd-gui快(luyten点击单个文件后右下角会显示进度条,100%时右边窗口就显示代码了)

2. ideal新建pom工程

2.1 file ->new ->project

选择maven选项,project SDK如果是第一次使用ideal的选择一下本机的jdk安装目录,点击下一步

2.2 GroupId 和 ArtifactId 可以自定义填写

建议都写项目名称,版本号自定义也可默认不修改

2.3 项目名称和项目文件保存路径会自动填入

(第一次使用ideal需要设置一下项目路径)

2.4 新建好的项目结构如下

3. 复制jar源码到pom工程

3.1 解压上面1.3那个步骤输出的zip

只需要复制主要代码到新pom项目下的src-main-java目录下

若解压后发现里面还有jar,说明你这个jar当时创建的时候本来就用了别人的jar,那这些解压后的jar在新建的pom工程肯定也是需要用上的,可以参考下面的3.2.1 步骤,也可以直接放在项目下和main-src-java 同一级目录就行,然后选中这些jar右键 选as Library 构建依赖。建议用下面3.2.1步骤的方案比较规范一些。

3.2 补充pom文件里面的配置

项目需要用到哪些jar都需要在此写好(文章末尾附有参考pom.xml文件),以下只列举了几个公网上可以自动下载到的jar。每次修改了pom文件后,右下角会出现弹框,点击import changes才会刷新依赖,java文件里面才能引用到新加的架包

3.2.1 如果用到了自己封装的jar,需要在本地仓库(我的是安装maven时默认的C:\Users\Administrator.m2\repository)下新建文件夹放好jar,下图圈出的三个分别是groupId、artifactId、version,可以自定义命名,最后文件夹下的架包命名是artifactId-version.jar(如下图就是fastjson-1.2.6.jar)

pom里面配置如下

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version>1.2.6</version>
</dependency>

3.2.2 如果用到公司私服上的jar,需要在maven安装目录下的settings.xml文件里面配置私服的 地址/镜像。

配置本地的maven仓库地址

<localRepository>D:\my_mevan\repository</localRepository> # 自行修改本地地址

配置私服镜像

	 <mirror>
        <id>nexus-aliyun</id>
        <mirrorOf>*</mirrorOf>
        <name>Nexus aliyun</name>
        <url>http://maven.aliyun.com/nexus/.../.../</url> # 填写你的url
    </mirror>

3.2.3 如果别人给了整个仓库给你,把仓库复制到C:\Users\Administrator.m2\下即可,然后file->setting到下面这个界面,选择别人给你的仓库就不用自己本地的仓库了。此处不建议把别人仓库下的文件下合并到自己的repository下面,可能会有问题引用不到的哟

3.3 检查源代码

反编译后有问题的代码片段,根据代码上下文进行修复或者自己写个与原来功能一致的代替。若遇道switch(字符串)有红色波浪线时(jdk1.7版本才开始支持字符串类型),可以参考如下设置file->Project Structure

Modules-> Source->language level选 8开头的这个(一般大于7开头均可)

3.4编译打包

点击右上侧的maven打开推窗,编辑package进行编译,等最下面的窗口打印日志,如果显示Process finished with exit code 0 表示打包成功,Process finished with exit code 1 表示有错误,根据日志提示修改完错误重试。打包成功后会出现target文件夹,里面存放的是编译之后的class和输出的jar

pom文件附件

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>yulisao</groupId>
    <artifactId>yulisao</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>jar</packaging> <!--打包输出方式,可以是jar、war等格式 -->
    <name>这里写你的项目名称</name>
    <description>这里写项目简要描述</description>
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
    </properties>
    <!--构建项目配置-->  <!--这个可以解决因switch(字符串)无法编译问题-->
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>
        </plugins>
    </build>
    <!--这里是项目jar依赖节点配置-->
    <dependencies>
        <dependency>
            <groupId>commons-lang</groupId>
            <artifactId>commons-lang</artifactId>
            <version>2.6</version>
        </dependency>
        <dependency>
            <groupId>dom4j</groupId>
            <artifactId>dom4j</artifactId>
            <version>1.1</version>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.0.1</version>
        </dependency>
        <!--项目需要用到的架包,都依次按此格式写好-->
    </dependencies>
</project>

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • 修改及反编译可运行Jar包实现过程详解

    将可运行Jar包,反编译成项目,修改代码,再次编译,打包. 需要工具:jd-gui.myeclipse 具体步骤: 1.使用jd-gui打开原始的Jar包,选择File-->Save All Sources,会生成一个zip压缩包 2.解压这个压缩包,生成一个文件夹,可以看到文件夹里所有的class文件变成了java源码文件.(如果最开始直接解压原始的Jar包,那么解压出来的就是class文件,而不是java源文件) 3.打开myeclipse,新建一个普通的Project项目,将解压后的内容拷

  • java如何反编译jar包并修改class文件重新打包

    目录 反编译jar包并修改class文件重新打包 解决思路 jar包反编译后修改源码再编译 1.场景 2.详细步骤 反编译jar包并修改class文件重新打包 这两天碰到一个需求:需要修改一个jar包中的逻辑代码,并且重新打包 本来是很简单的问题,但是因为这个jar包不是可执行的jar包(没有main方法入口),jar反编译之后又是不能通过idea重新打包,因为jar是混乱的 所以费了点时间,在此记录下 解决思路 反编译jar包 首先用一些反编译工具类似 jad-gui 之类的 ,将项目反编译成

  • 反编译jar实现的三种方式

    目录 工具准备 三种方式 1.使用fernflower反编译之后再编译 2.使用javassist动态修改class 3.通过引入原来的jar包,修改代码(推荐) 总结 工具准备 相同大版本的jdk idea fernflower.jar javassist.jar 或 本地下载地址 jd-gui 或 本地下载地址 三种方式 1.使用fernflower反编译之后再编译 把要反编译的.jar修改成.zip java -jar fernflower.jar classes.zip zzCode/

  • 使用jar包反编译形成pom工程

    目录 1. 反编译jar得到源码 1.1 使用jd-gui工具 1.2 点击file - > open file 选中需要反编译的jar 1.3 保存反编译的源代码 2. ideal新建pom工程 2.1 file ->new ->project 2.2 GroupId 和 ArtifactId 可以自定义填写 2.3 项目名称和项目文件保存路径会自动填入 2.4 新建好的项目结构如下 3. 复制jar源码到pom工程 3.1 解压上面1.3那个步骤输出的zip 3.2 补充pom文件里

  • 如何把本地jar包导入maven并pom添加依赖

    开发过程中经常遇到需要用某些http://maven.apache.org/中没有的jar包,这个时候可以用maven命令自己添加 通常这些jar包可以从其官网下载下来,然后用maven明天添加此jar包到maven 本次用例:jodconverter-2.2.2.jar,apache-maven-3.5.0 1:将jar包下载到某位置,为了方便,下载到了D:\lgqProject\apache-maven-3.5.0\bin下 2:用maven命令安装 因为我没有建环境变量,所以直接在bin目

  • 使用android-apktool来逆向(反编译)APK包方法介绍

    谷歌官方提供了apktool可以逆向已经发布出去的APK应用,即反编译已经打包成功的APK文件,使用它可以将其反编译成非常接近打包前的原始格式,对于APK来说,可以具体的逆向AndroidManifest.xml.资源文件resources.arsc以及将dex文件反编译成可以调试的smali文件. Warnning 但apktool并不等于是可以用来侵犯前作者的作品的工具,所以使用apktool工具的用户千万不用用其来进行不正当.非法的使用. It is NOT intended for pi

  • Android在高jar包版本的工程中修改方法

    android的应用程序安装包APK如果是在高版本的android jar上开发的是无法在低版本的android SDK上跑的,所以我们需要将我们已经开发好的应用程序换上低版本的android jar包重新编译一个APK,那么如何简单的在高版本的工程中直接修改呢: 1. eclipse中点击工程->Properties-> Android 在右侧的界面中选中Android 2.2即可(前提是你的android sdk中同时包含这两个版本的android jar包) 或者 打开default.p

  • Maven pom.xml 添加本地jar包依赖以及打包方法

    Maven项目打包时,如果遇到需要添加本地jar包依赖的时候,可以选择两种方法: 1. 安装到本地仓库 第一种方法比较常规,适用于需要添加的jar包也是由maven项目导出,含有pom文件的时候.只需要将jar包安装到本地maven仓库下,然后添加依赖即可. (1)安装到本地仓库,执行以下命令(其中的-Dfile/-DgroupId/-DartifactId/-Dversion项根据pom文件内容填写): mvn install:install-file -Dfile=xxxxx.jar -Dg

  • Android 自定义组件成JAR包的实现方法

    Android 自定义组件成JAR包的实现方法,这里对自己实现的Android View 组件进行JAR 包的处理. 在项目开发过程中,我们难免会用到自己去制作自定义的VIEW控件,之后我们别的项目如果需要的话就直接将其复制到对应的项目中使用,虽说这么做是一个解决问题的方法,但毕竟不是很好. 原因是,当我们项目积累越来越多,会发现自定义的控件越来越多,而且这些自定义的控件都是可以重复利用的,这时我们可以想想,如果把这些自定义控件都封装成一个JAR包,然后用一个项目积累起来,之后我们以后开发项目只

  • Android反编译代码和防止反编译

    一.反编译apk文件 安装ApkTool工具,该工具可以解码得到资源文件,但不能得到Java源文件.          安装环境:需要安装JRE1.6 1> 到http://code.google.com/p/android-apktool/ 下载apktool1.3.2.tar.bz2 和apktool-install-windows-2.2_r01-3.tar.bz2 文件.      解压两个文件,然后把解压后的文件放在一起,如:c:\apktool 2> 在系统变量PATH中添加进aa

  • 详解IDEA使用Maven项目不能加入本地Jar包的解决方法

    使用IDEA编辑Web项目已经逐渐超过了使用eclipse的人数,但是IDEA对于pom.xml的执行也就是Maven方式导包支持并不是很完善,简单来说就是pom.xml上面记录的依赖库一般都能导入,但是如果pom.xml上面的某个依赖库失效,比如远程服务器关闭或者网络不通,或者是你想要加入本地硬盘上的某个jar包而不修改pom.xml的时候,IDEA的弊端就会显现出来.主要表现就是无法获得的依赖库或者本地Jar包无法放到/WEB-INF/lib目录下,导致Web项目部署时报错. 一个常见的错误

  • Intellij IDEA 添加jar包的三种方式(小结)

    一.直接复制:(不推荐) 方法:直接将硬盘上的jar包复制粘贴到项目的lib目录下即可. 注意: 1.对于导入的eclipse项目,该方式添加的jar包没有任何反应,用make编译项目会报错 2.对于在idea中创建的项目,该方式添加jar包,编译不报错,但是打开Structure会有"...jar ... is missing ..."的提示,需要点击"Fix"或红灯泡解决. 二.通过Modules的Dependencies添加:(推荐) 1.打开 File -&

随机推荐